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(
184 CSerializableHdf5File::type_item_t* m_prev
185 = m_file->m_stack_type.back();
187 if(!m_file->dspace_select(type->
m_ctype, m_prev->y, m_prev->x))
190 CSerializableHdf5File::type_item_t* m =
new CSerializableHdf5File
191 ::type_item_t(m_prev->name);
192 m_file->m_stack_type.push_back(m);
196 if (!m_file->group_open(m->name, STR_GROUP_PREFIX))
return false;
197 if (!m_file->attr_exists(STR_IS_SPARSE))
return false;
200 CSerializableHdf5File::index2string(
202 if ((m->dset = H5Dopen2(m_file->m_stack_h5stream.back(), name,
206 if ((m->dtype = H5Dget_type(m->dset)) < 0)
return false;
207 if (!CSerializableHdf5File::isequal_stype2hdf5(
210 if ((m->dspace = H5Dget_space(m->dset)) < 0)
return false;
211 if (H5Sget_simple_extent_ndims(m->dspace) != 1)
return false;
214 if ((m->rank = H5Sget_simple_extent_dims(m->dspace, m->dims, NULL)
217 if (H5Sget_simple_extent_type(m->dspace) != H5S_NULL
218 && m->rank != 1)
return false;
220 *length = m->dims[0];
224 char* buf =
SG_MALLOC(
char, CSerializableHdf5File::sizeof_sparsetype());
227 if ((mem_type_id = CSerializableHdf5File::new_sparsetype()) < 0)
231 if ((mem_space_id = H5Screate_simple(0, NULL, NULL)) < 0)
234 if (H5Dread(m_prev->dset, mem_type_id, mem_space_id,
235 m_prev->dspace, H5P_DEFAULT, buf) < 0)
return false;
237 if (H5Sclose(mem_space_id) < 0)
return false;
238 if (H5Tclose(mem_type_id) < 0)
return false;
246 SerializableHdf5Reader00::read_sparse_end_wrapped(
249 if (!m_file->group_close())
return false;
251 delete m_file->m_stack_type.back();
252 m_file->m_stack_type.pop_back();
258 SerializableHdf5Reader00::read_sparseentry_begin_wrapped(
262 CSerializableHdf5File::type_item_t* m
263 = m_file->m_stack_type.back();
265 m->sparse_ptr = first_entry;
272 SerializableHdf5Reader00::read_sparseentry_end_wrapped(
280 SerializableHdf5Reader00::read_item_begin_wrapped(
283 CSerializableHdf5File::type_item_t* m
284 = m_file->m_stack_type.back();
287 if (type->
m_ptype != PT_SGOBJECT)
return true;
290 if (!CSerializableHdf5File::index2string(
292 if (!m_file->group_open(name,
""))
return false;
298 SerializableHdf5Reader00::read_item_end_wrapped(
301 if (type->
m_ptype == PT_SGOBJECT)
302 if (!m_file->group_close())
return false;
308 SerializableHdf5Reader00::read_sgserializable_begin_wrapped(
309 const TSGDataType* type,
char* sgserializable_name,
310 EPrimitiveType*
generic)
312 if (!m_file->attr_exists(STR_IS_SGSERIALIZABLE))
return false;
314 if (m_file->attr_exists(STR_IS_NULL)) {
315 *sgserializable_name =
'\0';
return true;
318 if (!m_file->attr_read_string(
319 STR_INSTANCE_NAME, sgserializable_name,
STRING_LEN))
322 if (m_file->attr_exists(STR_GENERIC_NAME)) {
324 if (!m_file->attr_read_string(
325 STR_GENERIC_NAME, buf,
STRING_LEN))
return false;
334 SerializableHdf5Reader00::read_sgserializable_end_wrapped(
335 const TSGDataType* type,
const char* sgserializable_name,
336 EPrimitiveType
generic)
342 SerializableHdf5Reader00::read_type_begin_wrapped(
343 const TSGDataType* type,
const char* name,
const char* prefix)
345 CSerializableHdf5File::type_item_t* m =
new CSerializableHdf5File
347 m_file->m_stack_type.push_back(m);
349 if (type->
m_ptype == PT_SGOBJECT) {
350 if (!m_file->group_open(name,
""))
return false;
354 if ((m->dset = H5Dopen2(m_file->m_stack_h5stream.back(), name,
358 if ((m->dtype = H5Dget_type(m->dset)) < 0)
return false;
359 if (!CSerializableHdf5File::isequal_stype2hdf5(
362 if ((m->dspace = H5Dget_space(m->dset)) < 0)
return false;
364 if (H5Sget_simple_extent_ndims(m->dspace) > 2)
return false;
365 if ((m->rank = H5Sget_simple_extent_dims(m->dspace, m->dims, NULL)
372 if (m->rank != 0)
return false;
375 case CT_VECTOR:
case CT_SGVECTOR:
376 if (H5Sget_simple_extent_type(m->dspace) != H5S_NULL
377 && m->rank != 1)
return false;
378 if (type->
m_stype == ST_STRING)
379 m->vltype =
SG_MALLOC(hvl_t, m->dims[0]);
381 case CT_MATRIX:
case CT_SGMATRIX:
382 if (H5Sget_simple_extent_type(m->dspace) != H5S_NULL
383 && m->rank != 2)
return false;
384 if (type->
m_stype == ST_STRING)
385 m->vltype =
SG_MALLOC(hvl_t, m->dims[0] *m->dims[1]);
387 default:
return false;
394 SerializableHdf5Reader00::read_type_end_wrapped(
395 const TSGDataType* type,
const char* name,
const char* prefix)
397 if (type->
m_ptype == PT_SGOBJECT)
398 if (!m_file->group_close())
return false;
400 delete m_file->m_stack_type.back();
401 m_file->m_stack_type.pop_back();