00001 #ifndef _WINC_CDF
00002 #define _WINC_CDF
00003
00004 #include "netcdf.h"
00005
00006 #include <WXP/IntArray.h>
00007
00008 namespace WXP {
00009 class Cdf {
00010 int fd;
00011 int shape[10];
00012 size_t start[10];
00013 size_t count[10];
00014 char str[1000];
00015 int ndim;
00016 bool opened;
00017
00018 public:
00019 int init();
00020 Cdf();
00021 Cdf( const char *filename, int access );
00022 Cdf( const char *filename );
00023 int setFD( int val );
00024 int printErrors( int val );
00025 int open( const char *filename, int access );
00026 int open( const char *filename );
00027 int defDim( const char *name, int size );
00028 int defUnlimitDim( const char *name );
00029 int endDef();
00030 int close();
00031 int getNumDim();
00032 int getNumVar();
00033 int getNumAttr();
00034 int getUnlimitDim();
00035 int getDim( const char *name );
00036 const char *getDimName( int dim );
00037 int getDimSize( int dim );
00038 int setShape( int num, ... );
00039 int defVar( const char *name, int type, int ndims, ... );
00040 int defVar( const char *name, int type, IntArray & dims );
00041 int defFloatVar( const char *name );
00042 int defIntVar( const char *name );
00043 int defShortVar( const char *name );
00044 int defByteVar( const char *name );
00045 int defCharVar( const char *name );
00046 int getVar( const char *name );
00047 const char *getVarName( int var );
00048
00049 int putGlobAttr( const char *name, const char *value );
00050 const char *getGlobAttr( const char *name );
00051 const char *getGlobAttrName( int ind );
00052 int putBaseAttr( int id, const char *long_name, const char *units );
00053 int putRangeAttr( int id, float min, float max );
00054 int putRangeAttr( int id, int min, int max );
00055 int putFillAttr( int id );
00056 int putFillAttr( int id, int val );
00057 int getNumVarAttr( int var );
00058 const char *getAttr( int var, const char *name );
00059 const char *getAttrName( int var, int ind );
00060 int getNumVarDims( int var );
00061 int getVarDims( int var, IntArray &dims );
00062 int getVarType( int var );
00063
00064 int setPos( int num, ... );
00065 int setPos( IntArray &st );
00066 int setRange( int num, ... );
00067 int setRange( IntArray &st, IntArray &cnt );
00068 int put( int var, IntArray &st, const char *str );
00069 int putStr( int var, const char *str );
00070 int put( int var, float value );
00071 int put( int var, float *array );
00072 int put( int var, int value );
00073 int put( int var, short value );
00074 int put( int var, char value );
00075 int put( int var, const char *array );
00076 const char *get( int var, IntArray &st );
00077 int getStr( int var, int len, char *str );
00078 float getFloat( int var );
00079 int getFloatArray( int var, float *array );
00080 double getDouble( int var );
00081 int getDoubleArray( int var, double *array );
00082 char getChar( int var );
00083 int getInt( int var );
00084 char getByte( int var );
00085 int getByteArray( int var, char *array );
00086
00087 enum Type {
00088 CHAR,
00089 BYTE,
00090 SHORT,
00091 INT,
00092 FLOAT,
00093 DOUBLE
00094 };
00095
00096 };
00097 }
00098 #endif