Skip to content

AFNI/NIfTI Server

Sections
Personal tools
You are here: Home » AFNI » Documentation

Doxygen Source Code Documentation


Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals   Search  

nc.h File Reference

#include "ncconfig.h"
#include <stddef.h>
#include <sys/types.h>
#include "netcdf.h"
#include "ncio.h"
#include "fbits.h"

Go to the source code of this file.


Data Structures

struct  NC
struct  NC_attr
struct  NC_attrarray
struct  NC_dim
struct  NC_dimarray
struct  NC_string
struct  NC_var
struct  NC_vararray

Defines

#define NC_ARRAY_GROWBY   4
#define MIN_NC_XSZ   32
#define IS_RECVAR(vp)   ((vp)->shape != NULL ? (*(vp)->shape == NC_UNLIMITED) : 0 )
#define NC_CREAT   2
#define NC_INDEF   8
#define NC_NSYNC   0x10
#define NC_HSYNC   0x20
#define NC_NDIRTY   0x40
#define NC_HDIRTY   0x80
#define NC_readonly(ncp)   (!fIsSet(ncp->nciop->ioflags, NC_WRITE))
#define NC_IsNew(ncp)   fIsSet((ncp)->flags, NC_CREAT)
#define NC_indef(ncp)   (NC_IsNew(ncp) || fIsSet((ncp)->flags, NC_INDEF))
#define set_NC_ndirty(ncp)   fSet((ncp)->flags, NC_NDIRTY)
#define NC_ndirty(ncp)   fIsSet((ncp)->flags, NC_NDIRTY)
#define set_NC_hdirty(ncp)   fSet((ncp)->flags, NC_HDIRTY)
#define NC_hdirty(ncp)   fIsSet((ncp)->flags, NC_HDIRTY)
#define NC_dofill(ncp)   (!fIsSet((ncp)->flags, NC_NOFILL))
#define NC_doHsync(ncp)   fIsSet((ncp)->flags, NC_HSYNC)
#define NC_doNsync(ncp)   fIsSet((ncp)->flags, NC_NSYNC)
#define NC_get_numrecs(ncp)   ((ncp)->numrecs)
#define NC_set_numrecs(ncp, nrecs)   {((ncp)->numrecs = (nrecs));}
#define NC_increase_numrecs(ncp, nrecs)   {if((nrecs) > (ncp)->numrecs) ((ncp)->numrecs = (nrecs));}

Typedefs

typedef NC NC
typedef NC_dimarray NC_dimarray
typedef NC_attrarray NC_attrarray
typedef NC_vararray NC_vararray

Enumerations

enum  NCtype { NC_UNSPECIFIED = 0, NC_DIMENSION = 10, NC_VARIABLE = 11, NC_ATTRIBUTE = 12 }

Functions

void free_NC_string (NC_string *ncstrp)
int NC_check_name (const char *name)
NC_stringnew_NC_string (size_t slen, const char *str)
int set_NC_string (NC_string *ncstrp, const char *str)
void free_NC_dim (NC_dim *dimp)
NC_dimnew_x_NC_dim (NC_string *name)
int find_NC_Udim (const NC_dimarray *ncap, NC_dim **dimpp)
void free_NC_dimarrayV0 (NC_dimarray *ncap)
void free_NC_dimarrayV (NC_dimarray *ncap)
int dup_NC_dimarrayV (NC_dimarray *ncap, const NC_dimarray *ref)
NC_dimelem_NC_dimarray (const NC_dimarray *ncap, size_t elem)
void free_NC_attr (NC_attr *attrp)
NC_attrnew_x_NC_attr (NC_string *strp, nc_type type, size_t nelems)
NC_attr ** NC_findattr (const NC_attrarray *ncap, const char *name)
void free_NC_attrarrayV0 (NC_attrarray *ncap)
void free_NC_attrarrayV (NC_attrarray *ncap)
int dup_NC_attrarrayV (NC_attrarray *ncap, const NC_attrarray *ref)
NC_attrelem_NC_attrarray (const NC_attrarray *ncap, size_t elem)
void free_NC_var (NC_var *varp)
NC_varnew_x_NC_var (NC_string *strp, size_t ndims)
void free_NC_vararrayV0 (NC_vararray *ncap)
void free_NC_vararrayV (NC_vararray *ncap)
int dup_NC_vararrayV (NC_vararray *ncap, const NC_vararray *ref)
int NC_var_shape (NC_var *varp, const NC_dimarray *dims)
int NC_findvar (const NC_vararray *ncap, const char *name, NC_var **varpp)
NC_varNC_lookupvar (NC *ncp, int varid)
int NC_check_id (int ncid, NC **ncpp)
int nc_cktype (nc_type datatype)
size_t ncx_howmany (nc_type type, size_t xbufsize)
int read_numrecs (NC *ncp)
int write_numrecs (NC *ncp)
int NC_sync (NC *ncp)
size_t ncx_len_NC (const NC *ncp)
int ncx_put_NC (const NC *ncp, void **xpp, off_t offset, size_t extent)
int nc_get_NC (NC *ncp)
int fill_NC_var (NC *ncp, const NC_var *varp, size_t recno)
int nc_inq_rec (int ncid, size_t *nrecvars, int *recvarids, size_t *recsizes)
int nc_get_rec (int ncid, size_t recnum, void **datap)
int nc_put_rec (int ncid, size_t recnum, void *const *datap)
int nc_put_att (int ncid, int varid, const char *name, nc_type datatype, size_t len, const void *value)
int nc_get_att (int ncid, int varid, const char *name, void *value)
int nc_put_var1 (int ncid, int varid, const size_t *index, const void *value)
int nc_get_var1 (int ncid, int varid, const size_t *index, void *value)
int nc_put_vara (int ncid, int varid, const size_t *start, const size_t *count, const void *value)
int nc_get_vara (int ncid, int varid, const size_t *start, const size_t *count, void *value)
int nc_put_vars (int ncid, int varid, const size_t *start, const size_t *count, const ptrdiff_t *stride, const void *value)
int nc_get_vars (int ncid, int varid, const size_t *start, const size_t *count, const ptrdiff_t *stride, void *value)
int nc_put_varm (int ncid, int varid, const size_t *start, const size_t *count, const ptrdiff_t *stride, const ptrdiff_t *map, const void *value)
int nc_get_varm (int ncid, int varid, const size_t *start, const size_t *count, const ptrdiff_t *stride, const ptrdiff_t *map, void *value)

Define Documentation

#define IS_RECVAR vp       ((vp)->shape != NULL ? (*(vp)->shape == NC_UNLIMITED) : 0 )
 

Definition at line 223 of file nc.h.

Referenced by fill_added(), fill_added_recs(), fill_NC_var(), fillerup(), move_recs_r(), move_vars_r(), NC_begins(), NC_computeshapes(), nc_copy_var(), nc_get_var_double(), nc_get_var_float(), nc_get_var_int(), nc_get_var_long(), nc_get_var_schar(), nc_get_var_short(), nc_get_var_text(), nc_get_var_uchar(), nc_get_vara_double(), nc_get_vara_float(), nc_get_vara_int(), nc_get_vara_long(), nc_get_vara_schar(), nc_get_vara_short(), nc_get_vara_text(), nc_get_vara_uchar(), nc_get_varm_double(), nc_get_varm_float(), nc_get_varm_int(), nc_get_varm_long(), nc_get_varm_schar(), nc_get_varm_short(), nc_get_varm_text(), nc_get_varm_uchar(), nc_inq_rec(), nc_put_var1_double(), nc_put_var1_float(), nc_put_var1_int(), nc_put_var1_long(), nc_put_var1_schar(), nc_put_var1_short(), nc_put_var1_text(), nc_put_var1_uchar(), nc_put_var_double(), nc_put_var_float(), nc_put_var_int(), nc_put_var_long(), nc_put_var_schar(), nc_put_var_short(), nc_put_var_text(), nc_put_var_uchar(), nc_put_vara_double(), nc_put_vara_float(), nc_put_vara_int(), nc_put_vara_long(), nc_put_vara_schar(), nc_put_vara_short(), nc_put_vara_text(), nc_put_vara_uchar(), nc_put_varm_double(), nc_put_varm_float(), nc_put_varm_int(), nc_put_varm_long(), nc_put_varm_schar(), nc_put_varm_short(), nc_put_varm_text(), nc_put_varm_uchar(), NC_var_shape(), NC_varoffset(), NCcoordck(), NCedgeck(), NCfillrecord(), NCiocount(), NCrecget(), and NCrecput().

#define MIN_NC_XSZ   32
 

Definition at line 29 of file nc.h.

Referenced by nc_get_NC(), ncx_put_NC(), and new_NC().

#define NC_ARRAY_GROWBY   4
 

Definition at line 21 of file nc.h.

Referenced by incr_NC_attrarray(), incr_NC_dimarray(), and incr_NC_vararray().

#define NC_CREAT   2
 

Definition at line 242 of file nc.h.

Referenced by nc__create_mp(), and NC_endef().

#define NC_dofill ncp       (!fIsSet((ncp)->flags, NC_NOFILL))
 

Definition at line 296 of file nc.h.

Referenced by fillerup(), NC_endef(), and NCvnrecs().

#define NC_doHsync ncp       fIsSet((ncp)->flags, NC_HSYNC)
 

Definition at line 299 of file nc.h.

Referenced by nc_copy_att(), nc_put_att_double(), nc_put_att_float(), nc_put_att_int(), nc_put_att_long(), nc_put_att_schar(), nc_put_att_short(), nc_put_att_text(), nc_put_att_uchar(), nc_rename_att(), nc_rename_dim(), and nc_rename_var().

#define NC_doNsync ncp       fIsSet((ncp)->flags, NC_NSYNC)
 

Definition at line 302 of file nc.h.

Referenced by NCcoordck(), and NCvnrecs().

#define NC_get_numrecs ncp       ((ncp)->numrecs)
 

Definition at line 306 of file nc.h.

Referenced by dup_NC(), fill_added_recs(), move_recs_r(), nc_copy_var(), nc_get_rec(), nc_get_var_double(), nc_get_var_float(), nc_get_var_int(), nc_get_var_long(), nc_get_var_schar(), nc_get_var_short(), nc_get_var_text(), nc_get_var_uchar(), nc_get_vara_double(), nc_get_vara_float(), nc_get_vara_int(), nc_get_vara_long(), nc_get_vara_schar(), nc_get_vara_short(), nc_get_vara_text(), nc_get_vara_uchar(), nc_get_varm_double(), nc_get_varm_float(), nc_get_varm_int(), nc_get_varm_long(), nc_get_varm_schar(), nc_get_varm_short(), nc_get_varm_text(), nc_get_varm_uchar(), nc_inq_dim(), nc_inq_dimlen(), nc_put_var_double(), nc_put_var_float(), nc_put_var_int(), nc_put_var_long(), nc_put_var_schar(), nc_put_var_short(), nc_put_var_text(), nc_put_var_uchar(), nc_put_varm_double(), nc_put_varm_float(), nc_put_varm_int(), nc_put_varm_long(), nc_put_varm_schar(), nc_put_varm_short(), nc_put_varm_text(), nc_put_varm_uchar(), nc_set_base_pe(), NCcoordck(), NCvnrecs(), ncx_put_NC(), read_numrecs(), and write_numrecs().

