mirror of
https://github.com/Unidata/netcdf-c.git
synced 2024-12-03 08:01:25 +08:00
c99058741a
Ncgen is unable to resolve ambiguous references to an enum constant when two different enums have same econstant name. Solved by allowing more specific forms for econstant references. 1. /.../enumname.enumconstname 2. enumname.enumconstname 3. enumconstname Case 1 is resolved by using the econstant in the specific enum definition. If none is found, an error is reported. Case 2 is resolved by 1. finding an enclosing group with an enum definition with the specified name and containing the specified econstant. If there are more than one, then an error is reported 2. finding all enum definitions in the dataset that have the specified enum name and contain the specified econstant. If more than one is found, then an error is reported. If the above two methods fail, then report an error. Case 3 is similar to case 2, but all enums, irrespective of name are used if they contains the specified enum constant. The ref_tst_econst.cdl test in ncdump is causing ncdump to fail. So there may be yet some problem.
63 lines
2.2 KiB
C
63 lines
2.2 KiB
C
#ifndef NCGEN_UTIL_H
|
|
#define NCGEN_UTIL_H
|
|
/*********************************************************************
|
|
* Copyright 1993, UCAR/Unidata
|
|
* See netcdf/COPYRIGHT file for copying and redistribution conditions.
|
|
* $Header: /upc/share/CVS/netcdf-3/ncgen/util.h,v 1.3 2010/04/04 19:39:57 dmh Exp $
|
|
*********************************************************************/
|
|
|
|
#define MAX(x,y) ((x)>(y)?(x):(y))
|
|
|
|
|
|
extern void expe2d(char*);
|
|
extern int pow2(int);
|
|
extern void tztrim(char*);
|
|
extern unsigned int chartohex(char c);
|
|
|
|
extern void reclaimvardata(List*);
|
|
extern void reclaimattptrs(void*, long);
|
|
extern void cleanup(void);
|
|
extern char* fullname(Symbol*);
|
|
|
|
extern int isunlimited0(Dimset*);
|
|
extern int hasunlimited(Dimset* dimset);
|
|
extern int classicunlimited(Dimset* dimset);
|
|
extern int isbounded(Dimset* dimset);
|
|
extern char* nctypename(nc_type);
|
|
extern char* ncclassname(nc_class);
|
|
extern int ncsize(nc_type);
|
|
|
|
/* We have several versions of primitive testing*/
|
|
extern int isclassicprim(nc_type); /* a classic primitive type*/
|
|
extern int isclassicprimplus(nc_type); /* classic + String*/
|
|
extern int isprim(nc_type); /* a netcdf4 primitive type*/
|
|
extern int isprimplus(nc_type); /* a netcdf4 primitive type + OPAQUE + ENUM*/
|
|
|
|
extern void collectpath(Symbol* grp, List* grpstack);
|
|
extern List* prefixdup(List*);
|
|
extern int prefixeq(List*,List*);
|
|
#define prefixlen(sequence) (listlength(sequence))
|
|
|
|
extern char* poolalloc(size_t);
|
|
extern char* pooldup(const char*);
|
|
extern char* poolcat(const char* s1, const char* s2);
|
|
|
|
/* compute the total n-dimensional size as 1 long array;
|
|
if stop == 0, then stop = dimset->ndims.
|
|
*/
|
|
extern size_t crossproduct(Dimset* dimset, int start, int stop);
|
|
extern int findunlimited(Dimset* dimset, int start);
|
|
extern int findlastunlimited(Dimset* dimset);
|
|
|
|
extern unsigned char* makebytestring(char* s, size_t* lenp);
|
|
extern int getpadding(int offset, int alignment);
|
|
|
|
extern Datalist* builddatalist(int initialize);
|
|
extern void dlappend(Datalist*, NCConstant*);
|
|
extern NCConstant builddatasublist(Datalist* dl);
|
|
extern void dlextend(Datalist* dl);
|
|
extern void dlsetalloc(Datalist* dl, size_t newalloc);
|
|
extern void check_err(const int stat, const int line, const char* file);
|
|
|
|
#endif /*NCGEN_UTIL_H*/
|