VPP-118: add support for variable length arrays to jvpp
[vpp.git] / vppapigen / node.h
1 /*
2  *------------------------------------------------------------------
3  * node.h - definitions for an API generator
4  *
5  * Copyright (c) 2004-2009 Cisco and/or its affiliates.
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at:
9  *
10  *     http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *------------------------------------------------------------------
18  */
19
20 #ifndef _node_h_
21 #define _node_h_
22
23 /*
24  * Global prototypes
25  */
26
27 char *sxerox (const char *s);
28
29 enum node_subclass {  /* WARNING: indices must match the vft... */
30     NODE_ILLEGAL=0,
31     NODE_U8,
32     NODE_U16,
33     NODE_U32,
34     NODE_U64,
35     NODE_I8,
36     NODE_I16,
37     NODE_I32,
38     NODE_I64,
39     NODE_F64,
40     NODE_PACKED,
41     NODE_DEFINE,
42     NODE_UNION,
43     NODE_SCALAR,
44     NODE_VECTOR,
45     NODE_COMPLEX,
46     NODE_NOVERSION,
47     NODE_UWORD,
48     NODE_N_TYPES,  /* number of node types with VFT's */
49
50     /* pseudo-node(s) used in the lexer keyword table, but
51        NOT in need of a VFT... */
52     NODE_TYPEONLY,
53     NODE_MANUAL_PRINT,
54     NODE_MANUAL_ENDIAN,
55     NODE_MANUAL_JAVA,
56     NODE_DONT_TRACE,
57 };
58
59 enum passid {
60     TYPEDEF_PASS=1,
61     UNION_DEF_PASS,
62     ENDIANFUN_PASS,
63     PRINTFUN_PASS,
64     JAVA_METHOD_PASS,
65     JAVA_JNI_PASS,
66     PYTHON_PASS,
67 };
68
69 extern void *make_node (enum node_subclass type);
70
71 typedef struct node_ {
72     enum node_subclass type;
73     struct node_ *peer;
74     struct node_ *deeper;
75     int flags;
76     void *data[3];
77 } node_t;
78
79 /* To shut up gcc-4.2.x warnings */
80 #define CDATA0 ((char *)(this->data[0]))
81 #define IDATA1 ((int)(uword)(this->data[1]))
82 #define CDATA2 ((char *)(this->data[2]))
83
84 #define NODE_FLAG_MANUAL_PRINT (1<<0)
85 #define NODE_FLAG_MANUAL_ENDIAN (1<<1)
86 #define NODE_FLAG_MANUAL_JAVA (1<<2)
87 #define NODE_FLAG_TYPEONLY (1<<3)
88 #define NODE_FLAG_DONT_TRACE (1<<4)
89
90 typedef struct node_vft_ {
91     void (*print)(struct node_ *);
92     void (*generate)(struct node_ *, enum passid id, FILE *ofp);
93     char *endian_converter;
94     void (*java_method_function)(struct node_ *, enum passid id, FILE *ofp);
95     void (*java_jni_parameter)(struct node_ *, enum passid id, FILE *ofp);
96     void (*java_jni_setup)(struct node_ *, enum passid id, FILE *ofp);
97     void (*java_jni_code)(struct node_ *, enum passid id, FILE *ofp);
98     void (*java_jni_teardown)(struct node_ *, enum passid id, FILE *ofp);
99 } node_vft_t;    
100
101 #endif /* _node_h */