#define NC_hdirty ncp       fIsSet((ncp)->flags, NC_HDIRTY)
 

Definition at line 293 of file nc.h.

Referenced by NC_sync().

#define NC_HDIRTY   0x80
 

Definition at line 247 of file nc.h.

Referenced by read_NC(), and write_NC().

#define NC_HSYNC   0x20
 

Definition at line 245 of file nc.h.

#define NC_increase_numrecs ncp,
nrecs       {if((nrecs) > (ncp)->numrecs) ((ncp)->numrecs = (nrecs));}
 

Definition at line 312 of file nc.h.

Referenced by NCvnrecs().

#define NC_indef ncp       (NC_IsNew(ncp) || fIsSet((ncp)->flags, NC_INDEF))
 

Definition at line 281 of file nc.h.

Referenced by nc__enddef(), nc_close(), nc_copy_att(), nc_copy_var(), nc_def_dim(), nc_def_var(), nc_del_att(), nc_enddef(), NC_endef(), nc_get_rec(), nc_get_var1_double(), nc_get_var1_float(), nc_get_var1_int(), nc_get_var1_long(), nc_get_var1_schar(), nc_get_var1_short(), nc_get_var1_text(), nc_get_var1_uchar(), nc_get_var_double(), nc_get_var_float(), nc_get_var_int(), nc_get_var_long(), nc_get_var_schar(), nc_get_var_short(), nc_get_var_text(), nc_get_var_uchar(), nc_get_vara(), nc_get_vara_double(), nc_get_vara_float(), nc_get_vara_int(), nc_get_vara_long(), nc_get_vara_schar(), nc_get_vara_short(), nc_get_vara_text(), nc_get_vara_uchar(), nc_get_varm_double(), nc_get_varm_float(), nc_get_varm_int(), nc_get_varm_long(), nc_get_varm_schar(), nc_get_varm_short(), nc_get_varm_text(), nc_get_varm_uchar(), nc_put_att_double(), nc_put_att_float(), nc_put_att_int(), nc_put_att_long(), nc_put_att_schar(), nc_put_att_short(), nc_put_att_text(), nc_put_att_uchar(), nc_put_rec(), nc_put_var1_double(), nc_put_var1_float(), nc_put_var1_int(), nc_put_var1_long(), nc_put_var1_schar(), nc_put_var1_short(), nc_put_var1_text(), nc_put_var1_uchar(), nc_put_var_double(), nc_put_var_float(), nc_put_var_int(), nc_put_var_long(), nc_put_var_schar(), nc_put_var_short(), nc_put_var_text(), nc_put_var_uchar(), nc_put_vara(), nc_put_vara_double(), nc_put_vara_float(), nc_put_vara_int(), nc_put_vara_long(), nc_put_vara_schar(), nc_put_vara_short(), nc_put_vara_text(), nc_put_vara_uchar(), nc_put_varm_double(), nc_put_varm_float(), nc_put_varm_int(), nc_put_varm_long(), nc_put_varm_schar(), nc_put_varm_short(), nc_put_varm_text(), nc_put_varm_uchar(), nc_redef(), nc_rename_att(), nc_rename_dim(), nc_rename_var(), nc_sync(), read_numrecs(), and write_numrecs().

#define NC_INDEF   8
 

Definition at line 243 of file nc.h.

Referenced by nc_abort(), NC_endef(), and nc_redef().

#define NC_IsNew ncp       fIsSet((ncp)->flags, NC_CREAT)
 

Definition at line 278 of file nc.h.

Referenced by nc_abort(), NC_begins(), and NC_endef().

#define NC_ndirty ncp       fIsSet((ncp)->flags, NC_NDIRTY)
 

Definition at line 287 of file nc.h.

Referenced by NC_sync().

#define NC_NDIRTY   0x40
 

Definition at line 246 of file nc.h.

Referenced by read_NC(), read_numrecs(), write_NC(), and write_numrecs().

#define NC_NSYNC   0x10
 

Definition at line 244 of file nc.h.

Referenced by nc__create_mp(), and nc__open_mp().

#define NC_readonly ncp       (!fIsSet(ncp->nciop->ioflags, NC_WRITE))
 

Definition at line 275 of file nc.h.

Referenced by fillerup(), nc_abort(), nc_close(), nc_copy_att(), nc_copy_var(), NC_endef(), nc_put_att_double(), nc_put_att_float(), nc_put_att_int(), nc_put_att_long(), nc_put_att_schar(), nc_put_att_short(), nc_put_att_text(), nc_put_att_uchar(), nc_put_rec(), nc_put_var1_double(), nc_put_var1_float(), nc_put_var1_int(), nc_put_var1_long(), nc_put_var1_schar(), nc_put_var1_short(), nc_put_var1_text(), nc_put_var1_uchar(), nc_put_var_double(), nc_put_var_float(), nc_put_var_int(), nc_put_var_long(), nc_put_var_schar(), nc_put_var_short(), nc_put_var_text(), nc_put_var_uchar(), nc_put_vara(), nc_put_vara_double(), nc_put_vara_float(), nc_put_vara_int(), nc_put_vara_long(), nc_put_vara_schar(), nc_put_vara_short(), nc_put_vara_text(), nc_put_vara_uchar(), nc_put_varm_double(), nc_put_varm_float(), nc_put_varm_int(), nc_put_varm_long(), nc_put_varm_schar(), nc_put_varm_short(), nc_put_varm_text(), nc_put_varm_uchar(), nc_redef(), nc_rename_att(), nc_rename_dim(), nc_rename_var(), nc_set_fill(), nc_sync(), NC_sync(), NCcoordck(), write_NC(), and write_numrecs().

#define NC_set_numrecs ncp,
nrecs       {((ncp)->numrecs = (nrecs));}
 

Definition at line 309 of file nc.h.

Referenced by dup_NC(), move_recs_r(), NC_begins(), nc_get_NC(), NCvnrecs(), and read_numrecs().

#define set_NC_hdirty ncp       fSet((ncp)->flags, NC_HDIRTY)
 

Definition at line 290 of file nc.h.

Referenced by nc_copy_att(), nc_put_att_double(), nc_put_att_float(), nc_put_att_int(), nc_put_att_long(), nc_put_att_schar(), nc_put_att_short(), nc_put_att_text(), nc_put_att_uchar(), nc_rename_att(), nc_rename_dim(), and nc_rename_var().

#define set_NC_ndirty ncp       fSet((ncp)->flags, NC_NDIRTY)
 

Definition at line 284 of file nc.h.

Referenced by NCvnrecs().


Typedef Documentation

typedef struct NC NC
 

Definition at line 31 of file nc.h.

typedef struct NC_attrarray NC_attrarray
 

typedef struct NC_dimarray NC_dimarray
 

typedef struct NC_vararray NC_vararray
 


Enumeration Type Documentation

enum NCtype
 

Enumeration values:
NC_UNSPECIFIED 
NC_DIMENSION 
NC_VARIABLE 
NC_ATTRIBUTE 

Definition at line 36 of file nc.h.

Referenced by v1h_get_NC_attrarray(), v1h_get_NC_dimarray(), v1h_get_NC_vararray(), v1h_get_NCtype(), and v1h_put_NCtype().

00036              {
00037         NC_UNSPECIFIED = 0,
00038 /* future       NC_BITFIELD = 7, */
00039 /*      NC_STRING =     8,      */
00040         NC_DIMENSION =  10,
00041         NC_VARIABLE =   11,
00042         NC_ATTRIBUTE =  12
00043 } NCtype;

Function Documentation

int dup_NC_attrarrayV NC_attrarray   ncap,
const NC_attrarray   ref
 

Definition at line 184 of file attr.c.

References dup_NC_attr(), free_NC_attrarrayV(), malloc, NC_attrarray::nalloc, NC_attrarray::nelems, ref, and NC_attrarray::value.

Referenced by dup_NC(), and dup_NC_var().

00185 {
00186         int status = NC_NOERR;
00187 
00188         assert(ref != NULL);
00189         assert(ncap != NULL);
00190 
00191         if(ref->nelems != 0)
00192         {
00193                 const size_t sz = ref->nelems * sizeof(NC_attr *);
00194                 ncap->value = (NC_attr **) malloc(sz);
00195                 if(ncap->value == NULL)
00196                         return NC_ENOMEM;
00197 
00198                 (void) memset(ncap->value, 0, sz);
00199                 ncap->nalloc = ref->nelems;
00200         }
00201 
00202         ncap->nelems = 0;
00203         {
00204                 NC_attr **app = ncap->value;
00205                 const NC_attr **drpp = (const NC_attr **)ref->value;
00206                 NC_attr *const *const end = &app[ref->nelems];
00207                 for( /*NADA*/; app < end; drpp++, app++, ncap->nelems++)
00208                 {
00209                         *app = dup_NC_attr(*drpp);
00210                         if(*app == NULL)
00211                         {
00212                                 status = NC_ENOMEM;
00213                                 break;
00214                         }
00215                 }
00216         }
00217 
00218         if(status != NC_NOERR)
00219         {
00220                 free_NC_attrarrayV(ncap);
00221                 return status;
00222         }
00223 
00224         assert(ncap->nelems == ref->nelems);
00225 
00226         return NC_NOERR;
00227 }

int dup_NC_dimarrayV NC_dimarray   ncap,
const NC_dimarray   ref
 

Definition at line 203 of file dim.c.

References dup_NC_dim(), free_NC_dimarrayV(), malloc, NC_dimarray::nalloc, NC_dimarray::nelems, ref, and NC_dimarray::value.

Referenced by dup_NC().

00204 {
00205         int status = NC_NOERR;
00206 
00207         assert(ref != NULL);
00208         assert(ncap != NULL);
00209 
00210         if(ref->nelems != 0)
00211         {
00212                 const size_t sz = ref->nelems * sizeof(NC_dim *);
00213                 ncap->value = (NC_dim **) malloc(sz);
00214                 if(ncap->value == NULL)
00215                         return NC_ENOMEM;
00216                 (void) memset(ncap->value, 0, sz);
00217                 ncap->nalloc = ref->nelems;
00218         }
00219 
00220         ncap->nelems = 0;
00221         {
00222                 NC_dim **dpp = ncap->value;
00223                 const NC_dim **drpp = (const NC_dim **)ref->value;
00224                 NC_dim *const *const end = &dpp[ref->nelems];
00225                 for( /*NADA*/; dpp < end; drpp++, dpp++, ncap->nelems++)
00226                 {
00227                         *dpp = dup_NC_dim(*drpp);
00228                         if(*dpp == NULL)
00229                         {
00230                                 status = NC_ENOMEM;
00231                                 break;
00232                         }
00233                 }
00234         }
00235 
00236         if(status != NC_NOERR)
00237         {
00238                 free_NC_dimarrayV(ncap);
00239                 return status;
00240         }
00241 
00242         assert(ncap->nelems == ref->nelems);
00243 
00244         return NC_NOERR;
00245 }

