18 SerializableHdf5Reader00::SerializableHdf5Reader00(
19 CSerializableHdf5File* file) { m_file = file; }
21 SerializableHdf5Reader00::~SerializableHdf5Reader00() {}
24 SerializableHdf5Reader00::read_scalar_wrapped(
30 CSerializableHdf5File::type_item_t* m
31 = m_file->m_stack_type.back();
35 if (m->y != 0 || m->x != 0)
return true;
38 if (m->y == -1 || m->x == -1)
break;
40 if (m->sub_y != 0)
return true;
43 memcpy(param, m->vltype[m->x*m->dims[1] + m->y].p,
44 m->vltype[m->x*m->dims[1] + m->y].len
49 if (m->sub_y != 0)
return true;
56 if ((mem_type_id = CSerializableHdf5File::new_stype2hdf5(
61 if (H5Dread(m->dset, mem_type_id, H5S_ALL, H5S_ALL,
62 H5P_DEFAULT, param) < 0)
return false;
65 if (H5Dread(m->dset, mem_type_id, H5S_ALL, H5S_ALL,
66 H5P_DEFAULT, m->vltype) < 0)
return false;
69 if (H5Dread(m->dset, m->dtype, H5S_ALL, H5S_ALL,
70 H5P_DEFAULT, m->sparse_ptr) < 0)
return false;
76 if (H5Tclose(mem_type_id) < 0)
return false;
82 SerializableHdf5Reader00::read_cont_begin_wrapped(
85 CSerializableHdf5File::type_item_t* m
86 = m_file->m_stack_type.back();
88 if (type->
m_ptype != PT_SGOBJECT) {
93 SG_ERROR(
"read_cont_begin_wrapped(): Implementation error"
94 " during writing Hdf5File (0)!");
96 case CT_VECTOR:
case CT_SGVECTOR: *len_read_y = m->dims[0];
break;
97 case CT_MATRIX:
case CT_SGMATRIX:
98 *len_read_x = m->dims[0]; *len_read_y = m->dims[1];
100 default:
return false;
106 if (!m_file->attr_exists(STR_IS_CONT))
return false;
110 if (!m_file->attr_read_string(STR_CTYPE_NAME, buf,
STRING_LEN))
112 if (strcmp(ctype_buf, buf) != 0)
return false;
118 SG_ERROR(
"read_cont_begin_wrapped(): Implementation error"
119 " during writing Hdf5File (1)!");
121 case CT_MATRIX:
case CT_SGMATRIX:
122 if (!m_file->attr_read_scalar(TYPE_INDEX, STR_LENGTH_X,
126 case CT_VECTOR:
case CT_SGVECTOR:
127 if (!m_file->attr_read_scalar(TYPE_INDEX, STR_LENGTH_Y,
131 default:
return false;
138 SerializableHdf5Reader00::read_cont_end_wrapped(
145 SerializableHdf5Reader00::read_string_begin_wrapped(
148 CSerializableHdf5File::type_item_t* m
149 = m_file->m_stack_type.back();
151 if (m->y == 0 && m->x == 0) {
152 m->y = -1; m->x = -1;
153 read_scalar_wrapped(type, NULL);
157 *length = m->vltype[m->x*m->dims[1] + m->y].len;
163 SerializableHdf5Reader00::read_string_end_wrapped(
170 SerializableHdf5Reader00::read_stringentry_begin_wrapped(
173 CSerializableHdf5File::type_item_t* m
174 = m_file->m_stack_type.back();
182 SerializableHdf5Reader00::read_stringentry_end_wrapped(
189 SerializableHdf5Reader00::read_sparse_begin_wrapped(
192 CSerializableHdf5File::type_item_t* m_prev
193 = m_file->m_stack_type.back();
195 if(!m_file->dspace_select(type->
m_ctype, m_prev->y, m_prev->x))
198 CSerializableHdf5File::type_item_t* m =
new CSerializableHdf5File
199 ::type_item_t(m_prev->name);
200 m_file->m_stack_type.push_back(m);
204 if (!m_file->group_open(m->name, STR_GROUP_PREFIX))
return false;
205 if (!m_file->attr_exists(STR_IS_SPARSE))
return false;
208 CSerializableHdf5File::index2string(
210 if ((m->dset = H5Dopen2(m_file->m_stack_h5stream.back(), name,
214 if ((m->dtype = H5Dget_type(m->dset)) < 0)
return false;
215 if (!CSerializableHdf5File::isequal_stype2hdf5(
218 if ((m->dspace = H5Dget_space(m->dset)) < 0)
return false;
219 if (H5Sget_simple_extent_ndims(m->dspace) != 1)
return false;
222 if ((m->rank = H5Sget_simple_extent_dims(m->dspace, m->dims, NULL)
225 if (H5Sget_simple_extent_type(m->dspace) != H5S_NULL
226 && m->rank != 1)
return false;
228 *length = m->dims[0];
232 char* buf = SG_MALLOC(
char, CSerializableHdf5File::sizeof_sparsetype());
235 if ((mem_type_id = CSerializableHdf5File::new_sparsetype()) < 0)
239 if ((mem_space_id = H5Screate_simple(0, NULL, NULL)) < 0)
242 if (H5Dread(m_prev->dset, mem_type_id, mem_space_id,
243 m_prev->dspace, H5P_DEFAULT, buf) < 0)
return false;
245 if (H5Sclose(mem_space_id) < 0)
return false;
246 if (H5Tclose(mem_type_id) < 0)
return false;
254 SerializableHdf5Reader00::read_sparse_end_wrapped(
257 if (!m_file->group_close())
return false;
259 delete m_file->m_stack_type.back();
260 m_file->m_stack_type.pop_back();
266 SerializableHdf5Reader00::read_sparseentry_begin_wrapped(
270 CSerializableHdf5File::type_item_t* m
271 = m_file->m_stack_type.back();
273 m->sparse_ptr = first_entry;
280 SerializableHdf5Reader00::read_sparseentry_end_wrapped(
288 SerializableHdf5Reader00::read_item_begin_wrapped(
291 CSerializableHdf5File::type_item_t* m
292 = m_file->m_stack_type.back();
295 if (type->
m_ptype != PT_SGOBJECT)
return true;
298 if (!CSerializableHdf5File::index2string(
300 if (!m_file->group_open(name,
""))
return false;
306 SerializableHdf5Reader00::read_item_end_wrapped(
309 if (type->
m_ptype == PT_SGOBJECT)
310 if (!m_file->group_close())
return false;
316 SerializableHdf5Reader00::read_sgserializable_begin_wrapped(
317 const TSGDataType* type,
char* sgserializable_name,
318 EPrimitiveType*
generic)
320 if (!m_file->attr_exists(STR_IS_SGSERIALIZABLE))
return false;
322 if (m_file->attr_exists(STR_IS_NULL)) {
323 *sgserializable_name =
'\0';
return true;
326 if (!m_file->attr_read_string(
327 STR_INSTANCE_NAME, sgserializable_name,
STRING_LEN))
330 if (m_file->attr_exists(STR_GENERIC_NAME)) {
332 if (!m_file->attr_read_string(
333 STR_GENERIC_NAME, buf,
STRING_LEN))
return false;
342 SerializableHdf5Reader00::read_sgserializable_end_wrapped(
343 const TSGDataType* type,
const char* sgserializable_name,
344 EPrimitiveType
generic)
350 SerializableHdf5Reader00::read_type_begin_wrapped(
351 const TSGDataType* type,
const char* name,
const char* prefix)
353 CSerializableHdf5File::type_item_t* m =
new CSerializableHdf5File
355 m_file->m_stack_type.push_back(m);
357 if (type->
m_ptype == PT_SGOBJECT) {
358 if (!m_file->group_open(name,
""))
return false;
362 if ((m->dset = H5Dopen2(m_file->m_stack_h5stream.back(), name,
366 if ((m->dtype = H5Dget_type(m->dset)) < 0)
return false;
367 if (!CSerializableHdf5File::isequal_stype2hdf5(
370 if ((m->dspace = H5Dget_space(m->dset)) < 0)
return false;
372 if (H5Sget_simple_extent_ndims(m->dspace) > 2)
return false;
373 if ((m->rank = H5Sget_simple_extent_dims(m->dspace, m->dims, NULL)
380 if (m->rank != 0)
return false;
381 if (type->
m_stype == ST_STRING) m->vltype = SG_MALLOC(hvl_t, 1);
383 case CT_VECTOR:
case CT_SGVECTOR:
384 if (H5Sget_simple_extent_type(m->dspace) != H5S_NULL
385 && m->rank != 1)
return false;
386 if (type->
m_stype == ST_STRING)
387 m->vltype = SG_MALLOC(hvl_t, m->dims[0]);
389 case CT_MATRIX:
case CT_SGMATRIX:
390 if (H5Sget_simple_extent_type(m->dspace) != H5S_NULL
391 && m->rank != 2)
return false;
392 if (type->
m_stype == ST_STRING)
393 m->vltype = SG_MALLOC(hvl_t, m->dims[0] *m->dims[1]);
395 default:
return false;
402 SerializableHdf5Reader00::read_type_end_wrapped(
403 const TSGDataType* type,
const char* name,
const char* prefix)
405 if (type->
m_ptype == PT_SGOBJECT)
406 if (!m_file->group_close())
return false;
408 delete m_file->m_stack_type.back();
409 m_file->m_stack_type.pop_back();
static bool string_to_ptype(EPrimitiveType *ptype, const char *str)
#define SG_NOTIMPLEMENTED
size_t sizeof_ptype() const
Datatypes that shogun supports.
void to_string(char *dest, size_t n) const
all of classes and functions are contained in the shogun namespace
template class SGSparseVectorEntry
char string_t[STRING_LEN]