10 #ifndef __SERIALIZABLE_HDF5_FILE_H__
11 #define __SERIALIZABLE_HDF5_FILE_H__
21 #define TYPE_INDEX H5T_NATIVE_INT32
23 #define STR_IS_SGSERIALIZABLE "is_sgserializable"
24 #define STR_IS_SPARSE "is_sparse"
25 #define STR_IS_CONT "is_container"
26 #define STR_IS_NULL "is_null"
27 #define STR_INSTANCE_NAME "instance_name"
28 #define STR_GENERIC_NAME "generic_name"
29 #define STR_CTYPE_NAME "container_type"
30 #define STR_LENGTH_X "length_x"
31 #define STR_LENGTH_Y "length_y"
33 #define STR_GROUP_PREFIX "$"
35 #define STR_SPARSE_VINDEX "vec_index"
36 #define STR_SPARSE_FPTR "features_ptr"
37 #define STR_SPARSEENTRY_FINDEX "feat_index"
38 #define STR_SPARSEENTRY_ENTRY "entry"
42 #define IGNORE_IN_CLASSLIST
44 :
public CSerializableFile
46 friend class SerializableHdf5Reader00;
49 explicit type_item_t(
const char* name_);
54 hid_t dspace, dtype, dset;
57 SGSparseVectorEntry<char>* sparse_ptr;
61 DynArray<type_item_t*> m_stack_type;
62 DynArray<hid_t> m_stack_h5stream;
64 static hid_t sizeof_sparsetype();
65 static hid_t new_sparsetype();
66 static hobj_ref_t* get_ref_sparstype(
void* sparse_buf);
67 static hid_t new_sparseentrytype(EPrimitiveType ptype);
68 static hid_t ptype2hdf5(EPrimitiveType ptype);
69 static hid_t new_stype2hdf5(EStructType stype,
70 EPrimitiveType ptype);
71 static bool isequal_stype2hdf5(EStructType stype,
72 EPrimitiveType ptype, hid_t htype);
73 static bool index2string(
char* dest,
size_t n, EContainerType ctype,
76 void init(
const char* fname);
79 bool attr_write_scalar(hid_t datatype,
const char* name,
81 bool attr_write_string(
const char* name,
const char* val);
82 bool attr_exists(
const char* name);
83 size_t attr_get_size(
const char* name);
84 bool attr_read_scalar(hid_t datatype,
const char* name,
void* val);
85 bool attr_read_string(
const char* name,
char* val,
size_t n);
87 bool group_create(
const char* name,
const char* prefix);
88 bool group_open(
const char* name,
const char* prefix);
92 virtual TSerializableReader* new_reader(
93 char* dest_version,
size_t n);
95 virtual bool write_scalar_wrapped(
96 const TSGDataType* type,
const void* param);
98 virtual bool write_cont_begin_wrapped(
99 const TSGDataType* type,
index_t len_real_y,
101 virtual bool write_cont_end_wrapped(
102 const TSGDataType* type,
index_t len_real_y,
105 virtual bool write_string_begin_wrapped(
106 const TSGDataType* type,
index_t length);
107 virtual bool write_string_end_wrapped(
108 const TSGDataType* type,
index_t length);
110 virtual bool write_stringentry_begin_wrapped(
111 const TSGDataType* type,
index_t y);
112 virtual bool write_stringentry_end_wrapped(
113 const TSGDataType* type,
index_t y);
115 virtual bool write_sparse_begin_wrapped(
116 const TSGDataType* type,
index_t vec_index,
118 virtual bool write_sparse_end_wrapped(
119 const TSGDataType* type,
index_t vec_index,
122 virtual bool write_sparseentry_begin_wrapped(
123 const TSGDataType* type,
const SGSparseVectorEntry<char>* first_entry,
125 virtual bool write_sparseentry_end_wrapped(
126 const TSGDataType* type,
const SGSparseVectorEntry<char>* first_entry,
129 virtual bool write_item_begin_wrapped(
131 virtual bool write_item_end_wrapped(
134 virtual bool write_sgserializable_begin_wrapped(
135 const TSGDataType* type,
const char* sgserializable_name,
136 EPrimitiveType
generic);
137 virtual bool write_sgserializable_end_wrapped(
138 const TSGDataType* type,
const char* sgserializable_name,
139 EPrimitiveType
generic);
141 virtual bool write_type_begin_wrapped(
142 const TSGDataType* type,
const char* name,
144 virtual bool write_type_end_wrapped(
145 const TSGDataType* type,
const char* name,
150 explicit CSerializableHdf5File();
157 explicit CSerializableHdf5File(
const char* fname,
char rw=
'r');
160 virtual ~CSerializableHdf5File();
163 inline virtual const char* get_name()
const {
164 return "SerializableHdf5File";
167 virtual void close();
168 virtual bool is_opened();