int dup_NC_vararrayV NC_vararray   ncap,
const NC_vararray   ref
 

Definition at line 185 of file var.c.

References dup_NC_var(), free_NC_vararrayV(), malloc, NC_vararray::nalloc, NC_vararray::nelems, ref, and NC_vararray::value.

Referenced by dup_NC().

00186 {
00187         int status = NC_NOERR;
00188 
00189         assert(ref != NULL);
00190         assert(ncap != NULL);
00191 
00192         if(ref->nelems != 0)
00193         {
00194                 const size_t sz = ref->nelems * sizeof(NC_var *);
00195                 ncap->value = (NC_var **) malloc(sz);
00196                 if(ncap->value == NULL)
00197                         return NC_ENOMEM;
00198                 (void) memset(ncap->value, 0, sz);
00199                 ncap->nalloc = ref->nelems;
00200         }
00201 
00202         ncap->nelems = 0;
00203         {
00204                 NC_var **vpp = ncap->value;
00205                 const NC_var **drpp = (const NC_var **)ref->value;
00206                 NC_var *const *const end = &vpp[ref->nelems];
00207                 for( /*NADA*/; vpp < end; drpp++, vpp++, ncap->nelems++)
00208                 {
00209                         *vpp = dup_NC_var(*drpp);
00210                         if(*vpp == NULL)
00211                         {
00212                                 status = NC_ENOMEM;
00213                                 break;
00214                         }
00215                 }
00216         }
00217 
00218         if(status != NC_NOERR)
00219         {
00220                 free_NC_vararrayV(ncap);
00221                 return status;
00222         }
00223 
00224         assert(ncap->nelems == ref->nelems);
00225 
00226         return NC_NOERR;
00227 }

NC_attr* elem_NC_attrarray const NC_attrarray   ncap,
size_t    elem
 

Definition at line 273 of file attr.c.

References NC_attrarray::nelems, and NC_attrarray::value.

Referenced by nc_inq_attname().

00274 {
00275         assert(ncap != NULL);
00276                 /* cast needed for braindead systems with signed size_t */
00277         if(ncap->nelems == 0 || (unsigned long) elem >= ncap->nelems)
00278                 return NULL;
00279 
00280         assert(ncap->value != NULL);
00281 
00282         return ncap->value[elem];
00283 }

NC_dim* elem_NC_dimarray const NC_dimarray   ncap,
size_t    elem
 

Definition at line 289 of file dim.c.

References NC_dimarray::nelems, and NC_dimarray::value.

Referenced by nc_inq_dim(), nc_inq_dimlen(), nc_inq_dimname(), nc_rename_dim(), and NC_var_shape().

00290 {
00291         assert(ncap != NULL);
00292                 /* cast needed for braindead systems with signed size_t */
00293         if(ncap->nelems == 0 || (unsigned long) elem >= ncap->nelems)
00294                 return NULL;
00295 
00296         assert(ncap->value != NULL);
00297 
00298         return ncap->value[elem];
00299 }

int fill_NC_var NC   ncp,
const NC_var   varp,
size_t    recno
 

Definition at line 221 of file putget.c.

References NC_var::attrs, NC_var::begin, NC::chunk, ncio::get, IS_RECVAR, NC_var::len, MIN, NC_fill_char(), NC_fill_double(), NC_fill_float(), NC_fill_int(), NC_fill_schar(), NC_fill_short(), NC_findattr(), NC::nciop, NFILL, offset, NC::recsize, ncio::rel, RGN_MODIFIED, RGN_WRITE, NC_var::type, X_ALIGN, X_SIZEOF_DOUBLE, and NC_var::xsz.

Referenced by fill_added(), fill_added_recs(), fillerup(), and NCfillrecord().

00222 {
00223         char xfillp[NFILL * X_SIZEOF_DOUBLE];
00224         const size_t step = varp->xsz;
00225         const size_t nelems = sizeof(xfillp)/step;
00226         const size_t xsz = varp->xsz * nelems;
00227         NC_attr **attrpp = NULL;
00228         off_t offset;
00229         size_t remaining = varp->len;
00230 
00231         void *xp;
00232         int status = NC_NOERR;
00233 
00234         /*
00235          * Set up fill value
00236          */
00237         attrpp = NC_findattr(&varp->attrs, _FillValue);
00238         if( attrpp != NULL )
00239         {
00240                 /* User defined fill value */
00241                 if( (*attrpp)->type != varp->type || (*attrpp)->nelems != 1 )
00242                 {
00243                         return NC_EBADTYPE;
00244                 }
00245                 else
00246                 {
00247                         /* Use the user defined value */
00248                         char *cp = xfillp;
00249                         const char *const end = &xfillp[sizeof(xfillp)];
00250 
00251                         assert(step <= (*attrpp)->xsz);
00252 
00253                         for( /*NADA*/; cp < end; cp += step)
00254                         {
00255                                 (void) memcpy(cp, (*attrpp)->xvalue, step);
00256                         }
00257                 }
00258         }
00259         else
00260         {
00261                 /* use the default */
00262                 
00263                 assert(xsz % X_ALIGN == 0);
00264                 assert(xsz <= sizeof(xfillp));
00265         
00266                 xp = xfillp;
00267         
00268                 switch(varp->type){
00269                 case NC_BYTE :
00270                         status = NC_fill_schar(&xp, nelems);
00271                         break;
00272                 case NC_CHAR :
00273                         status = NC_fill_char(&xp, nelems);
00274                         break;
00275                 case NC_SHORT :
00276                         status = NC_fill_short(&xp, nelems);
00277                         break;
00278                 case NC_INT :
00279                         status = NC_fill_int(&xp, nelems);
00280                         break;
00281                 case NC_FLOAT :
00282                         status = NC_fill_float(&xp, nelems);
00283                         break;
00284                 case NC_DOUBLE : 
00285                         status = NC_fill_double(&xp, nelems);
00286                         break;
00287                 default :
00288                         assert("fill_NC_var invalid type" == 0);
00289                         status = NC_EBADTYPE;
00290                         break;
00291                 }
00292                 if(status != NC_NOERR)
00293                         return status;
00294         
00295                 assert(xp == xfillp + xsz);
00296         }
00297 
00298         /*
00299          * copyout:
00300          * xfillp now contains 'nelems' elements of the fill value
00301          * in external representation.
00302          */
00303 
00304         /*
00305          * Copy it out.
00306          */
00307 
00308         offset = varp->begin;
00309         if(IS_RECVAR(varp))
00310         {
00311                 offset += (off_t)ncp->recsize * recno;
00312         }
00313 
00314         assert(remaining > 0);
00315         for(;;)
00316         {
00317                 const size_t chunksz = MIN(remaining, ncp->chunk);
00318                 size_t ii;
00319                 assert(chunksz % X_ALIGN == 0);
00320 
00321                 status = ncp->nciop->get(ncp->nciop, offset, chunksz,
00322                                  RGN_WRITE, &xp);       
00323                 if(status != NC_NOERR)
00324                 {
00325                         return status;
00326                 }
00327 
00328                 /*
00329                  * fill the chunksz buffer in units  of xsz
00330                  */
00331                 for(ii = 0; ii < chunksz/xsz; ii++)
00332                 {
00333                         (void) memcpy(xp, xfillp, xsz);
00334                         xp = (char *)xp + xsz;
00335                 }
00336                 /*
00337                  * Deal with any remainder
00338                  */
00339                 {
00340                         const size_t rem = chunksz % xsz;
00341                         if(rem != 0)
00342                         {
00343                                 (void) memcpy(xp, xfillp, rem);
00344                                 /* xp = (char *)xp + xsz; */
00345                         }
00346 
00347                 }
00348 
00349                 status = ncp->nciop->rel(ncp->nciop, offset, RGN_MODIFIED);
00350 
00351                 if(status != NC_NOERR)
00352                 {
00353                         break;
00354                 }
00355 
00356                 remaining -= chunksz;
00357                 if(remaining == 0)
00358                         break;  /* normal loop exit */
00359                 offset += chunksz;
00360 
00361         }
00362 
00363         return status;
00364 }

int find_NC_Udim const NC_dimarray   ncap,
NC_dim **    dimpp
 

Definition at line 85 of file dim.c.

References NC_dimarray::nelems, and NC_dimarray::value.

Referenced by nc_def_dim(), nc_inq(), and nc_inq_unlimdim().

00086 {
00087         assert(ncap != NULL);
00088 
00089         if(ncap->nelems == 0)
00090                 return -1;
00091 
00092         {
00093         int dimid = 0;
00094         NC_dim **loc = ncap->value;
00095 
00096         for(; (size_t) dimid < ncap->nelems
00097                          && (*loc)->size != NC_UNLIMITED; dimid++, loc++)
00098         {
00099                 /*EMPTY*/
00100         }
00101         if(dimid >= ncap->nelems)
00102                 return(-1); /* not found */
00103         /* else, normal return */
00104         if(dimpp != NULL)
00105                 *dimpp = *loc;
00106         return dimid;
00107         }
00108 }

void free_NC_attr NC_attr   attrp
 

Definition at line 22 of file attr.c.

References free, free_NC_string(), and NC_attr::name.

Referenced by free_NC_attrarrayV0(), nc_copy_att(), nc_del_att(), nc_put_att_double(), nc_put_att_float(), nc_put_att_int(), nc_put_att_long(), nc_put_att_schar(), nc_put_att_short(), nc_put_att_text(), nc_put_att_uchar(), and v1h_get_NC_attr().

00023 {
00024 
00025         if(attrp == NULL)
00026                 return;
00027         free_NC_string(attrp->name);
00028         free(attrp);
00029 }

void free_NC_attrarrayV NC_attrarray   ncap
 

Definition at line 166 of file attr.c.

References free, free_NC_attrarrayV0(), NC_attrarray::nalloc, and NC_attrarray::value.

Referenced by dup_NC_attrarrayV(), free_NC(), free_NC_var(), read_NC(), and v1h_get_NC_attrarray().

00167 {
00168         assert(ncap != NULL);
00169         
00170         if(ncap->nalloc == 0)
00171                 return;
00172 
00173         assert(ncap->value != NULL);
00174 
00175         free_NC_attrarrayV0(ncap);
00176 
00177         free(ncap->value);
00178         ncap->value = NULL;
00179         ncap->nalloc = 0;
00180 }

void free_NC_attrarrayV0 NC_attrarray   ncap
 

Definition at line 138 of file attr.c.

References free_NC_attr(), NC_attrarray::nelems, and NC_attrarray::value.

Referenced by free_NC_attrarrayV().

00139 {
00140         assert(ncap != NULL);
00141 
00142         if(ncap->nelems == 0)
00143                 return;
00144 
00145         assert(ncap->value != NULL);
00146 
00147         {
00148                 NC_attr **app = ncap->value;
00149                 NC_attr *const *const end = &app[ncap->nelems];
00150                 for( /*NADA*/; app < end; app++)
00151                 {
00152                         free_NC_attr(*app);
00153                         *app = NULL;
00154                 }
00155         }
00156         ncap->nelems = 0;
00157 }

void free_NC_dim NC_dim   dimp
 

Definition at line 19 of file dim.c.

