[409] | 1 | /* Copyright 2009, UCAR/Unidata and OPeNDAP, Inc. |
---|
| 2 | See the COPYRIGHT file for more information. */ |
---|
| 3 | |
---|
| 4 | #ifndef OCNODE_H |
---|
| 5 | #define OCNODE_H |
---|
| 6 | |
---|
| 7 | /*! Specifies the Diminfo. */ |
---|
| 8 | /* Track info purely about declared dimensions. |
---|
| 9 | More information is included in the Dimdata structure (dim.h) |
---|
| 10 | */ |
---|
| 11 | typedef struct OCdiminfo { |
---|
| 12 | struct OCnode* array; /* defining array node (if known)*/ |
---|
| 13 | unsigned int arrayindex;/* rank position ofthis dimension in the array*/ |
---|
| 14 | ocindex_t declsize; /* from DDS*/ |
---|
| 15 | } OCdiminfo; |
---|
| 16 | |
---|
| 17 | /*! Specifies the Arrayinfo.*/ |
---|
| 18 | typedef struct OCarrayinfo { |
---|
| 19 | /* The complete set of dimension info applicable to this node*/ |
---|
| 20 | OClist* dimensions; |
---|
| 21 | /* convenience (because they are computed so often*/ |
---|
| 22 | unsigned int rank; /* == |dimensions|*/ |
---|
| 23 | } OCarrayinfo; |
---|
| 24 | |
---|
| 25 | /*! Specifies Attribute info */ |
---|
| 26 | typedef struct OCattribute { |
---|
| 27 | char* name; |
---|
| 28 | OCtype etype; /* type of the attribute */ |
---|
| 29 | size_t nvalues; |
---|
| 30 | char** values; /* |values| = nvalues*sizeof(char**)*/ |
---|
| 31 | } OCattribute; |
---|
| 32 | |
---|
| 33 | /*! Specifies the Attinfo.*/ |
---|
| 34 | /* This is the form as it comes out of the DAS parser*/ |
---|
| 35 | typedef struct OCattinfo { |
---|
| 36 | int isglobal; /* is this supposed to be a global attribute set?*/ |
---|
| 37 | OClist* values; /* oclist<char*>*/ |
---|
| 38 | } OCattinfo; |
---|
| 39 | |
---|
| 40 | /*! Specifies the OCnode. */ |
---|
| 41 | typedef struct OCnode { |
---|
| 42 | unsigned int magic; |
---|
| 43 | OCtype octype; |
---|
| 44 | OCtype etype; /* essentially the dap type from the dds*/ |
---|
| 45 | char* name; |
---|
| 46 | char* fullname; |
---|
| 47 | struct OCnode* container; /* this node is subnode of container */ |
---|
| 48 | struct OCnode* root; /* root node of tree containing this node */ |
---|
| 49 | struct OCtree* tree; /* !NULL iff this is a root node */ |
---|
| 50 | struct OCnode* datadds; /* correlated datadds node, if any */ |
---|
| 51 | OCdiminfo dim; /* octype == OC_Dimension*/ |
---|
| 52 | OCarrayinfo array; /* octype == {OC_Structure, OC_Primitive}*/ |
---|
| 53 | OCattinfo att; /* octype == OC_Attribute */ |
---|
| 54 | /* primary edge info*/ |
---|
| 55 | OClist* subnodes; /*oclist<OCnode*>*/ |
---|
| 56 | /*int attributed;*/ /* 1 if merge was done*/ |
---|
| 57 | OClist* attributes; /* oclist<OCattribute*>*/ |
---|
| 58 | struct OCSKIP {/* Support fast skipping ; in following, 0 => undefined */ |
---|
| 59 | ocindex_t count; /* no. instances (== dimension cross product); may be indeterminate*/ |
---|
| 60 | ocoffset_t instancesize;/*size of single instance; may be indeterminate*/ |
---|
| 61 | ocoffset_t totalsize; /* usually: count*instancesize + overhead; may be indeterminate */ |
---|
| 62 | ocoffset_t offset; /* mostly for debugging */ |
---|
| 63 | } skip; |
---|
| 64 | #ifdef OCIGNORE |
---|
| 65 | struct {/* do simple index cache */ |
---|
| 66 | int cacheable; /* is this object cacheable? */ |
---|
| 67 | int valid; /* is this cache valid */ |
---|
| 68 | ocindex_t index; /* last index */ |
---|
| 69 | ocoffset_t offset; /* position of the last indexed instance */ |
---|
| 70 | } cache; |
---|
| 71 | #endif |
---|
| 72 | } OCnode; |
---|
| 73 | |
---|
| 74 | #if SIZEOF_SIZE_T == 4 |
---|
| 75 | #define OCINDETERMINATE ((size_t)0xffffffff) |
---|
| 76 | #endif |
---|
| 77 | #if SIZEOF_SIZE_T == 8 |
---|
| 78 | #define OCINDETERMINATE ((size_t)0xffffffffffffffff) |
---|
| 79 | #endif |
---|
| 80 | |
---|
| 81 | #endif /*OCNODE_H*/ |
---|