mirror of
https://github.com/Unidata/netcdf-c.git
synced 2024-12-03 08:01:25 +08:00
223 lines
6.3 KiB
C
223 lines
6.3 KiB
C
|
#ifndef NCSTREAM_H
|
||
|
#define NCSTREAM_H
|
||
|
|
||
|
|
||
|
|
||
|
typedef enum DataType {
|
||
|
CHAR=0,
|
||
|
BYTE=1,
|
||
|
SHORT=2,
|
||
|
INT=3,
|
||
|
INT64=4,
|
||
|
FLOAT=5,
|
||
|
DOUBLE=6,
|
||
|
STRING=7,
|
||
|
STRUCTURE=8,
|
||
|
SEQUENCE=9,
|
||
|
ENUM1=10,
|
||
|
ENUM2=11,
|
||
|
ENUM4=12,
|
||
|
OPAQUE=13,
|
||
|
UBYTE=14,
|
||
|
USHORT=15,
|
||
|
UINT=16,
|
||
|
UINT64=17
|
||
|
} DataType;
|
||
|
|
||
|
|
||
|
typedef enum Compress {
|
||
|
NONE=0,
|
||
|
DEFLATE=1
|
||
|
} Compress;
|
||
|
|
||
|
/* Forward definitions */
|
||
|
typedef struct Attribute Attribute;
|
||
|
typedef struct Dimension Dimension;
|
||
|
typedef struct Variable Variable;
|
||
|
typedef struct Structure Structure;
|
||
|
typedef struct EnumTypedef EnumTypedef;
|
||
|
typedef struct EnumType EnumType;
|
||
|
typedef struct Group Group;
|
||
|
typedef struct Header Header;
|
||
|
typedef struct Data Data;
|
||
|
typedef struct Range Range;
|
||
|
typedef struct Section Section;
|
||
|
typedef struct StructureData StructureData;
|
||
|
typedef struct Error Error;
|
||
|
|
||
|
struct Attribute {
|
||
|
char* name;
|
||
|
DataType type;
|
||
|
uint32_t len;
|
||
|
struct {int defined; bytes_t value;} data;
|
||
|
struct {size_t count; char** values;} sdata;
|
||
|
};
|
||
|
|
||
|
|
||
|
extern ast_err Attribute_write(ast_runtime*,Attribute*);
|
||
|
extern ast_err Attribute_read(ast_runtime*,Attribute**);
|
||
|
extern ast_err Attribute_reclaim(ast_runtime*,Attribute*);
|
||
|
extern size_t Attribute_get_size(ast_runtime*,Attribute*);
|
||
|
|
||
|
struct Dimension {
|
||
|
struct {int defined; char* value;} name;
|
||
|
struct {int defined; uint64_t value;} length;
|
||
|
struct {int defined; bool_t value;} isUnlimited;
|
||
|
struct {int defined; bool_t value;} isVlen;
|
||
|
struct {int defined; bool_t value;} isPrivate;
|
||
|
};
|
||
|
|
||
|
|
||
|
extern ast_err Dimension_write(ast_runtime*,Dimension*);
|
||
|
extern ast_err Dimension_read(ast_runtime*,Dimension**);
|
||
|
extern ast_err Dimension_reclaim(ast_runtime*,Dimension*);
|
||
|
extern size_t Dimension_get_size(ast_runtime*,Dimension*);
|
||
|
|
||
|
struct Variable {
|
||
|
char* name;
|
||
|
DataType dataType;
|
||
|
struct {size_t count; Dimension** values;} shape;
|
||
|
struct {size_t count; Attribute** values;} atts;
|
||
|
struct {int defined; bool_t value;} unsigned_;
|
||
|
struct {int defined; bytes_t value;} data;
|
||
|
struct {int defined; char* value;} enumType;
|
||
|
struct {size_t count; uint32_t* values;} dimIndex;
|
||
|
};
|
||
|
|
||
|
|
||
|
extern ast_err Variable_write(ast_runtime*,Variable*);
|
||
|
extern ast_err Variable_read(ast_runtime*,Variable**);
|
||
|
extern ast_err Variable_reclaim(ast_runtime*,Variable*);
|
||
|
extern size_t Variable_get_size(ast_runtime*,Variable*);
|
||
|
|
||
|
struct Structure {
|
||
|
char* name;
|
||
|
DataType dataType;
|
||
|
struct {size_t count; Dimension** values;} shape;
|
||
|
struct {size_t count; Attribute** values;} atts;
|
||
|
struct {size_t count; Variable** values;} vars;
|
||
|
struct {size_t count; Structure** values;} structs;
|
||
|
};
|
||
|
|
||
|
|
||
|
extern ast_err Structure_write(ast_runtime*,Structure*);
|
||
|
extern ast_err Structure_read(ast_runtime*,Structure**);
|
||
|
extern ast_err Structure_reclaim(ast_runtime*,Structure*);
|
||
|
extern size_t Structure_get_size(ast_runtime*,Structure*);
|
||
|
|
||
|
struct EnumTypedef {
|
||
|
char* name;
|
||
|
struct {size_t count; EnumType** values;} map;
|
||
|
};
|
||
|
|
||
|
|
||
|
extern ast_err EnumTypedef_write(ast_runtime*,EnumTypedef*);
|
||
|
extern ast_err EnumTypedef_read(ast_runtime*,EnumTypedef**);
|
||
|
extern ast_err EnumTypedef_reclaim(ast_runtime*,EnumTypedef*);
|
||
|
extern size_t EnumTypedef_get_size(ast_runtime*,EnumTypedef*);
|
||
|
|
||
|
struct EnumType {
|
||
|
uint32_t code;
|
||
|
char* value;
|
||
|
};
|
||
|
|
||
|
|
||
|
extern ast_err EnumType_write(ast_runtime*,EnumType*);
|
||
|
extern ast_err EnumType_read(ast_runtime*,EnumType**);
|
||
|
extern ast_err EnumType_reclaim(ast_runtime*,EnumType*);
|
||
|
extern size_t EnumType_get_size(ast_runtime*,EnumType*);
|
||
|
|
||
|
struct Group {
|
||
|
char* name;
|
||
|
struct {size_t count; Dimension** values;} dims;
|
||
|
struct {size_t count; Variable** values;} vars;
|
||
|
struct {size_t count; Structure** values;} structs;
|
||
|
struct {size_t count; Attribute** values;} atts;
|
||
|
struct {size_t count; Group** values;} groups;
|
||
|
struct {size_t count; EnumTypedef** values;} enumTypes;
|
||
|
};
|
||
|
|
||
|
|
||
|
extern ast_err Group_write(ast_runtime*,Group*);
|
||
|
extern ast_err Group_read(ast_runtime*,Group**);
|
||
|
extern ast_err Group_reclaim(ast_runtime*,Group*);
|
||
|
extern size_t Group_get_size(ast_runtime*,Group*);
|
||
|
|
||
|
struct Header {
|
||
|
struct {int defined; char* value;} location;
|
||
|
struct {int defined; char* value;} title;
|
||
|
struct {int defined; char* value;} id;
|
||
|
Group* root;
|
||
|
struct {int defined; uint32_t value;} version;
|
||
|
};
|
||
|
|
||
|
|
||
|
extern ast_err Header_write(ast_runtime*,Header*);
|
||
|
extern ast_err Header_read(ast_runtime*,Header**);
|
||
|
extern ast_err Header_reclaim(ast_runtime*,Header*);
|
||
|
extern size_t Header_get_size(ast_runtime*,Header*);
|
||
|
|
||
|
struct Data {
|
||
|
char* varName;
|
||
|
DataType dataType;
|
||
|
struct {int defined; Section* value;} section;
|
||
|
struct {int defined; bool_t value;} bigend;
|
||
|
struct {int defined; uint32_t value;} version;
|
||
|
struct {int defined; Compress value;} compress;
|
||
|
struct {int defined; uint32_t value;} crc32;
|
||
|
};
|
||
|
|
||
|
|
||
|
extern ast_err Data_write(ast_runtime*,Data*);
|
||
|
extern ast_err Data_read(ast_runtime*,Data**);
|
||
|
extern ast_err Data_reclaim(ast_runtime*,Data*);
|
||
|
extern size_t Data_get_size(ast_runtime*,Data*);
|
||
|
|
||
|
struct Range {
|
||
|
struct {int defined; uint64_t value;} start;
|
||
|
uint64_t size;
|
||
|
struct {int defined; uint64_t value;} stride;
|
||
|
};
|
||
|
|
||
|
|
||
|
extern ast_err Range_write(ast_runtime*,Range*);
|
||
|
extern ast_err Range_read(ast_runtime*,Range**);
|
||
|
extern ast_err Range_reclaim(ast_runtime*,Range*);
|
||
|
extern size_t Range_get_size(ast_runtime*,Range*);
|
||
|
|
||
|
struct Section {
|
||
|
struct {size_t count; Range** values;} range;
|
||
|
};
|
||
|
|
||
|
|
||
|
extern ast_err Section_write(ast_runtime*,Section*);
|
||
|
extern ast_err Section_read(ast_runtime*,Section**);
|
||
|
extern ast_err Section_reclaim(ast_runtime*,Section*);
|
||
|
extern size_t Section_get_size(ast_runtime*,Section*);
|
||
|
|
||
|
struct StructureData {
|
||
|
struct {size_t count; uint32_t* values;} member;
|
||
|
bytes_t data;
|
||
|
struct {size_t count; uint32_t* values;} heapCount;
|
||
|
struct {size_t count; char** values;} sdata;
|
||
|
struct {int defined; uint64_t value;} nrows;
|
||
|
};
|
||
|
|
||
|
|
||
|
extern ast_err StructureData_write(ast_runtime*,StructureData*);
|
||
|
extern ast_err StructureData_read(ast_runtime*,StructureData**);
|
||
|
extern ast_err StructureData_reclaim(ast_runtime*,StructureData*);
|
||
|
extern size_t StructureData_get_size(ast_runtime*,StructureData*);
|
||
|
|
||
|
struct Error {
|
||
|
char* message;
|
||
|
};
|
||
|
|
||
|
|
||
|
extern ast_err Error_write(ast_runtime*,Error*);
|
||
|
extern ast_err Error_read(ast_runtime*,Error**);
|
||
|
extern ast_err Error_reclaim(ast_runtime*,Error*);
|
||
|
extern size_t Error_get_size(ast_runtime*,Error*);
|
||
|
|
||
|
#endif /*NCSTREAM_H*/
|