References free, free_NC_string(), and NC_dim::name.

Referenced by free_NC_dimarrayV0(), nc_def_dim(), and v1h_get_NC_dim().

00020 {
00021         if(dimp == NULL)
00022                 return;
00023         free_NC_string(dimp->name);
00024         free(dimp);
00025 }

void free_NC_dimarrayV NC_dimarray   ncap
 

Definition at line 185 of file dim.c.

References free, free_NC_dimarrayV0(), NC_dimarray::nalloc, and NC_dimarray::value.

Referenced by dup_NC_dimarrayV(), free_NC(), read_NC(), and v1h_get_NC_dimarray().

00186 {
00187         assert(ncap != NULL);
00188         
00189         if(ncap->nalloc == 0)
00190                 return;
00191 
00192         assert(ncap->value != NULL);
00193 
00194         free_NC_dimarrayV0(ncap);
00195 
00196         free(ncap->value);
00197         ncap->value = NULL;
00198         ncap->nalloc = 0;
00199 }

void free_NC_dimarrayV0 NC_dimarray   ncap
 

Definition at line 157 of file dim.c.

References free_NC_dim(), NC_dimarray::nelems, and NC_dimarray::value.

Referenced by free_NC_dimarrayV().

00158 {
00159         assert(ncap != NULL);
00160 
00161         if(ncap->nelems == 0)
00162                 return;
00163 
00164         assert(ncap->value != NULL);
00165 
00166         {
00167                 NC_dim **dpp = ncap->value;
00168                 NC_dim *const *const end = &dpp[ncap->nelems];
00169                 for( /*NADA*/; dpp < end; dpp++)
00170                 {
00171                         free_NC_dim(*dpp);
00172                         *dpp = NULL;
00173                 }
00174         }
00175         ncap->nelems = 0;
00176 }

void free_NC_string NC_string   ncstrp
 

Definition at line 21 of file string.c.

References free.

Referenced by free_NC_attr(), free_NC_dim(), free_NC_var(), nc_rename_att(), nc_rename_dim(), nc_rename_var(), new_NC_attr(), new_NC_dim(), new_NC_var(), v1h_get_NC_attr(), v1h_get_NC_dim(), v1h_get_NC_string(), and v1h_get_NC_var().

00022 {
00023         if(ncstrp==NULL)
00024                 return;
00025         free(ncstrp);
00026 }

void free_NC_var NC_var   varp
 

Definition at line 20 of file var.c.

References NC_var::attrs, free, free_NC_attrarrayV(), free_NC_string(), and NC_var::name.

Referenced by dup_NC_var(), free_NC_vararrayV0(), nc_def_var(), and v1h_get_NC_var().

00021 {
00022         if(varp == NULL)
00023                 return;
00024         free_NC_attrarrayV(&varp->attrs);
00025         free_NC_string(varp->name);
00026         free(varp);
00027 }

void free_NC_vararrayV NC_vararray   ncap
 

Definition at line 167 of file var.c.

References free, free_NC_vararrayV0(), NC_vararray::nalloc, and NC_vararray::value.

Referenced by dup_NC_vararrayV(), free_NC(), read_NC(), and v1h_get_NC_vararray().

00168 {
00169         assert(ncap != NULL);
00170         
00171         if(ncap->nalloc == 0)
00172                 return;
00173 
00174         assert(ncap->value != NULL);
00175 
00176         free_NC_vararrayV0(ncap);
00177 
00178         free(ncap->value);
00179         ncap->value = NULL;
00180         ncap->nalloc = 0;
00181 }

void free_NC_vararrayV0 NC_vararray   ncap
 

Definition at line 139 of file var.c.

References free_NC_var(), NC_vararray::nelems, and NC_vararray::value.

Referenced by free_NC_vararrayV().

00140 {
00141         assert(ncap != NULL);
00142 
00143         if(ncap->nelems == 0)
00144                 return;
00145 
00146         assert(ncap->value != NULL);
00147 
00148         {
00149                 NC_var **vpp = ncap->value;
00150                 NC_var *const *const end = &vpp[ncap->nelems];
00151                 for( /*NADA*/; vpp < end; vpp++)
00152                 {
00153                         free_NC_var(*vpp);
00154                         *vpp = NULL;
00155                 }
00156         }
00157         ncap->nelems = 0;
00158 }

int NC_check_id int    ncid,
NC **    ncpp
 

Definition at line 57 of file nc.c.

References ncio::fd, NC::nciop, and NC::next.

Referenced by nc__enddef(), nc_abort(), nc_close(), nc_copy_att(), nc_copy_var(), nc_def_dim(), nc_def_var(), nc_del_att(), nc_enddef(), nc_get_rec(), nc_get_var1(), nc_get_var1_double(), nc_get_var1_float(), nc_get_var1_int(), nc_get_var1_long(), nc_get_var1_schar(), nc_get_var1_short(), nc_get_var1_text(), nc_get_var1_uchar(), nc_get_var_double(), nc_get_var_float(), nc_get_var_int(), nc_get_var_long(), nc_get_var_schar(), nc_get_var_short(), nc_get_var_text(), nc_get_var_uchar(), nc_get_vara(), nc_get_vara_double(), nc_get_vara_float(), nc_get_vara_int(), nc_get_vara_long(), nc_get_vara_schar(), nc_get_vara_short(), nc_get_vara_text(), nc_get_vara_uchar(), nc_get_varm(), nc_get_varm_double(), nc_get_varm_float(), nc_get_varm_int(), nc_get_varm_long(), nc_get_varm_schar(), nc_get_varm_short(), nc_get_varm_text(), nc_get_varm_uchar(), nc_inq(), nc_inq_attid(), nc_inq_attname(), nc_inq_base_pe(), nc_inq_dim(), nc_inq_dimid(), nc_inq_dimlen(), nc_inq_dimname(), nc_inq_natts(), nc_inq_ndims(), nc_inq_nvars(), nc_inq_rec(), nc_inq_unlimdim(), nc_inq_var(), nc_inq_vardimid(), nc_inq_varid(), nc_inq_varname(), nc_inq_varnatts(), nc_inq_varndims(), nc_inq_vartype(), NC_lookupattr(), nc_put_att_double(), nc_put_att_float(), nc_put_att_int(), nc_put_att_long(), nc_put_att_schar(), nc_put_att_short(), nc_put_att_text(), nc_put_att_uchar(), nc_put_rec(), nc_put_var1(), nc_put_var1_double(), nc_put_var1_float(), nc_put_var1_int(), nc_put_var1_long(), nc_put_var1_schar(), nc_put_var1_short(), nc_put_var1_text(), nc_put_var1_uchar(), nc_put_var_double(), nc_put_var_float(), nc_put_var_int(), nc_put_var_long(), nc_put_var_schar(), nc_put_var_short(), nc_put_var_text(), nc_put_var_uchar(), nc_put_vara(), nc_put_vara_double(), nc_put_vara_float(), nc_put_vara_int(), nc_put_vara_long(), nc_put_vara_schar(), nc_put_vara_short(), nc_put_vara_text(), nc_put_vara_uchar(), nc_put_varm(), nc_put_varm_double(), nc_put_varm_float(), nc_put_varm_int(), nc_put_varm_long(), nc_put_varm_schar(), nc_put_varm_short(), nc_put_varm_text(), nc_put_varm_uchar(), nc_redef(), nc_rename_att(), nc_rename_dim(), nc_rename_var(), nc_set_base_pe(), nc_set_fill(), and nc_sync().

00058 {
00059         NC *ncp;
00060 
00061         if(ncid >= 0)
00062         {
00063                 for(ncp = NClist; ncp != NULL; ncp = ncp->next)
00064                 {
00065                         if(ncp->nciop->fd == ncid)
00066                         {
00067                                 *ncpp = ncp;
00068                                 return NC_NOERR; /* normal return */
00069                         }
00070                 }
00071         }
00072 
00073         /* else, not found */
00074         return NC_EBADID;
00075 }

int NC_check_name const char *    name
 

Definition at line 35 of file string.c.

References name.

Referenced by nc_def_dim(), nc_def_var(), nc_put_att_double(), nc_put_att_float(), nc_put_att_int(), nc_put_att_long(), nc_put_att_schar(), nc_put_att_short(), nc_put_att_text(), nc_put_att_uchar(), nc_rename_att(), nc_rename_dim(), and nc_rename_var().

00036 {
00037         const char *cp = name;
00038         assert(name != NULL);
00039 
00040         if(*name == 0)
00041                 return NC_EBADNAME; /* empty names disallowed */
00042 
00043         for(; *cp != 0; cp++)
00044         {
00045                 int ch = *cp;
00046                 if(!isalnum(ch))
00047                 {
00048                         if(ch != '_' && ch != '-' && ch != '.')
00049                                 return NC_EBADNAME;
00050                 }
00051         }
00052         if(cp - name > NC_MAX_NAME)
00053                 return NC_EMAXNAME;
00054 
00055         return NC_NOERR;
00056 }

int nc_cktype nc_type    datatype
 

Definition at line 157 of file nc.c.

Referenced by nc_def_var(), nc_put_att_double(), nc_put_att_float(), nc_put_att_int(), nc_put_att_long(), nc_put_att_schar(), nc_put_att_short(), and nc_put_att_uchar().

00158 {
00159         switch((int)type){
00160         case NC_BYTE:
00161         case NC_CHAR:
00162         case NC_SHORT:
00163         case NC_INT:
00164         case NC_FLOAT:
00165         case NC_DOUBLE:
00166                 return(NC_NOERR);
00167         }
00168         return(NC_EBADTYPE);
00169 }

NC_attr** NC_findattr const NC_attrarray   ncap,
const char *    name
 

Definition at line 318 of file attr.c.

References name, NC_attrarray::nelems, and NC_attrarray::value.

Referenced by fill_NC_var(), nc_copy_att(), nc_inq_attid(), NC_lookupattr(), nc_put_att_double(), nc_put_att_float(), nc_put_att_int(), nc_put_att_long(), nc_put_att_schar(), nc_put_att_short(), nc_put_att_text(), nc_put_att_uchar(), and nc_rename_att().

00319 {
00320         NC_attr **attrpp;
00321         size_t attrid;
00322         size_t slen;
00323 
00324         assert(ncap != NULL);
00325 
00326         if(ncap->nelems == 0)
00327                 return NULL;
00328 
00329         attrpp = (NC_attr **) ncap->value;
00330 
00331         slen = strlen(name);
00332 
00333         for(attrid = 0; attrid < ncap->nelems; attrid++, attrpp++)
00334         {
00335                 if(strlen((*attrpp)->name->cp) == slen &&
00336                         strncmp((*attrpp)->name->cp, name, slen) == 0)
00337                 {
00338                         return(attrpp); /* Normal return */
00339                 }
00340         }
00341         return(NULL);
00342 }

int NC_findvar const NC_vararray   ncap,
const char *    name,
NC_var **    varpp
 

Definition at line 295 of file var.c.

References name, NC_vararray::nelems, and NC_vararray::value.

Referenced by nc_copy_var(), nc_def_var(), nc_inq_varid(), and nc_rename_var().

