netcdf-c/oc2/ocutil.h
Dennis Heimbigner 6934aa2e8b Thread safety: step 1: cleanup
re: https://github.com/Unidata/netcdf-c/issues/1373 (partial)

* Mark some global constants be const to indicate to make them easier to track.
* Hide direct access to the ncrc_globalstate behind a function call.
* Convert dispatch tables to constants (except the user defined ones)
  This has some consequences in terms of function arguments needing to be marked
  as const also.
* Remove some no longer needed global fields
* Aggregate all the globals in nclog.c
* Uniformly replace nc_sizevector{0,1} with NC_coord_{zero,one}
* Uniformly replace nc_ptrdffvector1 with NC_stride_one
* Remove some obsolete code
2019-03-30 14:06:20 -06:00

60 lines
1.8 KiB
C

/* Copyright 2018, UCAR/Unidata and OPeNDAP, Inc.
See the COPYRIGHT file for more information. */
#ifndef OCUTIL_H
#define OCUTIL_H 1
/* Forward */
struct OCstate;
#define ocmax(x,y) ((x) > (y) ? (x) : (y))
extern char* ocstrndup(const char* s, size_t len);
extern int ocstrncmp(const char* s1, const char* s2, size_t len);
extern int occopycat(char* dst, size_t size, size_t n, ...);
extern int occoncat(char* dst, size_t size, size_t n, ...);
extern size_t octypesize(OCtype etype);
extern char* octypetostring(OCtype octype);
extern char* octypetoddsstring(OCtype octype);
extern char* ocerrstring(int err);
extern OCerror ocsvcerrordata(struct OCstate*,char**,char**,long*);
extern OCerror octypeprint(OCtype etype, void* value, size_t bufsize, char* buf);
extern size_t xxdrsize(OCtype etype);
extern int oc_ispacked(OCnode* node);
extern size_t octotaldimsize(size_t,size_t*);
extern size_t ocarrayoffset(size_t rank, size_t*, const size_t*);
extern void ocarrayindices(size_t index, size_t rank, size_t*, size_t*);
extern size_t ocedgeoffset(size_t rank, size_t*, size_t*);
extern int ocvalidateindices(size_t rank, size_t*, size_t*);
extern void ocmakedimlist(NClist* path, NClist* dims);
extern int ocfindbod(NCbytes* buffer, size_t*, size_t*);
/* Reclaimers*/
extern void ocfreeprojectionclause(OCprojectionclause* clause);
/* Misc. */
/* merge two envv style lists */
extern char** ocmerge(const char** list1, const char** list2);
extern int ocmktmp(const char* base, char** tmpnamep);
extern void ocdataddsmsg(struct OCstate*, struct OCtree*);
extern char* ocdtmodestring(OCDT mode,int compact);
/* Define some classifiers */
#define ociscontainer(t) ((t) == OC_Dataset || (t) == OC_Structure || (t) == OC_Sequence || (t) == OC_Grid || (t) == OC_Attributeset)
#define ocisatomic(t) ((t) == OC_Atomic)
#endif /*UTIL_H*/