BadVPN – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 /**
2 * @file NCDInterpProcess.h
3 * @author Ambroz Bizjak <ambrop7@gmail.com>
4 *
5 * @section LICENSE
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions are met:
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * 3. Neither the name of the author nor the
15 * names of its contributors may be used to endorse or promote products
16 * derived from this software without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21 * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
22 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
25 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */
29  
30 #ifndef BADVPN_NCDINTERPPROCESS_H
31 #define BADVPN_NCDINTERPPROCESS_H
32  
33 #include <stddef.h>
34  
35 #include <misc/debug.h>
36 #include <base/DebugObject.h>
37 #include <ncd/NCDAst.h>
38 #include <ncd/NCDVal.h>
39 #include <ncd/NCDEvaluator.h>
40 #include <ncd/NCDModule.h>
41 #include <ncd/NCDModuleIndex.h>
42 #include <ncd/NCDStringIndex.h>
43  
44 struct NCDInterpProcess__stmt;
45  
46 /**
47 * A data structure which contains information about a process or
48 * template, suitable for efficient interpretation. These structures
49 * are built at startup from the program AST for all processes and
50 * templates by \link NCDInterpProg. They are not modified after
51 * the program is loaded Inn case of template processes, the same
52 * NCDInterpProcess is shared by all processes created from the same
53 * template.
54 */
55 typedef struct {
56 struct NCDInterpProcess__stmt *stmts;
57 char *name;
58 int num_stmts;
59 int prealloc_size;
60 int is_template;
61 int *hash_buckets;
62 size_t num_hash_buckets;
63 void *cache;
64 DebugObject d_obj;
65 } NCDInterpProcess;
66  
67 int NCDInterpProcess_Init (NCDInterpProcess *o, NCDProcess *process, NCDStringIndex *string_index, NCDEvaluator *eval, NCDModuleIndex *module_index) WARN_UNUSED;
68 void NCDInterpProcess_Free (NCDInterpProcess *o);
69 int NCDInterpProcess_FindStatement (NCDInterpProcess *o, int from_index, NCD_string_id_t name);
70 const char * NCDInterpProcess_StatementCmdName (NCDInterpProcess *o, int i, NCDStringIndex *string_index);
71 void NCDInterpProcess_StatementObjNames (NCDInterpProcess *o, int i, const NCD_string_id_t **out_objnames, size_t *out_num_objnames);
72 const struct NCDInterpModule * NCDInterpProcess_StatementGetSimpleModule (NCDInterpProcess *o, int i, NCDStringIndex *string_index, NCDModuleIndex *module_index);
73 const struct NCDInterpModule * NCDInterpProcess_StatementGetMethodModule (NCDInterpProcess *o, int i, NCD_string_id_t obj_type, NCDModuleIndex *module_index);
74 NCDEvaluatorExpr * NCDInterpProcess_GetStatementArgsExpr (NCDInterpProcess *o, int i);
75 void NCDInterpProcess_StatementBumpAllocSize (NCDInterpProcess *o, int i, int alloc_size);
76 int NCDInterpProcess_PreallocSize (NCDInterpProcess *o);
77 int NCDInterpProcess_StatementPreallocSize (NCDInterpProcess *o, int i);
78 int NCDInterpProcess_StatementPreallocOffset (NCDInterpProcess *o, int i);
79 const char * NCDInterpProcess_Name (NCDInterpProcess *o);
80 int NCDInterpProcess_IsTemplate (NCDInterpProcess *o);
81 int NCDInterpProcess_NumStatements (NCDInterpProcess *o);
82 int NCDInterpProcess_CachePush (NCDInterpProcess *o, void *elem) WARN_UNUSED;
83 void * NCDInterpProcess_CachePull (NCDInterpProcess *o);
84  
85 #endif