00296 {
00297         NC_var **loc;
00298         size_t slen;
00299         int varid;
00300 
00301         assert(ncap != NULL);
00302 
00303         if(ncap->nelems == 0)
00304                 return -1;
00305 
00306         loc = (NC_var **) ncap->value;
00307 
00308         slen = strlen(name);
00309 
00310         for(varid = 0; (size_t) varid < ncap->nelems; varid++, loc++)
00311         {
00312                 if(strlen((*loc)->name->cp) == slen &&
00313                         strncmp((*loc)->name->cp, name, slen) == 0)
00314                 {
00315                         if(varpp != NULL)
00316                                 *varpp = *loc;
00317                         return(varid); /* Normal return */
00318                 }
00319         }
00320         return(-1); /* not found */
00321 }

int nc_get_att int    ncid,
int    varid,
const char *    name,
void *    value
 

Definition at line 2214 of file attr.c.

02215 {
02216         int status;
02217         NC_attr *attrp;
02218 
02219         status = NC_lookupattr(ncid, varid, name, &attrp);
02220         if(status != NC_NOERR)
02221                 return status;
02222 
02223         switch (attrp->type) {
02224         case NC_BYTE:
02225                 return nc_get_att_schar(ncid, varid, name,
02226                         (schar *)value);
02227         case NC_CHAR:
02228                 return nc_get_att_text(ncid, varid, name,
02229                         (char *)value);
02230         case NC_SHORT:
02231                 return nc_get_att_short(ncid, varid, name,
02232                         (short *)value);
02233         case NC_INT:
02234 #if (SIZEOF_INT >= X_SIZEOF_INT)
02235                 return nc_get_att_int(ncid, varid, name,
02236                         (int *)value);
02237 #elif SIZEOF_LONG == X_SIZEOF_INT
02238                 return nc_get_att_long(ncid, varid, name,
02239                         (long *)value);
02240 #endif
02241         case NC_FLOAT:
02242                 return nc_get_att_float(ncid, varid, name,
02243                         (float *)value);
02244         case NC_DOUBLE:
02245                 return nc_get_att_double(ncid, varid, name,
02246                         (double *)value);
02247         }
02248         return NC_EBADTYPE;
02249 }

int nc_get_NC NC   ncp
 

Definition at line 1233 of file v1hpg.c.

References NC::attrs, v1hs::base, NC::chunk, NC::dims, v1hs::end, v1hs::extent, fault_v1hs(), v1hs::flags, memcmp(), MIN_NC_XSZ, NC_computeshapes(), NC_set_numrecs, v1hs::nciop, NC::nciop, ncmagic, ncx_get_size_t(), ncx_getn_schar_schar(), ncx_len_NC(), v1hs::offset, v1hs::pos, rel_v1hs(), v1h_get_NC_attrarray(), v1h_get_NC_dimarray(), v1h_get_NC_vararray(), NC::vars, and NC::xsz.

Referenced by nc__open_mp(), nc_delete_mp(), and read_NC().

01234 {
01235         int status;
01236         v1hs gs; /* the get stream */
01237 
01238         assert(ncp != NULL);
01239 
01240         /* Initialize stream gs */
01241 
01242         gs.nciop = ncp->nciop;
01243         gs.offset = 0; /* beginning of file */
01244         gs.extent = 0;
01245         gs.flags = 0;
01246         gs.base = NULL;
01247         gs.pos = gs.base;
01248 
01249         {
01250                 /*
01251                  * Come up with a reasonable stream read size.
01252                  */
01253                 size_t extent = ncp->xsz;
01254                 if(extent <= MIN_NC_XSZ)
01255                 {
01256                         /* first time read */
01257                         extent = ncp->chunk;
01258                         /* Protection for when ncp->chunk is huge;
01259                          * no need to read hugely. */
01260                         if(extent > 4096)
01261                                 extent = 4096;
01262                 }
01263                 else if(extent > ncp->chunk)
01264                 {
01265                         extent = ncp->chunk;
01266                 }
01267                 
01268                 status = fault_v1hs(&gs, extent);
01269                 if(status)
01270                         return status;
01271         }
01272 
01273         /* get the header from the stream gs */
01274 
01275         {
01276                 /* Get & check magic number */
01277                 schar magic[sizeof(ncmagic)];
01278                 (void) memset(magic, 0, sizeof(magic));
01279 
01280                 status = ncx_getn_schar_schar(
01281                         (const void **)(&gs.pos), sizeof(magic), magic);
01282                 if(status != ENOERR)
01283                         goto unwind_get;
01284         
01285                 if(memcmp(magic, ncmagic, sizeof(ncmagic)) != 0)
01286                 {
01287                         status = NC_ENOTNC;
01288                         goto unwind_get;
01289                 }
01290         }
01291         
01292         {
01293         size_t nrecs = 0;
01294         status = ncx_get_size_t((const void **)(&gs.pos), &nrecs);
01295         if(status != ENOERR)
01296                 goto unwind_get;
01297         NC_set_numrecs(ncp, nrecs);
01298         }
01299 
01300         assert((char *)gs.pos < (char *)gs.end);
01301 
01302         status = v1h_get_NC_dimarray(&gs, &ncp->dims);
01303         if(status != ENOERR)
01304                 goto unwind_get;
01305 
01306         status = v1h_get_NC_attrarray(&gs, &ncp->attrs);
01307         if(status != ENOERR)
01308                 goto unwind_get;
01309 
01310         status = v1h_get_NC_vararray(&gs, &ncp->vars);
01311         if(status != ENOERR)
01312                 goto unwind_get;
01313                 
01314         ncp->xsz = ncx_len_NC(ncp);
01315 
01316         status = NC_computeshapes(ncp);
01317 
01318 unwind_get:
01319         (void) rel_v1hs(&gs);
01320         return status;
01321 }

int nc_get_rec int    ncid,
size_t    recnum,
void **    datap
 

Definition at line 11633 of file putget.c.

References NC_check_id(), NC_get_numrecs, NC_indef, and NCrecget().

Referenced by ncrecget().

11637 {
11638         int status;
11639         NC *ncp;
11640 
11641         status = NC_check_id(ncid, &ncp); 
11642         if(status != NC_NOERR)
11643                 return status;
11644 
11645         if(NC_indef(ncp))
11646         {
11647                 return NC_EINDEFINE;
11648         }
11649 
11650         if(recnum >= NC_get_numrecs(ncp))
11651         {
11652                 return NC_EINVALCOORDS;
11653         }
11654 
11655         return( NCrecget(ncp, recnum, datap) );
11656 }

int nc_get_var1 int    ncid,
int    varid,
const size_t *    index,
void *    value
 

Definition at line 4920 of file putget.c.

04921 {
04922         int status;
04923         NC *ncp;
04924         const NC_var *varp;
04925 
04926         status = NC_check_id(ncid, &ncp); 
04927         if(status != NC_NOERR)
04928                 return status;
04929 
04930         varp = NC_lookupvar(ncp, varid);
04931         if(varp == NULL)
04932                 return NC_ENOTVAR;
04933 
04934         switch(varp->type){
04935         case NC_CHAR:
04936                 return nc_get_var1_text(ncid, varid, coord,
04937                         (char *) value);
04938         case NC_BYTE:
04939                 return nc_get_var1_schar(ncid, varid, coord,
04940                         (schar *) value);
04941         case NC_SHORT:
04942                 return nc_get_var1_short(ncid, varid, coord,
04943                         (short *) value);
04944         case NC_INT:
04945                 return nc_get_var1_int(ncid, varid, coord,
04946                         (int *) value);
04947         case NC_FLOAT:
04948                 return nc_get_var1_float(ncid, varid, coord,
04949                         (float *) value);
04950         case NC_DOUBLE: 
04951                 return nc_get_var1_double(ncid, varid, coord,
04952                         (double *) value);
04953         }
04954         return NC_EBADTYPE;
04955 }

int nc_get_vara int    ncid,
int    varid,
const size_t *    start,
const size_t *    count,
void *    value
 

Definition at line 6663 of file putget.c.

06665 {
06666         int status;
06667         NC *ncp;
06668         const NC_var *varp;
06669 
06670         status = NC_check_id(ncid, &ncp); 
06671         if(status != NC_NOERR)
06672                 return status;
06673 
06674         if(NC_indef(ncp))
06675                 return NC_EINDEFINE;
06676 
06677         varp = NC_lookupvar(ncp, varid);
06678         if(varp == NULL)
06679                 return NC_ENOTVAR; /* TODO: lost NC_EGLOBAL */
06680 
06681         switch(varp->type){
06682         case NC_CHAR:
06683                 return nc_get_vara_text(ncid, varid, start, edges,
06684                         (char *) value);
06685         case NC_BYTE:
06686                 return nc_get_vara_schar(ncid, varid, start, edges,
06687                         (schar *) value);
06688         case NC_SHORT:
06689                 return nc_get_vara_short(ncid, varid, start, edges,
06690                         (short *) value);
06691         case NC_INT:
06692 #if (SIZEOF_INT >= X_SIZEOF_INT)
06693                 return nc_get_vara_int(ncid, varid, start, edges,
06694                         (int *) value);
06695 #elif SIZEOF_LONG == X_SIZEOF_INT
06696                 return nc_get_vara_long(ncid, varid, start, edges,
06697                         (long *) value);
06698 #else
06699 #error "nc_get_vara implementation"
06700 #endif
06701         case NC_FLOAT:
06702                 return nc_get_vara_float(ncid, varid, start, edges,
06703                         (float *) value);
06704         case NC_DOUBLE: 
06705                 return nc_get_vara_double(ncid, varid, start, edges,
06706                         (double *) value);
06707         }
06708         return NC_EBADTYPE;
06709 }

int nc_get_varm int    ncid,
int    varid,
const size_t *    start,
const size_t *    count,
const ptrdiff_t *    stride,
const ptrdiff_t *    map,
void *    value
 

Definition at line 9707 of file putget.c.

