1#ifndef NC_NCGEN_H
2#define NC_NCGEN_H
3/*********************************************************************
4 *   Copyright 1993, UCAR/Unidata
5 *   See netcdf/COPYRIGHT file for copying and redistribution conditions.
6 *   $Header: /upc/share/CVS/netcdf-3/ncgen/ncgen.h,v 1.18 2010/06/01 15:34:53 ed Exp $
7*********************************************************************/
8
9#ifdef _MSC_VER
10#include <float.h>
11#include "../ncdump/isnan.h"
12#define strcasecmp _stricmp
13#endif
14
15#ifdef USE_NETCDF4
16#define CLASSICONLY 0
17#else
18#define CLASSICONLY 1
19#endif
20
21#define MAX_NC_ATTSIZE    20000 /* max size of attribute (for ncgen) */
22#define MAXTRST   5000 /* max size of string value (for ncgen) */
23
24/* Define the possible classes of objects*/
25/* extend the NC_XXX values*/
26#define NC_GRP      100
27#define NC_DIM      101
28#define NC_VAR      102
29#define NC_ATT      103
30#define NC_TYPE     104
31#define NC_ECONST   105
32#define NC_FIELD    106
33#define NC_ARRAY    107
34#define NC_PRIM     108 /*Including NC_STRING */
35#define NC_STRUCT  NC_COMPOUND /* alias */
36#define NC_LIST    NC_COMPOUND /* alias */
37
38/* Extend nc types with generic fill value*/
39#define NC_FILLVALUE 31
40/* Extend nc types with NIL value*/
41#define NC_NIL       32
42
43/* Must be a better way to do this */
44#ifndef INFINITE
45#ifdef _MSC_VER
46#define NC_INFINITE (DBL_MAX+DBL_MAX)
47#define NC_INFINITEF NC_INFINITE
48#define NAN (NC_INFINITE-NC_INFINITE)
49#define NANF NAN
50#else
51#define NC_INFINITE (1.0/0.0)
52#define NC_INFINITEF (1.0f/0.0f)
53#define NAN (0.0/0.0)
54#define NANF (0.0f/0.0f)
55#endif
56
57#define NEGNC_INFINITEF (-NC_INFINITEF)
58#define NEGNC_INFINITE (-NC_INFINITEF)
59#endif
60/* nc_class is one of:
61        NC_GRP NC_DIM NC_VAR NC_ATT NC_TYPE
62*/
63typedef nc_type nc_class;
64
65/* nc_subclass is one of:
66 NC_PRIM NC_OPAQUE NC_ENUM
67 NC_FIELD NC_VLEN NC_COMPOUND
68 NC_ECONST NC_ARRAY NC_FILLVALUE
69*/
70typedef nc_type nc_subclass;
71
72/*
73Define data structure
74xto hold special attribute values
75for a given variable.
76Global values are kept as
77various C global variables
78*/
79
80/* Define a bit set for indicating which*/
81/* specials were explicitly specified*/
82/* See also: ncgen.y.tag2name */
83#define _STORAGE_FLAG       0x001
84#define _CHUNKSIZES_FLAG    0x002
85#define _FLETCHER32_FLAG    0x004
86#define _DEFLATE_FLAG       0x008
87#define _SHUFFLE_FLAG       0x010
88#define _ENDIAN_FLAG        0x020
89#define _NOFILL_FLAG        0x040
90#define _FILLVALUE_FLAG     0x080
91#define _NCPROPS_FLAG       0x100
92#define _ISNETCDF4_FLAG     0x200
93#define _SUPERBLOCK_FLAG    0x400
94#define _FORMAT_FLAG        0x800
95
96
97extern struct Specialtoken {
98    char* name;
99    int   token;
100    int   tag;
101specials[];
102
103/* Define an enumeration of supported languages */
104typedef enum Language {
105    L_UNDEFINED=0,
106    L_BINARY=1,
107    L_C=2,
108    L_F77=3,
109    L_JAVA=4
110Language;
111
112struct Kvalues {
113char* name;
114int k_flag;
115};
116
117#define NKVALUES 100
118extern struct Kvalues legalkinds[NKVALUES];
119
120/* Note: some non-var specials (i.e. _Format) are not included in this struct*/
121typedef struct Specialdata {
122    int flags;
123    Datalist*      _Fillvalue; /* This is a per-type  */
124    int           _Storage;      /* NC_CHUNKED | NC_CONTIGUOUS*/
125    size_t*       _ChunkSizes;     /* NULL => defaults*/
126        int nchunks;     /*  |_Chunksize| ; 0 => not specified*/
127    int           _Fletcher32;     /* 1=>fletcher32*/
128    int           _DeflateLevel; /* 0-9 => level*/
129    int           _Shuffle;      /* 0 => false, 1 => true*/
130    int           _Endianness;   /* 1 =>little, 2 => big*/
131    int           _Fill ;        /* 0 => false, 1 => true WATCHOUT: this is inverse of NOFILL*/
132Specialdata;
133
134typedef struct GlobalSpecialdata {
135    int           _Format ;      /* kflag */
136    const char*   _NCProperties ;
137    int           _IsNetcdf4 ;   /* 0 => false, 1 => true */
138    int           _Superblock  ; /* HDF5 file superblock version */
139GlobalSpecialData;
140
141/* Track a set of dimensions*/
142/* (Note: the netcdf type system is deficient here)*/
143typedef struct Dimset {
144    int      ndims;
145    struct Symbol*   dimsyms[NC_MAX_VAR_DIMS]; /* Symbol for dimension*/
146Dimset;
147
148typedef struct Diminfo {
149    int   isconstant; /* separate constant from named dimension*/
150    int   isunlimited;
151    size_t  declsize; /* 0 => unlimited/unspecified*/
152Diminfo;
153
154typedef struct Attrinfo {
155    struct Symbol*   var; /* NULL => global*/
156Attrinfo;
157
158typedef struct Typeinfo {
159        struct Symbol*  basetype;
160 int             hasvlen;  /* 1 => this type contains a vlen*/
161 nc_type         typecode;
162        unsigned long   offset;   /* fields in struct*/
163        unsigned long   alignment;/* fields in struct*/
164        NCConstant      econst;   /* for enum values*/
165        Dimset          dimset;     /* for NC_VAR/NC_FIELD/NC_ATT*/
166        size_t   size;     /* for opaque, compound, etc.*/
167 size_t   cmpdalign; /* alignment needed for total size instances */
168        size_t   nelems;   /* size in terms of # of datalist constants
169       it takes to represent it */
170 Datalist*       _Fillvalue; /* per-type cached fillvalue
171                                       (overridden by var fillvalue) */
172Typeinfo;
173
174typedef struct Varinfo {
175    int nattributes; /* |attributes|*/
176    List*       attributes;  /* List<Symbol*>*/
177    Specialdata special;
178Varinfo;
179
180typedef struct Groupinfo {
181    int is_root;
182Groupinfo;
183
184/* store info when the symbol
185   is really a reference to another
186   symbol
187*/
188typedef struct Reference {
189        int             is_ref;  /* separate name defs  from refs*/
190 char* unescaped; /* original, unescaped name */
191        struct Symbol*  ref;  /* ptr to the symbol if is_ref is true*/
192Reference;
193
194typedef struct Symbol {  /* symbol table entry*/
195        struct Symbol*  next;    /* Linked list of all defined symbols*/
196        nc_class        objectclass;  /* NC_DIM|NC_VLEN|NC_OPAQUE...*/
197        nc_class        subclass;  /* NC_STRUCT|...*/
198        char*           name;
199 char*           fqn; /* cached fully qualified C or FORTRAN name*/
200        struct Symbol*  container;  /* The group containing this symbol.*/
201     /* for fields or enumids, it is*/
202     /* the parent type.*/
203 struct Symbol*   location;   /* current group when symbol was created*/
204 List*            subnodes;  /* sublist for enum or struct or group*/
205 int              is_prefixed; /* prefix was specified (vs computed).*/
206        List*            prefix;  /* List<Symbol*>*/
207        struct Datalistdata; /* shared by variables and attributes*/
208 /* Note that we cannot union these because some kinds of symbols*/
209        /* use more than one part*/
210        Typeinfo  typ; /* type info for e.g. var, att, etc.*/
211        Varinfo   var;
212        Attrinfo  att;
213        Diminfo   dim;
214        Groupinfo grp;
215  Reference ref; /* symbol is really a referene to another symbol*/
216 /* Misc pieces of info*/
217 int             lineno;  /* at point of creation*/
218 int touched; /* for sorting*/
219        int             ncid;  /* from netcdf API: varid, or dimid, or etc.*/
220Symbol;
221
222
223#endif /*!NC_NCGEN_H*/


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