16 using namespace shogun;
18 SerializableHdf5Reader00::SerializableHdf5Reader00(
19 CSerializableHdf5File* file) { m_file = file; }
21 SerializableHdf5Reader00::~SerializableHdf5Reader00() {}
24 SerializableHdf5Reader00::read_scalar_wrapped(
27 CSerializableHdf5File::type_item_t* m
28 = m_file->m_stack_type.back();
32 if (m->y != 0 || m->x != 0)
return true;
35 if (m->y == -1 || m->x == -1)
break;
37 if (m->sub_y != 0)
return true;
39 memcpy(param, m->vltype[m->x*m->dims[1] + m->y].p,
40 m->vltype[m->x*m->dims[1] + m->y].len
45 if (m->sub_y != 0)
return true;
50 if ((mem_type_id = CSerializableHdf5File::new_stype2hdf5(
55 if (H5Dread(m->dset, mem_type_id, H5S_ALL, H5S_ALL,
56 H5P_DEFAULT, param) < 0)
return false;
59 if (H5Dread(m->dset, mem_type_id, H5S_ALL, H5S_ALL,
60 H5P_DEFAULT, m->vltype) < 0)
return false;
63 if (H5Dread(m->dset, m->dtype, H5S_ALL, H5S_ALL,
64 H5P_DEFAULT, m->sparse_ptr) < 0)
return false;
68 if (H5Tclose(mem_type_id) < 0)
return false;
74 SerializableHdf5Reader00::read_cont_begin_wrapped(
77 CSerializableHdf5File::type_item_t* m
78 = m_file->m_stack_type.back();
80 if (type->
m_ptype != PT_SGOBJECT) {
85 SG_ERROR(
"read_cont_begin_wrapped(): Implementation error"
86 " during writing Hdf5File (0)!");
88 case CT_VECTOR:
case CT_SGVECTOR: *len_read_y = m->dims[0];
break;
89 case CT_MATRIX:
case CT_SGMATRIX:
90 *len_read_x = m->dims[0]; *len_read_y = m->dims[1];
92 default:
return false;
98 if (!m_file->attr_exists(STR_IS_CONT))
return false;
102 if (!m_file->attr_read_string(STR_CTYPE_NAME, buf,
STRING_LEN))
104 if (strcmp(ctype_buf, buf) != 0)
return false;
110 SG_ERROR(
"read_cont_begin_wrapped(): Implementation error"
111 " during writing Hdf5File (1)!");
113 case CT_MATRIX:
case CT_SGMATRIX:
114 if (!m_file->attr_read_scalar(TYPE_INDEX, STR_LENGTH_X,
118 case CT_VECTOR:
case CT_SGVECTOR:
119 if (!m_file->attr_read_scalar(TYPE_INDEX, STR_LENGTH_Y,
123 default:
return false;
130 SerializableHdf5Reader00::read_cont_end_wrapped(
137 SerializableHdf5Reader00::read_string_begin_wrapped(
140 CSerializableHdf5File::type_item_t* m
141 = m_file->m_stack_type.back();
143 if (m->y == 0 && m->x == 0) {
144 m->y = -1; m->x = -1;
145 read_scalar_wrapped(type, NULL);
149 *length = m->vltype[m->x*m->dims[1] + m->y].len;
155 SerializableHdf5Reader00::read_string_end_wrapped(
162 SerializableHdf5Reader00::read_stringentry_begin_wrapped(
165 CSerializableHdf5File::type_item_t* m
166 = m_file->m_stack_type.back();
174 SerializableHdf5Reader00::read_stringentry_end_wrapped(
181 SerializableHdf5Reader00::read_sparse_begin_wrapped(
185 CSerializableHdf5File::type_item_t* m_prev
186 = m_file->m_stack_type.back();
188 if(!m_file->dspace_select(type->
m_ctype, m_prev->y, m_prev->x))
191 CSerializableHdf5File::type_item_t* m =
new CSerializableHdf5File
192 ::type_item_t(m_prev->name);
193 m_file->m_stack_type.push_back(m);
197 if (!m_file->group_open(m->name, STR_GROUP_PREFIX))
return false;
198 if (!m_file->attr_exists(STR_IS_SPARSE))
return false;
201 CSerializableHdf5File::index2string(
203 if ((m->dset = H5Dopen2(m_file->m_stack_h5stream.back(), name,
207 if ((m->dtype = H5Dget_type(m->dset)) < 0)
return false;
208 if (!CSerializableHdf5File::isequal_stype2hdf5(
211 if ((m->dspace = H5Dget_space(m->dset)) < 0)
return false;
212 if (H5Sget_simple_extent_ndims(m->dspace) != 1)
return false;
215 if ((m->rank = H5Sget_simple_extent_dims(m->dspace, m->dims, NULL)
218 if (H5Sget_simple_extent_type(m->dspace) != H5S_NULL
219 && m->rank != 1)
return false;
221 *length = m->dims[0];
225 char* buf =
SG_MALLOC(
char, CSerializableHdf5File::sizeof_sparsetype());
228 if ((mem_type_id = CSerializableHdf5File::new_sparsetype()) < 0)
232 if ((mem_space_id = H5Screate_simple(0, NULL, NULL)) < 0)
235 if (H5Dread(m_prev->dset, mem_type_id, mem_space_id,
236 m_prev->dspace, H5P_DEFAULT, buf) < 0)
return false;
238 if (H5Sclose(mem_space_id) < 0)
return false;
239 if (H5Tclose(mem_type_id) < 0)
return false;
249 SerializableHdf5Reader00::read_sparse_end_wrapped(
253 if (!m_file->group_close())
return false;
255 delete m_file->m_stack_type.back();
256 m_file->m_stack_type.pop_back();
262 SerializableHdf5Reader00::read_sparseentry_begin_wrapped(
266 CSerializableHdf5File::type_item_t* m
267 = m_file->m_stack_type.back();
269 m->sparse_ptr = first_entry;
276 SerializableHdf5Reader00::read_sparseentry_end_wrapped(
284 SerializableHdf5Reader00::read_item_begin_wrapped(
287 CSerializableHdf5File::type_item_t* m
288 = m_file->m_stack_type.back();
291 if (type->
m_ptype != PT_SGOBJECT)
return true;
294 if (!CSerializableHdf5File::index2string(
296 if (!m_file->group_open(name,
""))
return false;
302 SerializableHdf5Reader00::read_item_end_wrapped(
305 if (type->
m_ptype == PT_SGOBJECT)
306 if (!m_file->group_close())
return false;
312 SerializableHdf5Reader00::read_sgserializable_begin_wrapped(
313 const TSGDataType* type,
char* sgserializable_name,
314 EPrimitiveType*
generic)
316 if (!m_file->attr_exists(STR_IS_SGSERIALIZABLE))
return false;
318 if (m_file->attr_exists(STR_IS_NULL)) {
319 *sgserializable_name =
'\0';
return true;
322 if (!m_file->attr_read_string(
323 STR_INSTANCE_NAME, sgserializable_name,
STRING_LEN))
326 if (m_file->attr_exists(STR_GENERIC_NAME)) {
328 if (!m_file->attr_read_string(
329 STR_GENERIC_NAME, buf,
STRING_LEN))
return false;
338 SerializableHdf5Reader00::read_sgserializable_end_wrapped(
339 const TSGDataType* type,
const char* sgserializable_name,
340 EPrimitiveType
generic)
346 SerializableHdf5Reader00::read_type_begin_wrapped(
347 const TSGDataType* type,
const char* name,
const char* prefix)
349 CSerializableHdf5File::type_item_t* m =
new CSerializableHdf5File
351 m_file->m_stack_type.push_back(m);
353 if (type->
m_ptype == PT_SGOBJECT) {
354 if (!m_file->group_open(name,
""))
return false;
358 if ((m->dset = H5Dopen2(m_file->m_stack_h5stream.back(), name,
362 if ((m->dtype = H5Dget_type(m->dset)) < 0)
return false;
363 if (!CSerializableHdf5File::isequal_stype2hdf5(
366 if ((m->dspace = H5Dget_space(m->dset)) < 0)
return false;
368 if (H5Sget_simple_extent_ndims(m->dspace) > 2)
return false;
369 if ((m->rank = H5Sget_simple_extent_dims(m->dspace, m->dims, NULL)
376 if (m->rank != 0)
return false;
379 case CT_VECTOR:
case CT_SGVECTOR:
380 if (H5Sget_simple_extent_type(m->dspace) != H5S_NULL
381 && m->rank != 1)
return false;
382 if (type->
m_stype == ST_STRING)
383 m->vltype =
SG_MALLOC(hvl_t, m->dims[0]);
385 case CT_MATRIX:
case CT_SGMATRIX:
386 if (H5Sget_simple_extent_type(m->dspace) != H5S_NULL
387 && m->rank != 2)
return false;
388 if (type->
m_stype == ST_STRING)
389 m->vltype =
SG_MALLOC(hvl_t, m->dims[0] *m->dims[1]);
391 default:
return false;
398 SerializableHdf5Reader00::read_type_end_wrapped(
399 const TSGDataType* type,
const char* name,
const char* prefix)
401 if (type->
m_ptype == PT_SGOBJECT)
402 if (!m_file->group_close())
return false;
404 delete m_file->m_stack_type.back();
405 m_file->m_stack_type.pop_back();