103 operator hid_t()
const
105 return static_cast<hid_t
>(handle_);
128 void write(const T& data) const;
146 void write(const
char *data) const;
166 void write(const std::initializer_list<T> &list)
const
168 write(std::vector<T>{list});
200 void read(T &data)
const;
205 void read(std::string &data,
bool trim =
false)
const;
219 void write_fixed_length_string(
const T &data,
224 auto buffer = Trait::to_buffer(data,mem_type,SpaceTrait::create(data));
226 if(H5Awrite(
static_cast<hid_t
>(handle_),
227 static_cast<hid_t
>(mem_type),
230 error::Singleton::instance().throw_with_stack(
"Failure to write data to attribute!");
236 void write_variable_length_string(
const T &data,
240 auto buffer = Trait::to_buffer(data);
242 if(H5Awrite(
static_cast<hid_t
>(handle_),
243 static_cast<hid_t
>(mem_type),
246 error::Singleton::instance().throw_with_stack(
"Failure to write data to attribute!");
252 void write_contiguous_data(
const T &data,
253 const datatype::Datatype &mem_type)
const
255 const void *
ptr = dataspace::cptr(data);
256 if(H5Awrite(
static_cast<hid_t
>(handle_),
static_cast<hid_t
>(mem_type),ptr)<0)
258 error::Singleton::instance().throw_with_stack(
"Failure to write data to attribute!");
263 void read_fixed_length_string(T &data,
264 const datatype::Datatype &mem_type)
const
266 using Trait = FixedLengthStringTrait<T>;
269 auto buffer = Trait::BufferType::create(mem_type,SpaceTrait::create(data));
271 if(H5Aread(
static_cast<hid_t
>(handle_),
272 static_cast<hid_t
>(mem_type),
275 error::Singleton::instance().throw_with_stack(
"Failure to read data from attribute!");
278 data = Trait::from_buffer(buffer,mem_type,SpaceTrait::create(data));
282 void read_fixed_length_string(std::string &data,
283 const datatype::Datatype &mem_type,
bool trim =
false)
const
285 using Trait = FixedLengthStringTrait<std::string>;
288 auto buffer = Trait::BufferType::create(mem_type, SpaceTrait::create(data));
290 if (H5Aread(
static_cast<hid_t
>(handle_),
291 static_cast<hid_t
>(mem_type),
294 error::Singleton::instance().throw_with_stack(
"Failure to read data from attribute!");
299 data = Trait::from_buffer_trimmed(buffer, mem_type, SpaceTrait::create(data));
303 data = Trait::from_buffer(buffer, mem_type, SpaceTrait::create(data));
307 template <
typename T>
308 void read_variable_length_string(T &data,
309 const datatype::Datatype &mem_type)
const
311 using Trait = VarLengthStringTrait<T>;
313 typename Trait::BufferType buffer(
signed2unsigned<
typename std::vector<T>::size_type>(dataspace().size()));
315 if(H5Aread(
static_cast<hid_t
>(handle_),
316 static_cast<hid_t
>(mem_type),
319 error::Singleton::instance().throw_with_stack(
"Failure to read data from attribute!");
322 Trait::from_buffer(buffer,data);
324 if(H5Dvlen_reclaim(
static_cast<hid_t
>(mem_type),
325 static_cast<hid_t
>(dataspace()),
326 static_cast<hid_t
>(property::DatasetTransferList()),
329 std::stringstream ss;
330 ss<<
"Failure to reclaim buffer for variable length string"
331 <<
" string read on attribute!";
332 error::Singleton::instance().throw_with_stack(ss.str());
338 void read_contiguous_data(T &data,
339 const datatype::Datatype &mem_type)
const
341 void *
ptr = dataspace::ptr(data);
343 if(H5Aread(
static_cast<hid_t
>(handle_),
static_cast<hid_t
>(mem_type),ptr)<0)
345 error::Singleton::instance().throw_with_stack(
"Failure to read data from attribute!");
349 void check_size(
const dataspace::Dataspace &mem_space,
350 const dataspace::Dataspace &file_space,
351 const std::string &operation)
const;