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;
213 void write_fixed_length_string(
const T &data,
218 auto buffer = Trait::to_buffer(data,mem_type,SpaceTrait::create(data));
220 if(H5Awrite(
static_cast<hid_t
>(handle_),
221 static_cast<hid_t
>(mem_type),
224 error::Singleton::instance().throw_with_stack(
"Failure to write data to attribute!");
230 void write_variable_length_string(
const T &data,
234 auto buffer = Trait::to_buffer(data);
236 if(H5Awrite(
static_cast<hid_t
>(handle_),
237 static_cast<hid_t
>(mem_type),
240 error::Singleton::instance().throw_with_stack(
"Failure to write data to attribute!");
246 void write_contiguous_data(
const T &data,
247 const datatype::Datatype &mem_type)
const
249 const void *
ptr = dataspace::cptr(data);
250 if(H5Awrite(
static_cast<hid_t
>(handle_),
static_cast<hid_t
>(mem_type),ptr)<0)
252 error::Singleton::instance().throw_with_stack(
"Failure to write data to attribute!");
257 void read_fixed_length_string(T &data,
258 const datatype::Datatype &mem_type)
const
260 using Trait = FixedLengthStringTrait<T>;
263 auto buffer = Trait::BufferType::create(mem_type,SpaceTrait::create(data));
265 if(H5Aread(
static_cast<hid_t
>(handle_),
266 static_cast<hid_t
>(mem_type),
269 error::Singleton::instance().throw_with_stack(
"Failure to read data from attribute!");
272 data = Trait::from_buffer(buffer,mem_type,SpaceTrait::create(data));
277 void read_variable_length_string(T &data,
278 const datatype::Datatype &mem_type)
const
280 using Trait = VarLengthStringTrait<T>;
282 typename Trait::BufferType buffer(
signed2unsigned<
typename std::vector<T>::size_type>(dataspace().size()));
284 if(H5Aread(
static_cast<hid_t
>(handle_),
285 static_cast<hid_t
>(mem_type),
288 error::Singleton::instance().throw_with_stack(
"Failure to read data from attribute!");
291 Trait::from_buffer(buffer,data);
293 if(H5Dvlen_reclaim(
static_cast<hid_t
>(mem_type),
294 static_cast<hid_t
>(dataspace()),
295 static_cast<hid_t
>(property::DatasetTransferList()),
298 std::stringstream ss;
299 ss<<
"Failure to reclaim buffer for variable length string"
300 <<
" string read on attribute!";
301 error::Singleton::instance().throw_with_stack(ss.str());
307 void read_contiguous_data(T &data,
308 const datatype::Datatype &mem_type)
const
310 void *
ptr = dataspace::ptr(data);
312 if(H5Aread(
static_cast<hid_t
>(handle_),
static_cast<hid_t
>(mem_type),ptr)<0)
314 error::Singleton::instance().throw_with_stack(
"Failure to read data from attribute!");
318 void check_size(
const dataspace::Dataspace &mem_space,
319 const dataspace::Dataspace &file_space,
320 const std::string &operation)
const;