netcdf-c/include/ncio.h

148 lines
3.3 KiB
C
Raw Normal View History

2010-06-03 21:24:43 +08:00
/*
* Copyright 1996, University Corporation for Atmospheric Research
* See netcdf/COPYRIGHT file for copying and redistribution conditions.
*/
/* $Id: ncio.h,v 1.27 2006/01/03 04:56:28 russ Exp $ */
#ifndef _NCIO_H_
#define _NCIO_H_
#include <stddef.h> /* size_t */
#include <sys/types.h> /* off_t */
#include "netcdf.h"
typedef struct ncio ncio; /* forward reference */
/*
* A value which is an invalid off_t
*/
#define OFF_NONE ((off_t)(-1))
/*
* Flags used by the region layer,
* 'rflags' argument to ncio.rel() and ncio.get().
*/
#define RGN_NOLOCK 0x1 /* Don't lock region.
* Used when contention control handled
* elsewhere.
*/
#define RGN_NOWAIT 0x2 /* return immediate if can't lock, else wait */
#define RGN_WRITE 0x4 /* we intend to modify, else read only */
#define RGN_MODIFIED 0x8 /* we did modify, else, discard */
/*
* The next four typedefs define the signatures
* of function pointers in struct ncio below.
* They are not used outside of this file and ncio.h,
* They just make some casts in the ncio.c more readable.
*/
/*
* Indicate that you are done with the region which begins
* at offset. Only reasonable flag value is RGN_MODIFIED.
*/
typedef int ncio_relfunc(ncio *const nciop,
off_t offset, int rflags);
/*
* Request that the region (offset, extent)
* be made available through *vpp.
*/
typedef int ncio_getfunc(ncio *const nciop,
off_t offset, size_t extent,
int rflags,
void **const vpp);
/*
* Like memmove(), safely move possibly overlapping data.
* Only reasonable flag value is RGN_NOLOCK.
*/
typedef int ncio_movefunc(ncio *const nciop, off_t to, off_t from,
size_t nbytes, int rflags);
/*
* Write out any dirty buffers to disk and
* ensure that next read will get data from disk.
*/
typedef int ncio_syncfunc(ncio *const nciop);
/*
* Don't call this.
* Internal function called at close to
* free up anything hanging off pvt;
*/
typedef void ncio_freefunc(void *const pvt);
/* Get around cplusplus "const xxx in class ncio without constructor" error */
#if defined(__cplusplus)
#define NCIO_CONST
#else
#define NCIO_CONST const
#endif
/*
* netcdf i/o abstraction
*/
struct ncio {
/*
* A copy of the ioflags argument passed in to ncio_open()
* or ncio_create().
*/
int ioflags;
/*
* The file descriptor of the netcdf file.
* This gets handed to the user as the netcdf id.
*/
NCIO_CONST int fd;
/* member functions do the work */
ncio_relfunc *NCIO_CONST rel;
ncio_getfunc *NCIO_CONST get;
ncio_movefunc *NCIO_CONST move;
ncio_syncfunc *NCIO_CONST sync;
ncio_freefunc *NCIO_CONST free; /* Implementation private */
/*
* A copy of the 'path' argument passed in to ncio_open()
* or ncio_create(). Used by ncabort() to remove (unlink)
* the file and by error messages.
*/
const char *path;
/* implementation private stuff */
void *NCIO_CONST pvt;
};
#undef NCIO_CONST
extern int
ncio_create(const char *path, int ioflags,
size_t initialsz,
off_t igeto, size_t igetsz, size_t *sizehintp,
ncio **nciopp, void **const igetvpp);
extern int
ncio_open(const char *path,
int ioflags,
off_t igeto, size_t igetsz, size_t *sizehintp,
ncio **nciopp, void **const igetvpp);
extern int
ncio_close(ncio *nciop, int doUnlink);
extern int
ncio_filesize(ncio *nciop, off_t *filesizep);
extern int
ncio_pad_length(ncio *nciop, off_t length);
#endif /* _NCIO_H_ */