1/*
2 * Copyright 1996, University Corporation for Atmospheric Research
3 *      See netcdf/COPYRIGHT file for copying and redistribution conditions.
4 */
5#ifndef _NC_H_
6#define _NC_H_
7
8#include "config.h"
9#include "netcdf.h"
10
11   /* There's an external ncid (ext_ncid) and an internal ncid
12    * (int_ncid). The ext_ncid is the ncid returned to the user. If
13    * the user has opened or created a netcdf-4 file, then the
14    * ext_ncid is the same as the int_ncid. If he has opened or
15    * created a netcdf-3 file ext_ncid (which the user sees) is
16    * different from the int_ncid, which is the ncid returned by the
17    * netcdf-3 layer, which insists on inventing its own ncids,
18    * regardless of what is already in use due to previously opened
19    * netcdf-4 files. The ext_ncid contains the ncid for the root
20    * group (i.e. group zero). */
21
22/* Common Shared Structure for all Dispatched Objects */
23typedef struct NC {
24 int ext_ncid;
25 int int_ncid;
26 struct NC_Dispatchdispatch;
27 void* dispatchdata; /*per-'file' data; points to e.g. NC3_INFO data*/
28 char* path;
29 int   mode; /* as provided to nc_open/nc_create */
30#ifdef USE_REFCOUNT
31 int   refcount; /* To enable multiple name-based opens */
32#endif
33NC;
34
35/*
36 * Counted string for names and such
37 */
38typedef struct {
39 /* all xdr'd */
40 size_t nchars;
41#ifdef __arm__
42  signed char *cp;
43#else
44  char *cp;
45#endif
46
47NC_string;
48
49/* Define functions that are used across multiple dispatchers */
50
51/* Begin defined in string.c */
52extern void
53free_NC_string(NC_string *ncstrp);
54
55extern int
56NC_check_name(const char *name);
57
58#ifdef __arm__
59extern NC_string *
60new_NC_string(size_t slen, const signed char *str);
61extern int
62set_NC_string(NC_string *ncstrp, const signed char *str);
63#else
64extern NC_string *
65new_NC_string(size_t slen, const char *str);
66extern int
67set_NC_string(NC_string *ncstrp, const char *str);
68#endif
69
70
71/* End defined in string.c */
72
73extern int
74NC_check_id(int ncidNC **ncpp);
75
76/* Create a pseudo file descriptor that does not
77   overlap real file descriptors */
78extern int nc__pseudofd(void);
79
80/* This function sets a default create flag that will be logically
81   or'd to whatever flags are passed into nc_create for all future
82   calls to nc_create.
83   Valid default create flags are NC_64BIT_OFFSET, NC_CLOBBER,
84   NC_LOCK, NC_SHARE. */
85extern int nc_set_default_format(int format, int *old_formatp);
86
87/* This function gets a current default create flag */
88extern int nc_get_default_format(void);
89
90
91extern int add_to_NCList(NC*);
92extern void del_from_NCList(NC*);/* does not free object */
93extern NCfind_in_NCList(int ext_ncid);
94extern NCfind_in_NCList_by_name(const char*);
95extern void free_NCList(void);/* reclaim whole list */
96extern int count_NCList(void); /* return # of entries in NClist */
97extern int iterate_NCList(int i,NC**); /* Walk from 0 ...; ERANGE return => stop */
98
99/* Defined in nc.c */
100extern void free_NC(NC*);
101extern int new_NC(struct NC_Dispatch*, const char*, int, NC**);
102
103#endif /* _NC_H_ */


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