09715 {
09716         int status;
09717         NC *ncp;
09718         const NC_var *varp;
09719         ptrdiff_t *cvtmap = NULL;
09720 
09721         status = NC_check_id(ncid, &ncp); 
09722         if(status != NC_NOERR)
09723                 return status;
09724 
09725         varp = NC_lookupvar(ncp, varid);
09726         if(varp == NULL)
09727                 return NC_ENOTVAR;
09728 
09729         if(map != NULL && varp->ndims != 0)
09730         {
09731                 /*
09732                  * convert map units from bytes to units of sizeof(type)
09733                  */
09734                 size_t ii;
09735                 const ptrdiff_t szof = (ptrdiff_t) nctypelen(varp->type);
09736                 cvtmap = (ptrdiff_t *)calloc(varp->ndims, sizeof(ptrdiff_t));
09737                 if(cvtmap == NULL)
09738                         return NC_ENOMEM;
09739                 for(ii = 0; ii < varp->ndims; ii++)
09740                 {
09741                         if(map[ii] % szof != 0) 
09742                         {
09743                                 free(cvtmap);
09744                                 return NC_EINVAL;
09745                         }
09746                         cvtmap[ii] = map[ii] / szof;
09747                 }
09748                 map = cvtmap;
09749         }
09750 
09751         switch(varp->type){
09752         case NC_CHAR:
09753                 status =  nc_get_varm_text(ncid, varid, start, edges,
09754                         stride, map,
09755                         (char *) value);
09756                 break;
09757         case NC_BYTE:
09758                 status = nc_get_varm_schar(ncid, varid, start, edges,
09759                         stride, map,
09760                         (schar *) value);
09761                 break;
09762         case NC_SHORT:
09763                 status = nc_get_varm_short(ncid, varid, start, edges,
09764                         stride, map,
09765                         (short *) value);
09766                 break;
09767         case NC_INT:
09768 #if (SIZEOF_INT >= X_SIZEOF_INT)
09769                 status = nc_get_varm_int(ncid, varid, start, edges,
09770                         stride, map,
09771                         (int *) value);
09772 #elif SIZEOF_LONG == X_SIZEOF_INT
09773                 status = nc_get_varm_long(ncid, varid, start, edges,
09774                         stride, map,
09775                         (long *) value);
09776 #else
09777 #error "nc_get_varm implementation"
09778 #endif
09779                 break;
09780         case NC_FLOAT:
09781                 status = nc_get_varm_float(ncid, varid, start, edges,
09782                         stride, map,
09783                         (float *) value);
09784                 break;
09785         case NC_DOUBLE: 
09786                 status = nc_get_varm_double(ncid, varid, start, edges,
09787                         stride, map,
09788                         (double *) value);
09789                 break;
09790         default:
09791                 status = NC_EBADTYPE;
09792                 break;
09793         }
09794 
09795         if(cvtmap != NULL)
09796         {
09797                 free(cvtmap);
09798         }
09799         return status;
09800 }

int nc_get_vars int    ncid,
int    varid,
const size_t *    start,
const size_t *    count,
const ptrdiff_t *    stride,
void *    value
 

Definition at line 8069 of file putget.c.

08076 {
08077         return nc_get_varm (ncid, varid, start, edges,
08078                          stride, 0, value);
08079 }

int nc_inq_rec int    ncid,
size_t *    nrecvars,
int *    recvarids,
size_t *    recsizes
 

Definition at line 11462 of file putget.c.

References IS_RECVAR, NC_check_id(), NCelemsPerRec(), nctypelen(), NC_vararray::nelems, NC_var::type, NC_vararray::value, and NC::vars.

Referenced by ncrecinq().

11467 {
11468         NC *ncp;
11469 
11470    {
11471         const int status = NC_check_id(ncid, &ncp); 
11472         if(status != NC_NOERR)
11473                 return status;
11474    }
11475 
11476    {
11477         size_t nrvars = 0;
11478         size_t ii = 0;
11479         for(; ii < ncp->vars.nelems; ii++)
11480         {
11481                 const NC_var *const varp = ncp->vars.value[ii];
11482                 if(!IS_RECVAR(varp))
11483                         continue;
11484 
11485                 if(recvarids != NULL)
11486                         recvarids[nrvars] = (int) ii;
11487                 if(recsizes != NULL)
11488                 {
11489                         *recsizes++ = nctypelen(varp->type)
11490                                  * NCelemsPerRec(varp);
11491                 }
11492                 nrvars++;
11493         }
11494 
11495         if(nrecvars != NULL)
11496                 *nrecvars = nrvars;
11497     }
11498 
11499         return NC_NOERR;
11500 }

NC_var* NC_lookupvar NC   ncp,
int    varid
 

Definition at line 435 of file var.c.

References elem_NC_vararray(), and NC::vars.

Referenced by nc_copy_var(), nc_get_var1(), nc_get_var1_double(), nc_get_var1_float(), nc_get_var1_int(), nc_get_var1_long(), nc_get_var1_schar(), nc_get_var1_short(), nc_get_var1_text(), nc_get_var1_uchar(), nc_get_var_double(), nc_get_var_float(), nc_get_var_int(), nc_get_var_long(), nc_get_var_schar(), nc_get_var_short(), nc_get_var_text(), nc_get_var_uchar(), nc_get_vara(), nc_get_vara_double(), nc_get_vara_float(), nc_get_vara_int(), nc_get_vara_long(), nc_get_vara_schar(), nc_get_vara_short(), nc_get_vara_text(), nc_get_vara_uchar(), nc_get_varm(), nc_get_varm_double(), nc_get_varm_float(), nc_get_varm_int(), nc_get_varm_long(), nc_get_varm_schar(), nc_get_varm_short(), nc_get_varm_text(), nc_get_varm_uchar(), nc_put_var1(), nc_put_var1_double(), nc_put_var1_float(), nc_put_var1_int(), nc_put_var1_long(), nc_put_var1_schar(), nc_put_var1_short(), nc_put_var1_text(), nc_put_var1_uchar(), nc_put_var_double(), nc_put_var_float(), nc_put_var_int(), nc_put_var_long(), nc_put_var_schar(), nc_put_var_short(), nc_put_var_text(), nc_put_var_uchar(), nc_put_vara(), nc_put_vara_double(), nc_put_vara_float(), nc_put_vara_int(), nc_put_vara_long(), nc_put_vara_schar(), nc_put_vara_short(), nc_put_vara_text(), nc_put_vara_uchar(), nc_put_varm(), nc_put_varm_double(), nc_put_varm_float(), nc_put_varm_int(), nc_put_varm_long(), nc_put_varm_schar(), nc_put_varm_short(), nc_put_varm_text(), nc_put_varm_uchar(), and nc_rename_var().

00436 {
00437         NC_var *varp;
00438 
00439         if(varid == NC_GLOBAL)
00440         {
00441                 /* Global is error in this context */
00442                 return(NULL);
00443         }
00444 
00445         varp = elem_NC_vararray(&ncp->vars, (size_t)varid);
00446         if(varp == NULL)
00447         {
00448                 return NULL;
00449         }
00450 
00451         assert(varp != NULL);
00452 
00453         return(varp);
00454 }

int nc_put_att int    ncid,
int    varid,
const char *    name,
nc_type    datatype,
size_t    len,
const void *    value
 

Definition at line 2175 of file attr.c.

02182 {
02183         switch (type) {
02184         case NC_BYTE:
02185                 return nc_put_att_schar(ncid, varid, name, type, nelems,
02186                         (schar *)value);
02187         case NC_CHAR:
02188                 return nc_put_att_text(ncid, varid, name, nelems,
02189                         (char *)value);
02190         case NC_SHORT:
02191                 return nc_put_att_short(ncid, varid, name, type, nelems,
02192                         (short *)value);
02193         case NC_INT:
02194 #if (SIZEOF_INT >= X_SIZEOF_INT)
02195                 return nc_put_att_int(ncid, varid, name, type, nelems,
02196                         (int *)value);
02197 #elif SIZEOF_LONG == X_SIZEOF_INT
02198                 return nc_put_att_long(ncid, varid, name, type, nelems,
02199                         (long *)value);
02200 #endif
02201         case NC_FLOAT:
02202                 return nc_put_att_float(ncid, varid, name, type, nelems,
02203                         (float *)value);
02204         case NC_DOUBLE:
02205                 return nc_put_att_double(ncid, varid, name, type, nelems,
02206                         (double *)value);
02207         }
02208         return NC_EBADTYPE;
02209 }

int nc_put_rec int    ncid,
size_t    recnum,
void *const *    datap
 

Definition at line 11598 of file putget.c.

References NC_check_id(), NC_indef, NC_readonly, NCrecput(), and NCvnrecs().

Referenced by ncrecput().

11602 {
11603         int status;
11604         NC *ncp;
11605 
11606         status = NC_check_id(ncid, &ncp); 
11607         if(status != NC_NOERR)
11608                 return status;
11609 
11610         if(NC_readonly(ncp))
11611         {
11612                 return NC_EPERM;
11613         }
11614 
11615         if(NC_indef(ncp))
11616         {
11617                 return NC_EINDEFINE;
11618         }
11619 
11620         status = NCvnrecs(ncp, recnum +1);
11621         if(status != NC_NOERR)
11622                 return status;
11623 
11624         return( NCrecput(ncp, recnum, datap) );
11625 }

int nc_put_var1 int    ncid,
int    varid,
const size_t *    index,
const void *    value
 

Definition at line 4653 of file putget.c.

04654 {
04655         int status;
04656         NC *ncp;
04657         const NC_var *varp;
04658 
04659         status = NC_check_id(ncid, &ncp); 
04660         if(status != NC_NOERR)
04661                 return status;
04662 
04663         varp = NC_lookupvar(ncp, varid);
04664         if(varp == NULL)
04665                 return NC_ENOTVAR;
04666 
04667         switch(varp->type){
04668         case NC_CHAR:
04669                 return nc_put_var1_text(ncid, varid, coord,
04670                         (const char *) value);
04671         case NC_BYTE:
04672                 return nc_put_var1_schar(ncid, varid, coord,
04673                         (const schar *) value);
04674         case NC_SHORT:
04675                 return nc_put_var1_short(ncid, varid, coord,
04676                         (const short *) value);
04677         case NC_INT:
04678                 return nc_put_var1_int(ncid, varid, coord,
04679                         (const int *) value);
04680         case NC_FLOAT:
04681                 return nc_put_var1_float(ncid, varid, coord,
04682                         (const float *) value);
04683         case NC_DOUBLE: 
04684                 return nc_put_var1_double(ncid, varid, coord,
04685                         (const double *) value);
04686         }
04687         return NC_EBADTYPE;
04688 }

int nc_put_vara int    ncid,
int    varid,
const size_t *    start,
const size_t *    count,
const void *    value
 

Definition at line 5812 of file putget.c.

05814 {
05815         int status;
05816         NC *ncp;
05817         const NC_var *varp;
05818 
05819         status = NC_check_id(ncid, &ncp); 
05820         if(status != NC_NOERR)
05821                 return status;
05822 
05823         if(NC_readonly(ncp))
05824                 return NC_EPERM;
05825 
05826         if(NC_indef(ncp))
05827                 return NC_EINDEFINE;
05828 
05829         varp = NC_lookupvar(ncp, varid);
05830         if(varp == NULL)
05831                 return NC_ENOTVAR; /* TODO: lost NC_EGLOBAL */
05832 
05833         switch(varp->type){
05834         case NC_CHAR:
05835                 return nc_put_vara_text(ncid, varid, start, edges,
05836                         (const char *) value);
05837         case NC_BYTE:
05838                 return nc_put_vara_schar(ncid, varid, start, edges,
05839                         (const schar *) value);
05840         case NC_SHORT:
05841                 return nc_put_vara_short(ncid, varid, start, edges,
05842                         (const short *) value);
05843         case NC_INT:
05844                 return nc_put_vara_int(ncid, varid, start, edges,
05845                         (const int *) value);
05846         case NC_FLOAT:
05847                 return nc_put_vara_float(ncid, varid, start, edges,
05848                         (const float *) value);
05849         case NC_DOUBLE: 
05850                 return nc_put_vara_double(ncid, varid, start, edges,
05851                         (const double *) value);
05852         }
05853         return NC_EBADTYPE;
05854 }

