RPA Toolkit
0285452b0d1788c7565876f08038fb8a6c86c3e1
[rpatk.git] / rast / rastnode.h
1 #ifndef _RASTNODE_H_
2 #define _RASTNODE_H_
3
4 #include "robject.h"
5 #include "rharray.h"
6 #include "rcarray.h"
7
8 #ifdef __cplusplus
9 extern "C" {
10 #endif
11
12 #define R_OBJECT_ASTNODE (R_OBJECT_USER + 1)
13
14 typedef struct rastnode_s rastnode_t;
15
16
17 typedef struct rastsource_s {
18         rpointer ptr;
19         rulong size;
20 } rastsource_t;
21
22 #define R_ASTVAL_WORD 0
23 #define R_ASTVAL_LONG 1
24 #define R_ASTVAL_DOUBLE 2
25 #define R_ASTVAL_POINTER 3
26 #define R_ASTVAL_STRING 4
27 #define R_ASTVAL_ARRAY 5
28 #define R_ASTVAL_NODE 6
29
30 typedef struct rastval_s {
31         union {
32                 rword w;
33                 rlong l;
34                 rdouble d;
35                 rpointer ptr;
36                 rstring_t *str;
37                 rcarray_t *arr;
38                 rastnode_t *node;
39         } v;
40         ruint type;
41 } rastval_t;
42
43 #define R_ASTVAL_SET_ARRAY(__p__, __a__) do { (__p__)->v.arr = __a__; (__p__)->type =  R_ASTVAL_ARRAY; } while (0)
44
45
46 struct rastnode_s {
47         robject_t obj;
48         rastnode_t *parent;
49         rastval_t val;
50         rastsource_t src;
51         rharray_t *props;
52 };
53
54
55 robject_t *r_astnode_init(robject_t *obj, ruint32 type, r_object_cleanupfun cleanup, r_object_copyfun copy);
56 rastnode_t *r_astnode_create();
57 void r_astnode_addchild(rastnode_t *node, rastnode_t *child);
58
59 /*
60  * Virtual methods implementation
61  */
62 void r_astnode_cleanup(robject_t *obj);
63 robject_t *r_astnode_copy(const robject_t *obj);
64
65
66 #ifdef __cplusplus
67 }
68 #endif
69
70 #endif