File: ocnode.h

package info (click to toggle)
netcdf 1:4.7.4-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, sid
  • size: 104,952 kB
  • sloc: ansic: 228,683; sh: 10,980; yacc: 2,561; makefile: 1,319; lex: 1,173; xml: 173; awk: 2
file content (88 lines) | stat: -rw-r--r-- 3,246 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
/* Copyright 2018, UCAR/Unidata and OPeNDAP, Inc.
   See the COPYRIGHT file for more information. */

#ifndef OCNODE_H
#define OCNODE_H

/*! Specifies the Diminfo. */
/* Track info purely about declared dimensions.
   More information is included in the Dimdata structure (dim.h)
*/
typedef struct OCdiminfo {
    struct OCnode* array;   /* defining array node (if known)*/
    size_t arrayindex;	    /* rank position ofthis dimension in the array*/
    size_t declsize;	    /* from DDS*/
} OCdiminfo;

/*! Specifies the Arrayinfo.*/
typedef struct OCarrayinfo {
    /* The complete set of dimension info applicable to this node*/
    NClist*  dimensions;
    /* convenience (because they are computed so often*/
    size_t rank; /* == |dimensions|*/
    size_t* sizes;
} OCarrayinfo;

/*! Specifies Attribute info */
typedef struct OCattribute {
    char*   name;
    OCtype etype; /* type of the attribute */
    size_t  nvalues;
    char**  values;  /* |values| = nvalues*sizeof(char**)*/
} OCattribute;

/*! Specifies the Attinfo.*/
/* This is the form as it comes out of the DAS parser*/
typedef struct OCattinfo {
    int isglobal; /* is this supposed to be a global attribute set?*/
    int isdods;   /* is this a global DODS_XXX  attribute set */
    NClist* values; /* oclist<char*>*/
    struct OCnode* var; /* containing var else null */
} OCattinfo;

/*! Specifies the OCnode. */
struct OCnode {
    OCheader header; /* class=OC_Node */
    OCtype	    octype;
    OCtype          etype; /* essentially the dap type from the dds*/
    char*           name;
    char*           fullname;
    struct OCnode*  container; /* this node is subnode of container */
    struct OCnode*  root;      /* root node of tree containing this node */
    struct OCtree*  tree;      /* !NULL iff this is a root node */
    struct OCnode*  datadds;   /* correlated datadds node, if any */
    OCdiminfo       dim;       /* octype == OC_Dimension*/
    OCarrayinfo     array;     /* octype == {OC_Structure, OC_Primitive}*/
    OCattinfo       att;       /* octype == OC_Attribute */
    /* primary edge info*/
    NClist* subnodes; /*oclist<OCnode*>*/
    /*int     attributed;*/ /* 1 if merge was done*/
    NClist* attributes; /* oclist<OCattribute*>*/
    OCdata* data; /* Defined only if this node is a top-level atomic variable*/
};

#if SIZEOF_SIZE_T == 4
#define OCINDETERMINATE  ((size_t)0xffffffff)
#endif
#if SIZEOF_SIZE_T == 8
#define OCINDETERMINATE  ((size_t)0xffffffffffffffff)
#endif

extern OCnode* ocnode_new(char* name, OCtype ptype, OCnode* root);
extern void occollectpathtonode(OCnode* node, NClist* path);
extern void occomputefullnames(OCnode* root);
extern void occomputesemantics(NClist*);
extern void ocaddattribute(OCattribute* attr, OCnode* parent);
extern OCattribute* ocmakeattribute(char* name, OCtype ptype, NClist* values);
extern size_t ocsetsize(OCnode* node);
extern OCerror occorrelate(OCnode*,OCnode*);
extern void ocmarkcacheable(OCstate* state, OCnode* ddsroot);

extern void octree_free(struct OCtree* tree);
extern void ocroot_free(OCnode* root);
extern void ocnodes_free(NClist*);

/* Merge DAS with DDS or DATADDS*/
extern OCerror ocddsdasmerge(struct OCstate*, OCnode* das, OCnode* dds);

#endif /*OCNODE_H*/