int nc_put_varm int    ncid,
int    varid,
const size_t *    start,
const size_t *    count,
const ptrdiff_t *    stride,
const ptrdiff_t *    map,
const void *    value
 

Definition at line 11268 of file putget.c.

11276 {
11277         int status;
11278         NC *ncp;
11279         const NC_var *varp;
11280         ptrdiff_t *cvtmap = NULL;
11281 
11282         status = NC_check_id(ncid, &ncp); 
11283         if(status != NC_NOERR)
11284                 return status;
11285 
11286         varp = NC_lookupvar(ncp, varid);
11287         if(varp == NULL)
11288                 return NC_ENOTVAR;
11289 
11290         if(map != NULL && varp->ndims != 0)
11291         {
11292                 /*
11293                  * convert map units from bytes to units of sizeof(type)
11294                  */
11295                 size_t ii;
11296                 const ptrdiff_t szof = (ptrdiff_t) nctypelen(varp->type);
11297                 cvtmap = (ptrdiff_t *)calloc(varp->ndims, sizeof(ptrdiff_t));
11298                 if(cvtmap == NULL)
11299                         return NC_ENOMEM;
11300                 for(ii = 0; ii < varp->ndims; ii++)
11301                 {
11302                         if(map[ii] % szof != 0) 
11303                         {
11304                                 free(cvtmap);
11305                                 return NC_EINVAL;
11306                         }
11307                         cvtmap[ii] = map[ii] / szof;
11308                 }
11309                 map = cvtmap;
11310         }
11311 
11312         switch(varp->type){
11313         case NC_CHAR:
11314                 status =  nc_put_varm_text(ncid, varid, start, edges,
11315                         stride, map,
11316                         (const char *) value);
11317                 break;
11318         case NC_BYTE:
11319                 status = nc_put_varm_schar(ncid, varid, start, edges,
11320                         stride, map,
11321                         (const schar *) value);
11322                 break;
11323         case NC_SHORT:
11324                 status = nc_put_varm_short(ncid, varid, start, edges,
11325                         stride, map,
11326                         (const short *) value);
11327                 break;
11328         case NC_INT:
11329 #if (SIZEOF_INT >= X_SIZEOF_INT)
11330                 status = nc_put_varm_int(ncid, varid, start, edges,
11331                         stride, map,
11332                         (const int *) value);
11333 #elif SIZEOF_LONG == X_SIZEOF_INT
11334                 status = nc_put_varm_long(ncid, varid, start, edges,
11335                         stride, map,
11336                         (const long *) value);
11337 #else
11338 #error "nc_put_varm implementation"
11339 #endif
11340                 break;
11341         case NC_FLOAT:
11342                 status = nc_put_varm_float(ncid, varid, start, edges,
11343                         stride, map,
11344                         (const float *) value);
11345                 break;
11346         case NC_DOUBLE: 
11347                 status = nc_put_varm_double(ncid, varid, start, edges,
11348                         stride, map,
11349                         (const double *) value);
11350                 break;
11351         default:
11352                 status = NC_EBADTYPE;
11353                 break;
11354         }
11355 
11356         if(cvtmap != NULL)
11357         {
11358                 free(cvtmap);
11359         }
11360         return status;
11361 }

int nc_put_vars int    ncid,
int    varid,
const size_t *    start,
const size_t *    count,
const ptrdiff_t *    stride,
const void *    value
 

Definition at line 8190 of file putget.c.

08197 {
08198         return nc_put_varm (ncid, varid, start, edges,
08199                          stride, 0, value);
08200 }

int NC_sync NC   ncp
 

Definition at line 411 of file nc.c.

References NC_hdirty, NC_ndirty, NC_readonly, write_NC(), and write_numrecs().

Referenced by nc_abort(), nc_close(), nc_copy_att(), nc_put_att_double(), nc_put_att_float(), nc_put_att_int(), nc_put_att_long(), nc_put_att_schar(), nc_put_att_short(), nc_put_att_text(), nc_put_att_uchar(), nc_redef(), nc_rename_att(), nc_rename_dim(), nc_rename_var(), nc_set_fill(), and nc_sync().

00412 {
00413         assert(!NC_readonly(ncp));
00414 
00415         if(NC_hdirty(ncp))
00416         {
00417                 return write_NC(ncp);
00418         }
00419         /* else */
00420 
00421         if(NC_ndirty(ncp))
00422         {
00423                 return write_numrecs(ncp);
00424         }
00425         /* else */
00426 
00427         return NC_NOERR;
00428 }

int NC_var_shape NC_var   varp,
const NC_dimarray   dims
 

Definition at line 359 of file var.c.

References NC_var::dimids, NC_var::dsizes, elem_NC_dimarray(), IS_RECVAR, NC_var::len, ncx_szof(), NC_var::ndims, NC_dimarray::nelems, NC_var::shape, NC_dim::size, NC_var::type, and NC_var::xsz.

Referenced by NC_computeshapes(), and nc_def_var().

00360 {
00361         size_t *shp, *dsp, *op;
00362         int *ip;
00363         const NC_dim *dimp;
00364         size_t product = 1;
00365         
00366         varp->xsz = ncx_szof(varp->type);
00367 
00368         if(varp->ndims == 0)
00369         {
00370                 goto out;
00371         }
00372 
00373         /*
00374          * use the user supplied dimension indices
00375          * to determine the shape
00376          */
00377         for(ip = varp->dimids, op = varp->shape
00378                 ; ip < &varp->dimids[varp->ndims]; ip++, op++)
00379         {
00380                 if(*ip < 0 || (size_t) (*ip) >= ((dims != NULL) ? dims->nelems : 1) )
00381                         return NC_EBADDIM;
00382                 
00383                 dimp = elem_NC_dimarray(dims, (size_t)*ip);
00384                 *op = dimp->size;
00385                 if(*op == NC_UNLIMITED && ip != varp->dimids)
00386                         return NC_EUNLIMPOS;
00387         }
00388 
00389         /* 
00390          * Compute the dsizes
00391          */
00392                                 /* ndims is > 0 here */
00393         for(shp = varp->shape + varp->ndims -1,
00394                                 dsp = varp->dsizes + varp->ndims -1;
00395                         shp >= varp->shape;
00396                         shp--, dsp--)
00397         {
00398                 if(!(shp == varp->shape && IS_RECVAR(varp)))
00399                         product *= *shp;
00400                 *dsp = product;
00401         }
00402 
00403 
00404 out :
00405         varp->len = product * varp->xsz;
00406         switch(varp->type) {
00407         case NC_BYTE :
00408         case NC_CHAR :
00409         case NC_SHORT :
00410                 if( varp->len%4 != 0 )
00411                 {
00412                         varp->len += 4 - varp->len%4; /* round up */
00413         /*              *dsp += 4 - *dsp%4; */
00414                 }
00415                 break;
00416         default:
00417                 /* already aligned */
00418                 break;
00419         }
00420 #if 0
00421         arrayp("\tshape", varp->ndims, varp->shape);
00422         arrayp("\tdsizes", varp->ndims, varp->dsizes);
00423 #endif
00424         return NC_NOERR;
00425 }

size_t ncx_howmany nc_type    type,
size_t    xbufsize
 

Definition at line 177 of file nc.c.

References X_SIZEOF_DOUBLE, X_SIZEOF_FLOAT, X_SIZEOF_INT, and X_SIZEOF_SHORT.

Referenced by getNCvx_char_char(), getNCvx_double_double(), getNCvx_double_float(), getNCvx_double_int(), getNCvx_double_long(), getNCvx_double_schar(), getNCvx_double_short(), getNCvx_double_uchar(), getNCvx_float_double(), getNCvx_float_float(), getNCvx_float_int(), getNCvx_float_long(), getNCvx_float_schar(), getNCvx_float_short(), getNCvx_float_uchar(), getNCvx_int_double(), getNCvx_int_float(), getNCvx_int_int(), getNCvx_int_long(), getNCvx_int_schar(), getNCvx_int_short(), getNCvx_int_uchar(), getNCvx_schar_double(), getNCvx_schar_float(), getNCvx_schar_int(), getNCvx_schar_long(), getNCvx_schar_schar(), getNCvx_schar_short(), getNCvx_schar_uchar(), getNCvx_short_double(), getNCvx_short_float(), getNCvx_short_int(), getNCvx_short_long(), getNCvx_short_schar(), getNCvx_short_short(), getNCvx_short_uchar(), putNCvx_char_char(), putNCvx_double_double(), putNCvx_double_float(), putNCvx_double_int(), putNCvx_double_long(), putNCvx_double_schar(), putNCvx_double_short(), putNCvx_double_uchar(), putNCvx_float_double(), putNCvx_float_float(), putNCvx_float_int(), putNCvx_float_long(), putNCvx_float_schar(), putNCvx_float_short(), putNCvx_float_uchar(), putNCvx_int_double(), putNCvx_int_float(), putNCvx_int_int(), putNCvx_int_long(), putNCvx_int_schar(), putNCvx_int_short(), putNCvx_int_uchar(), putNCvx_schar_double(), putNCvx_schar_float(), putNCvx_schar_int(), putNCvx_schar_long(), putNCvx_schar_schar(), putNCvx_schar_short(), putNCvx_schar_uchar(), putNCvx_short_double(), putNCvx_short_float(), putNCvx_short_int(), putNCvx_short_long(), putNCvx_short_schar(), putNCvx_short_short(), and putNCvx_short_uchar().

00178 {
00179         switch(type){
00180         case NC_BYTE:
00181         case NC_CHAR:
00182                 return xbufsize;
00183         case NC_SHORT:
00184                 return xbufsize/X_SIZEOF_SHORT;
00185         case NC_INT:
00186                 return xbufsize/X_SIZEOF_INT;
00187         case NC_FLOAT:
00188                 return xbufsize/X_SIZEOF_FLOAT;
00189         case NC_DOUBLE:
00190                 return xbufsize/X_SIZEOF_DOUBLE;
00191         }
00192         assert("ncx_howmany: Bad type" == 0);
00193         return(0);
00194 }

size_t ncx_len_NC const NC   ncp
 

Definition at line 1134 of file v1hpg.c.

References NC::attrs, NC::dims, ncx_len_NC_attrarray(), ncx_len_NC_dimarray(), ncx_len_NC_vararray(), NC::vars, and X_SIZEOF_SIZE_T.

Referenced by NC_begins(), and nc_get_NC().

01135 {
01136         size_t xlen = sizeof(ncmagic);
01137 
01138         assert(ncp != NULL);
01139         
01140         xlen += X_SIZEOF_SIZE_T; /* numrecs */
01141         xlen += ncx_len_NC_dimarray(&ncp->dims);
01142         xlen += ncx_len_NC_attrarray(&ncp->attrs);
01143         xlen += ncx_len_NC_vararray(&ncp->vars);
01144 
01145         return xlen;
01146 }

int ncx_put_NC const NC   ncp,
void **    xpp,
off_t    offset,
size_t    extent
 

Definition at line 1150 of file v1hpg.c.

