awips2/pythonPackages/scientific/Include/Scientific/netcdfmodule.h
root 8e80217e59 Initial revision of AWIPS2 11.9.0-7p5
Former-commit-id: a02aeb236c [formerly 9f19e3f712] [formerly 06a8b51d6d [formerly 64fa9254b946eae7e61bbc3f513b7c3696c4f54f]]
Former-commit-id: 06a8b51d6d
Former-commit-id: 3360eb6c5f
2012-01-06 08:55:05 -06:00

354 lines
13 KiB
C
Executable file

#ifndef Py_NETCDFMODULE_H
#define Py_NETCDFMODULE_H
#ifdef __cplusplus
extern "C" {
#endif
/*
* Include file for netCDF files and variables.
*
* Written by Konrad Hinsen
* last revision: 2006-11-25
*/
#include <stdio.h>
#if PY_VERSION_HEX < 0x02050000
#if !defined(PY_SSIZE_T_COMPATIBILITY)
#define PY_SSIZE_T_COMPATIBILITY
#if !defined(NUMPY)
typedef int Py_ssize_t;
#endif
#define PY_SSIZE_T_MAX INT_MAX
#define PY_SSIZE_T_MIN INT_MIN
typedef Py_ssize_t (*lenfunc)(PyObject *);
typedef PyObject *(*ssizeargfunc)(PyObject *, Py_ssize_t);
typedef PyObject *(*ssizessizeargfunc)(PyObject *, Py_ssize_t, Py_ssize_t);
typedef int(*ssizeobjargproc)(PyObject *, Py_ssize_t, PyObject *);
typedef int(*ssizessizeobjargproc)(PyObject *, Py_ssize_t, Py_ssize_t, PyObject *);
typedef Py_ssize_t (*readbufferproc)(PyObject *, Py_ssize_t, void **);
typedef Py_ssize_t (*writebufferproc)(PyObject *, Py_ssize_t, void **);
typedef Py_ssize_t (*segcountproc)(PyObject *, Py_ssize_t *);
typedef Py_ssize_t (*charbufferproc)(PyObject *, Py_ssize_t, char **);
#endif
#endif
/* NetCDFFile object */
typedef struct {
PyObject_HEAD
PyObject *dimensions; /* dictionary */
PyObject *variables; /* dictionary */
PyObject *attributes; /* dictionary */
PyObject *name; /* string */
PyObject *mode; /* string */
int id;
char open;
char define;
char write;
int recdim;
} PyNetCDFFileObject;
/* NetCDFVariable object */
typedef struct {
PyObject_HEAD
PyNetCDFFileObject *file;
PyObject *attributes; /* dictionary */
char *name;
int *dimids;
size_t *dimensions;
int type; /* same as array types */
int nd;
int id;
char unlimited;
} PyNetCDFVariableObject;
/* Variable index structure */
typedef struct {
Py_ssize_t start;
Py_ssize_t stop;
Py_ssize_t stride;
Py_ssize_t item;
} PyNetCDFIndex;
/*
* C API functions
*/
/* Type definitions */
#define PyNetCDFFile_Type_NUM 0
#define PyNetCDFVariable_Type_NUM 1
/* Open a netCDF file (i.e. create a new file object) */
#define PyNetCDFFile_Open_RET PyNetCDFFileObject *
#define PyNetCDFFile_Open_PROTO Py_PROTO((char *filename, char *mode))
#define PyNetCDFFile_Open_NUM 2
/* Close a netCDF file. Returns -1 if there was an error. */
#define PyNetCDFFile_Close_RET int
#define PyNetCDFFile_Close_PROTO Py_PROTO((PyNetCDFFileObject *file))
#define PyNetCDFFile_Close_NUM 3
/* Ensure that all data is written to the disk file.
Returns 0 if there was an error. */
#define PyNetCDFFile_Sync_RET int
#define PyNetCDFFile_Sync_PROTO Py_PROTO((PyNetCDFFileObject *file))
#define PyNetCDFFile_Sync_NUM 4
/* Create a new dimension. Returns -1 if there was an error. */
#define PyNetCDFFile_CreateDimension_RET int
#define PyNetCDFFile_CreateDimension_PROTO \
Py_PROTO((PyNetCDFFileObject *file, char *name, long size))
#define PyNetCDFFile_CreateDimension_NUM 5
/* Create a netCDF variable and return the variable object */
#define PyNetCDFFile_CreateVariable_RET PyNetCDFVariableObject *
#define PyNetCDFFile_CreateVariable_PROTO \
Py_PROTO((PyNetCDFFileObject *file, char *name, int typecode, \
char **dimension_names, int ndim))
#define PyNetCDFFile_CreateVariable_NUM 6
/* Return an object referring to an existing variable */
#define PyNetCDFFile_GetVariable_RET PyNetCDFVariableObject *
#define PyNetCDFFile_GetVariable_PROTO \
Py_PROTO((PyNetCDFFileObject *file, char *name))
#define PyNetCDFFile_GetVariable_NUM 7
/* Get variable rank */
#define PyNetCDFVariable_GetRank_RET int
#define PyNetCDFVariable_GetRank_PROTO Py_PROTO((PyNetCDFVariableObject *var))
#define PyNetCDFVariable_GetRank_NUM 8
/* Get variable shape */
#define PyNetCDFVariable_GetShape_RET size_t *
#define PyNetCDFVariable_GetShape_PROTO Py_PROTO((PyNetCDFVariableObject *var))
#define PyNetCDFVariable_GetShape_NUM 9
/* Allocate and initialize index structures for reading/writing data */
#define PyNetCDFVariable_Indices_RET PyNetCDFIndex *
#define PyNetCDFVariable_Indices_PROTO Py_PROTO((PyNetCDFVariableObject *var))
#define PyNetCDFVariable_Indices_NUM 10
/* Read data and return an array object */
#define PyNetCDFVariable_ReadAsArray_RET PyArrayObject *
#define PyNetCDFVariable_ReadAsArray_PROTO \
Py_PROTO((PyNetCDFVariableObject *var, PyNetCDFIndex *indices))
#define PyNetCDFVariable_ReadAsArray_NUM 11
/* Write array. Returns -1 if there was an error. */
#define PyNetCDFVariable_WriteArray_RET int
#define PyNetCDFVariable_WriteArray_PROTO \
Py_PROTO((PyNetCDFVariableObject *var, PyNetCDFIndex *indices, \
PyObject *array))
#define PyNetCDFVariable_WriteArray_NUM 12
/* Get file attribute */
#define PyNetCDFFile_GetAttribute_RET PyObject *
#define PyNetCDFFile_GetAttribute_PROTO \
Py_PROTO((PyNetCDFFileObject *var, char *name))
#define PyNetCDFFile_GetAttribute_NUM 13
/* Set file attribute */
#define PyNetCDFFile_SetAttribute_RET int
#define PyNetCDFFile_SetAttribute_PROTO \
Py_PROTO((PyNetCDFFileObject *var, char *name, PyObject *value))
#define PyNetCDFFile_SetAttribute_NUM 14
/* Set file attribute to string value */
#define PyNetCDFFile_SetAttributeString_RET int
#define PyNetCDFFile_SetAttributeString_PROTO \
Py_PROTO((PyNetCDFFileObject *var, char *name, char *value))
#define PyNetCDFFile_SetAttributeString_NUM 15
/* Get variable attribute */
#define PyNetCDFVariable_GetAttribute_RET PyObject *
#define PyNetCDFVariable_GetAttribute_PROTO \
Py_PROTO((PyNetCDFVariableObject *var, char *name))
#define PyNetCDFVariable_GetAttribute_NUM 16
/* Set variable attribute */
#define PyNetCDFVariable_SetAttribute_RET int
#define PyNetCDFVariable_SetAttribute_PROTO \
Py_PROTO((PyNetCDFVariableObject *var, char *name, PyObject *value))
#define PyNetCDFVariable_SetAttribute_NUM 17
/* Set variable attribute to string value */
#define PyNetCDFVariable_SetAttributeString_RET int
#define PyNetCDFVariable_SetAttributeString_PROTO \
Py_PROTO((PyNetCDFVariableObject *var, char *name, char *value))
#define PyNetCDFVariable_SetAttributeString_NUM 18
/* Add entry to the history */
#define PyNetCDFFile_AddHistoryLine_RET int
#define PyNetCDFFile_AddHistoryLine_PROTO \
Py_PROTO((PyNetCDFFileObject *self, char *text))
#define PyNetCDFFile_AddHistoryLine_NUM 19
/* Write string. Returns -1 if there was an error. */
#define PyNetCDFVariable_WriteString_RET int
#define PyNetCDFVariable_WriteString_PROTO \
Py_PROTO((PyNetCDFVariableObject *var, PyStringObject *value))
#define PyNetCDFVariable_WriteString_NUM 20
/* Read string */
#define PyNetCDFVariable_ReadAsString_RET PyStringObject *
#define PyNetCDFVariable_ReadAsString_PROTO \
Py_PROTO((PyNetCDFVariableObject *var))
#define PyNetCDFVariable_ReadAsString_NUM 21
/* Total number of C API pointers */
#define PyNetCDF_API_pointers 22
#ifdef _NETCDF_MODULE
/* Type object declarations */
staticforward PyTypeObject PyNetCDFFile_Type;
staticforward PyTypeObject PyNetCDFVariable_Type;
/* Type check macros */
#define PyNetCDFFile_Check(op) ((op)->ob_type == &PyNetCDFFile_Type)
#define PyNetCDFVariable_Check(op) ((op)->ob_type == &PyNetCDFVariable_Type)
/* C API function declarations */
static PyNetCDFFile_Open_RET PyNetCDFFile_Open PyNetCDFFile_Open_PROTO;
static PyNetCDFFile_Close_RET PyNetCDFFile_Close PyNetCDFFile_Close_PROTO;
static PyNetCDFFile_Sync_RET PyNetCDFFile_Sync PyNetCDFFile_Sync_PROTO;
static PyNetCDFFile_CreateDimension_RET PyNetCDFFile_CreateDimension \
PyNetCDFFile_CreateDimension_PROTO;
static PyNetCDFFile_CreateVariable_RET PyNetCDFFile_CreateVariable \
PyNetCDFFile_CreateVariable_PROTO;
static PyNetCDFFile_GetVariable_RET PyNetCDFFile_GetVariable \
PyNetCDFFile_GetVariable_PROTO;
static PyNetCDFVariable_GetRank_RET PyNetCDFVariable_GetRank \
PyNetCDFVariable_GetRank_PROTO;
static PyNetCDFVariable_GetShape_RET PyNetCDFVariable_GetShape \
PyNetCDFVariable_GetShape_PROTO;
static PyNetCDFVariable_Indices_RET PyNetCDFVariable_Indices \
PyNetCDFVariable_Indices_PROTO;
static PyNetCDFVariable_ReadAsArray_RET PyNetCDFVariable_ReadAsArray \
PyNetCDFVariable_ReadAsArray_PROTO;
static PyNetCDFVariable_ReadAsString_RET PyNetCDFVariable_ReadAsString \
PyNetCDFVariable_ReadAsString_PROTO;
static PyNetCDFVariable_WriteArray_RET PyNetCDFVariable_WriteArray \
PyNetCDFVariable_WriteArray_PROTO;
static PyNetCDFVariable_WriteString_RET PyNetCDFVariable_WriteString \
PyNetCDFVariable_WriteString_PROTO;
static PyNetCDFFile_GetAttribute_RET PyNetCDFFile_GetAttribute \
PyNetCDFFile_GetAttribute_PROTO;
static PyNetCDFFile_SetAttribute_RET PyNetCDFFile_SetAttribute \
PyNetCDFFile_SetAttribute_PROTO;
static PyNetCDFFile_SetAttributeString_RET PyNetCDFFile_SetAttributeString \
PyNetCDFFile_SetAttributeString_PROTO;
static PyNetCDFVariable_GetAttribute_RET PyNetCDFVariable_GetAttribute \
PyNetCDFVariable_GetAttribute_PROTO;
static PyNetCDFVariable_SetAttribute_RET PyNetCDFVariable_SetAttribute \
PyNetCDFVariable_SetAttribute_PROTO;
static PyNetCDFVariable_SetAttributeString_RET \
PyNetCDFVariable_SetAttributeString \
PyNetCDFVariable_SetAttributeString_PROTO;
static PyNetCDFFile_AddHistoryLine_RET PyNetCDFFile_AddHistoryLine \
PyNetCDFFile_AddHistoryLine_PROTO;
#else
/* C API address pointer */
static void **PyNetCDF_API;
/* Type check macros */
#define PyNetCDFFile_Check(op) \
((op)->ob_type == (PyTypeObject *)PyNetCDF_API[PyNetCDFFile_Type_NUM])
#define PyNetCDFVariable_Check(op) \
((op)->ob_type == (PyTypeObject *)PyNetCDF_API[PyNetCDFVariable_Type_NUM])
/* C API function declarations */
#define PyNetCDFFile_Open \
(*(PyNetCDFFile_Open_RET (*)PyNetCDFFile_Open_PROTO) \
PyNetCDF_API[PyNetCDFFile_Open_NUM])
#define PyNetCDFFile_Close \
(*(PyNetCDFFile_Close_RET (*)PyNetCDFFile_Close_PROTO) \
PyNetCDF_API[PyNetCDFFile_Close_NUM])
#define PyNetCDFFile_Sync \
(*(PyNetCDFFile_Sync_RET (*)PyNetCDFFile_Sync_PROTO) \
PyNetCDF_API[PyNetCDFFile_Sync_NUM])
#define PyNetCDFFile_CreateDimension \
(*(PyNetCDFFile_CreateDimension_RET (*)PyNetCDFFile_CreateDimension_PROTO) \
PyNetCDF_API[PyNetCDFFile_CreateDimension_NUM])
#define PyNetCDFFile_CreateVariable \
(*(PyNetCDFFile_CreateVariable_RET (*)PyNetCDFFile_CreateVariable_PROTO) \
PyNetCDF_API[PyNetCDFFile_CreateVariable_NUM])
#define PyNetCDFFile_GetVariable \
(*(PyNetCDFFile_GetVariable_RET (*)PyNetCDFFile_GetVariable_PROTO) \
PyNetCDF_API[PyNetCDFFile_GetVariable_NUM])
#define PyNetCDFVariable_GetRank \
(*(PyNetCDFVariable_GetRank_RET (*)PyNetCDFVariable_GetRank_PROTO) \
PyNetCDF_API[PyNetCDFVariable_GetRank_NUM])
#define PyNetCDFVariable_GetShape \
(*(PyNetCDFVariable_GetShape_RET (*)PyNetCDFVariable_GetShape_PROTO) \
PyNetCDF_API[PyNetCDFVariable_GetShape_NUM])
#define PyNetCDFVariable_Indices \
(*(PyNetCDFVariable_Indices_RET (*)PyNetCDFVariable_Indices_PROTO) \
PyNetCDF_API[PyNetCDFVariable_Indices_NUM])
#define PyNetCDFVariable_ReadAsArray \
(*(PyNetCDFVariable_ReadAsArray_RET (*)PyNetCDFVariable_ReadAsArray_PROTO) \
PyNetCDF_API[PyNetCDFVariable_ReadAsArray_NUM])
#define PyNetCDFVariable_ReadAsString \
(*(PyNetCDFVariable_ReadAsString_RET (*)PyNetCDFVariable_ReadAsString_PROTO) \
PyNetCDF_API[PyNetCDFVariable_ReadAsString_NUM])
#define PyNetCDFVariable_WriteArray \
(*(PyNetCDFVariable_WriteArray_RET (*)PyNetCDFVariable_WriteArray_PROTO) \
PyNetCDF_API[PyNetCDFVariable_WriteArray_NUM])
#define PyNetCDFVariable_WriteString \
(*(PyNetCDFVariable_WriteString_RET (*)PyNetCDFVariable_WriteString_PROTO) \
PyNetCDF_API[PyNetCDFVariable_WriteString_NUM])
#define PyNetCDFFile_GetAttribute \
(*(PyNetCDFFile_GetAttribute_RET (*)PyNetCDFFile_GetAttribute_PROTO) \
PyNetCDF_API[PyNetCDFFile_GetAttribute_NUM])
#define PyNetCDFFile_SetAttribute \
(*(PyNetCDFFile_SetAttribute_RET (*)PyNetCDFFile_SetAttribute_PROTO) \
PyNetCDF_API[PyNetCDFFile_SetAttribute_NUM])
#define PyNetCDFFile_SetAttributeString \
(*(PyNetCDFFile_SetAttributeString_RET \
(*)PyNetCDFFile_SetAttributeString_PROTO) \
PyNetCDF_API[PyNetCDFFile_SetAttributeString_NUM])
#define PyNetCDFVariable_GetAttribute \
(*(PyNetCDFVariable_GetAttribute_RET (*)PyNetCDFVariable_GetAttribute_PROTO) \
PyNetCDF_API[PyNetCDFVariable_GetAttribute_NUM])
#define PyNetCDFVariable_SetAttribute \
(*(PyNetCDFVariable_SetAttribute_RET (*)PyNetCDFVariable_SetAttribute_PROTO) \
PyNetCDF_API[PyNetCDFVariable_SetAttribute_NUM])
#define PyNetCDFVariable_SetAttributeString \
(*(PyNetCDFVariable_SetAttributeString_RET \
(*)PyNetCDFVariable_SetAttributeString_PROTO) \
PyNetCDF_API[PyNetCDFVariable_SetAttributeString_NUM])
#define PyNetCDFFile_AddHistoryLine \
(*(PyNetCDFFile_AddHistoryLine_RET \
(*)PyNetCDFFile_AddHistoryLine_PROTO) \
PyNetCDF_API[PyNetCDFFile_AddHistoryLine_NUM])
#define import_netcdf() \
{ \
PyObject *module = PyImport_ImportModule("Scientific.IO.NetCDF"); \
if (module != NULL) { \
PyObject *module_dict = PyModule_GetDict(module); \
PyObject *c_api_object = PyDict_GetItemString(module_dict, "_C_API"); \
if (PyCObject_Check(c_api_object)) { \
PyNetCDF_API = (void **)PyCObject_AsVoidPtr(c_api_object); \
} \
} \
}
#endif
#ifdef __cplusplus
}
#endif
#endif /* Py_NETCDFMODULE_H */