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*/
11typedef struct OCdiminfo {
12    struct OCnodearray;   /* defining array node (if known)*/
13    size_t arrayindex;     /* rank position ofthis dimension in the array*/
14    size_t declsize;     /* from DDS*/
15OCdiminfo;
16
17/*! Specifies the Arrayinfo.*/
18typedef 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    size_t rank; /* == |dimensions|*/
23    size_t* sizes;
24OCarrayinfo;
25
26/*! Specifies Attribute info */
27typedef struct OCattribute {
28    char*   name;
29    OCtype etype; /* type of the attribute */
30    size_t  nvalues;
31    char**  values;  /* |values| = nvalues*sizeof(char**)*/
32OCattribute;
33
34/*! Specifies the Attinfo.*/
35/* This is the form as it comes out of the DAS parser*/
36typedef struct OCattinfo {
37    int isglobal; /* is this supposed to be a global attribute set?*/
38    int isdods;   /* is this a global DODS_XXX  attribute set */
39    OClistvalues; /* oclist<char*>*/
40OCattinfo;
41
42/*! Specifies the OCnode. */
43struct OCnode {
44    OCheader header; /* class=OC_Node */
45    OCtype     octype;
46    OCtype          etype; /* essentially the dap type from the dds*/
47    char*           name;
48    char*           fullname;
49    struct OCnode*  container; /* this node is subnode of container */
50    struct OCnode*  root;      /* root node of tree containing this node */
51    struct OCtree*  tree;      /* !NULL iff this is a root node */
52    struct OCnode*  datadds;   /* correlated datadds node, if any */
53    OCdiminfo       dim;       /* octype == OC_Dimension*/
54    OCarrayinfo     array;     /* octype == {OC_Structure, OC_Primitive}*/
55    OCattinfo       att;       /* octype == OC_Attribute */
56    /* primary edge info*/
57    OClistsubnodes; /*oclist<OCnode*>*/
58    /*int     attributed;*/ /* 1 if merge was done*/
59    OClistattributes; /* oclist<OCattribute*>*/
60    OCdatadata; /* Defined only if this node is a top-level atomic variable*/
61};
62
63#if SIZEOF_SIZE_T == 4
64#define OCINDETERMINATE  ((size_t)0xffffffff)
65#endif
66#if SIZEOF_SIZE_T == 8
67#define OCINDETERMINATE  ((size_t)0xffffffffffffffff)
68#endif
69
70extern OCnodeocnode_new(char* nameOCtype ptypeOCnoderoot);
71extern void occollectpathtonode(OCnodenodeOClistpath);
72extern void occomputefullnames(OCnoderoot);
73extern void occomputesemantics(OClist*);
74extern void ocaddattribute(OCattributeattrOCnodeparent);
75extern OCattributeocmakeattribute(char* nameOCtype ptypeOClistvalues);
76extern size_t ocsetsize(OCnodenode);
77extern OCerror occorrelate(OCnode*,OCnode*);
78extern void ocmarkcacheable(OCstatestateOCnodeddsroot);
79
80extern void octree_free(struct OCtreetree);
81extern void ocroot_free(OCnoderoot);
82extern void ocnodes_free(OClist*);
83
84/* Merge DAS with DDS or DATADDS*/
85extern OCerror ocddsdasmerge(struct OCstate*, OCnodedasOCnodedds);
86
87#endif /*OCNODE_H*/


HyperKWIC - Version 7.20DA executed at 11:37 on 27 Oct 2017 | Polyhedron Solutions - INTERNAL USE | COMMERCIAL (Any O/S) SN 4AKIed