References NC::attrs, v1hs::base, NC::chunk, NC::dims, v1hs::end, v1hs::extent, fault_v1hs(), v1hs::flags, MIN_NC_XSZ, NC_get_numrecs, v1hs::nciop, NC::nciop, ncmagic, ncx_put_size_t(), ncx_putn_schar_schar(), offset, v1hs::offset, v1hs::pos, rel_v1hs(), RGN_WRITE, v1h_put_NC_attrarray(), v1h_put_NC_dimarray(), v1h_put_NC_vararray(), NC::vars, and NC::xsz.

Referenced by nc__create_mp(), and write_NC().

01151 {
01152         int status = ENOERR;
01153         v1hs ps; /* the get stream */
01154 
01155         assert(ncp != NULL);
01156 
01157         /* Initialize stream ps */
01158 
01159         ps.nciop = ncp->nciop;
01160         ps.flags = RGN_WRITE;
01161 
01162         if(xpp == NULL)
01163         {
01164                 /*
01165                  * Come up with a reasonable stream read size.
01166                  */
01167                 extent = ncp->xsz;
01168                 if(extent <= MIN_NC_XSZ)
01169                 {
01170                         /* first time read */
01171                         extent = ncp->chunk;
01172                         /* Protection for when ncp->chunk is huge;
01173                          * no need to read hugely. */
01174                         if(extent > 4096)
01175                                 extent = 4096;
01176                 }
01177                 else if(extent > ncp->chunk)
01178                 {
01179                         extent = ncp->chunk;
01180                 }
01181                 
01182                 ps.offset = 0;
01183                 ps.extent = extent;
01184                 ps.base = NULL;
01185                 ps.pos = ps.base;
01186 
01187                 status = fault_v1hs(&ps, extent);
01188                 if(status)
01189                         return status;
01190         }
01191         else
01192         {
01193                 ps.offset = offset;
01194                 ps.extent = extent;
01195                 ps.base = *xpp;
01196                 ps.pos = ps.base;
01197                 ps.end = (char *)ps.base + ps.extent;
01198         }
01199 
01200         status = ncx_putn_schar_schar(&ps.pos, sizeof(ncmagic), ncmagic);
01201         if(status != ENOERR)
01202                 goto release;
01203 
01204         {
01205         const size_t nrecs = NC_get_numrecs(ncp);
01206         status = ncx_put_size_t(&ps.pos, &nrecs);
01207         if(status != ENOERR)
01208                 goto release;
01209         }
01210 
01211         assert((char *)ps.pos < (char *)ps.end);
01212 
01213         status = v1h_put_NC_dimarray(&ps, &ncp->dims);
01214         if(status != ENOERR)
01215                 goto release;
01216 
01217         status = v1h_put_NC_attrarray(&ps, &ncp->attrs);
01218         if(status != ENOERR)
01219                 goto release;
01220 
01221         status = v1h_put_NC_vararray(&ps, &ncp->vars);
01222         if(status != ENOERR)
01223                 goto release;
01224 
01225 release:
01226         (void) rel_v1hs(&ps);
01227 
01228         return status;
01229 }

NC_string* new_NC_string size_t    slen,
const char *    str
 

Definition at line 66 of file string.c.

References _RNDUP, NC_string::cp, M_RNDUP, malloc, NC_string::nchars, and X_ALIGN.

Referenced by nc_rename_att(), nc_rename_dim(), nc_rename_var(), new_NC_attr(), new_NC_dim(), new_NC_var(), and v1h_get_NC_string().

00067 {
00068         NC_string *ncstrp;
00069         size_t sz = M_RNDUP(sizeof(NC_string)) + slen + 1;
00070 
00071 #if 0
00072         sz = _RNDUP(sz, X_ALIGN);
00073 #endif
00074                 
00075         ncstrp = (NC_string *)malloc(sz);
00076         if( ncstrp == NULL )
00077                 return NULL;
00078         (void) memset(ncstrp, 0, sz);
00079 
00080         ncstrp->nchars = sz - M_RNDUP(sizeof(NC_string)) - 1;
00081         assert(ncstrp->nchars + 1 > slen);
00082         ncstrp->cp = (char *)ncstrp + M_RNDUP(sizeof(NC_string));
00083 
00084         if(str != NULL && *str != 0)
00085         {
00086                 (void) strncpy(ncstrp->cp, str, ncstrp->nchars +1);
00087                 ncstrp->cp[ncstrp->nchars] = 0;
00088         }
00089         
00090         return(ncstrp);
00091 }

NC_attr* new_x_NC_attr NC_string   strp,
nc_type    type,
size_t    nelems
 

Definition at line 59 of file attr.c.

References M_RNDUP, malloc, NC_attr::name, ncx_len_NC_attrV(), NC_attr::nelems, strp, NC_attr::type, NC_attr::xsz, and NC_attr::xvalue.

Referenced by new_NC_attr(), and v1h_get_NC_attr().

00063 {
00064         NC_attr *attrp;
00065         const size_t xsz = ncx_len_NC_attrV(type, nelems);
00066         size_t sz = M_RNDUP(sizeof(NC_attr));
00067 
00068         assert(!(xsz == 0 && nelems != 0));
00069 
00070         sz += xsz;
00071 
00072         attrp = (NC_attr *) malloc(sz);
00073         if(attrp == NULL )
00074                 return NULL;
00075 
00076         attrp->xsz = xsz;
00077 
00078         attrp->name = strp;
00079         attrp->type = type;
00080         attrp->nelems = nelems;
00081         if(xsz != 0)
00082                 attrp->xvalue = (char *)attrp + M_RNDUP(sizeof(NC_attr));
00083         else
00084                 attrp->xvalue = NULL;
00085 
00086         return(attrp);
00087 }

NC_dim* new_x_NC_dim NC_string   name
 

Definition at line 29 of file dim.c.

References malloc, NC_dim::name, name, and NC_dim::size.

Referenced by new_NC_dim(), and v1h_get_NC_dim().

00030 {
00031         NC_dim *dimp;
00032 
00033         dimp = (NC_dim *) malloc(sizeof(NC_dim));
00034         if(dimp == NULL)
00035                 return NULL;
00036 
00037         dimp->name = name;
00038         dimp->size = 0;
00039 
00040         return(dimp);
00041 }

NC_var* new_x_NC_var NC_string   strp,
size_t    ndims
 

Definition at line 35 of file var.c.

References NC_var::begin, NC_var::dimids, NC_var::dsizes, NC_var::len, M_RNDUP, malloc, NC_var::name, ndims, NC_var::ndims, NC_var::shape, strp, and NC_var::xsz.

Referenced by new_NC_var(), and v1h_get_NC_var().

00038 {
00039         NC_var *varp;
00040         const size_t o1 = M_RNDUP(ndims * sizeof(int));
00041         const size_t o2 = M_RNDUP(ndims * sizeof(size_t));
00042         const size_t sz =  M_RNDUP(sizeof(NC_var)) +
00043                  o1 + o2 + ndims * sizeof(size_t);
00044 
00045         varp = (NC_var *) malloc(sz);
00046         if(varp == NULL )
00047                 return NULL;
00048         (void) memset(varp, 0, sz);
00049 
00050         varp->name = strp;
00051         varp->ndims = ndims;
00052 
00053         if(ndims != 0)
00054         {
00055                 /*
00056                  * NOTE: lint may complain about the next 3 lines:
00057                  * "pointer cast may result in improper alignment".
00058                  * We use the M_RNDUP() macro to get the proper alignment.
00059                  */
00060                 varp->dimids = (int *)((char *)varp + M_RNDUP(sizeof(NC_var)));
00061                 varp->shape = (size_t *)((char *)varp->dimids + o1);
00062                 varp->dsizes = (size_t *)((char *)varp->shape + o2);
00063         }
00064 
00065         varp->xsz = 0;
00066         varp->len = 0;
00067         varp->begin = 0;
00068 
00069         return varp;
00070 }

int read_numrecs NC   ncp
 

Definition at line 304 of file nc.c.

References fClr, NC::flags, ncio::get, NC_get_numrecs, NC_indef, NC_NDIRTY, NC_set_numrecs, NC::nciop, ncx_get_size_t(), and ncio::rel.

Referenced by NCcoordck().

00305 {
00306         int status = NC_NOERR;
00307         const void *xp;
00308         size_t nrecs = NC_get_numrecs(ncp);
00309 
00310         assert(!NC_indef(ncp));
00311 
00312 #define NC_NUMRECS_OFFSET 4
00313 #define NC_NUMRECS_EXTENT 4
00314         status = ncp->nciop->get(ncp->nciop,
00315                  NC_NUMRECS_OFFSET, NC_NUMRECS_EXTENT, 0, (void **)&xp);
00316                                         /* cast away const */
00317         if(status != NC_NOERR)
00318                 return status;
00319 
00320         status = ncx_get_size_t(&xp, &nrecs);
00321 
00322         (void) ncp->nciop->rel(ncp->nciop, NC_NUMRECS_OFFSET, 0);
00323 
00324         if(status == NC_NOERR)
00325         {
00326                 NC_set_numrecs(ncp, nrecs);
00327                 fClr(ncp->flags, NC_NDIRTY);
00328         }
00329 
00330         return status;
00331 }

int set_NC_string NC_string   ncstrp,
const char *    str
 

Definition at line 101 of file string.c.

References NC_string::cp, and NC_string::nchars.

Referenced by nc_rename_att(), nc_rename_dim(), and nc_rename_var().

00102 {
00103         size_t slen;
00104         size_t diff;
00105 
00106         assert(str != NULL && *str != 0);
00107 
00108         slen = strlen(str);
00109 
00110         if(ncstrp->nchars < slen)
00111                 return NC_ENOTINDEFINE;
00112 
00113         (void) memcpy(ncstrp->cp, str, slen);
00114         diff = ncstrp->nchars - slen;
00115         if(diff != 0)
00116                 (void) memset(ncstrp->cp + slen, 0, diff);
00117 
00118         return NC_NOERR;
00119 }

int write_numrecs NC   ncp
 

Definition at line 339 of file nc.c.

References fClr, NC::flags, ncio::get, NC_get_numrecs, NC_indef, NC_NDIRTY, NC_readonly, NC::nciop, ncx_put_size_t(), ncio::rel, RGN_MODIFIED, and RGN_WRITE.

Referenced by NC_sync(), and NCvnrecs().

00340 {
00341         int status = NC_NOERR;
00342         void *xp;
00343 
00344         assert(!NC_readonly(ncp));
00345         assert(!NC_indef(ncp));
00346 
00347         status = ncp->nciop->get(ncp->nciop,
00348                  NC_NUMRECS_OFFSET, NC_NUMRECS_EXTENT, RGN_WRITE, &xp);
00349         if(status != NC_NOERR)
00350                 return status;
00351 
00352         {
00353                 const size_t nrecs = NC_get_numrecs(ncp);
00354                 status = ncx_put_size_t(&xp, &nrecs);
00355         }
00356 
00357         (void) ncp->nciop->rel(ncp->nciop, NC_NUMRECS_OFFSET, RGN_MODIFIED);
00358 
00359         if(status == NC_NOERR)
00360                 fClr(ncp->flags, NC_NDIRTY);
00361 
00362         return status;
00363 }
 

Powered by Plone

This site conforms to the following standards: