28 #include <pni/core/types.hpp>
29 #include <pni/core/error.hpp>
30 #include <pni/core/arrays/mdarray.hpp>
31 #include <pni/core/arrays/array_view.hpp>
32 #include <pni/core/arrays/slice.hpp>
33 #include <pni/core/type_erasures/array.hpp>
39 #include "../exceptions.hpp"
54 template<nximp_code IMPID>
86 template<
typename ATYPE>
90 check_allocation_state(a,EXCEPTION_RECORD);
91 check_equal_size(a,*
this,EXCEPTION_RECORD);
114 template<
typename ATYPE>
118 check_allocation_state(a,EXCEPTION_RECORD);
119 check_equal_size(a,*
this,EXCEPTION_RECORD);
210 void write(
const pni::core::mdarray<STORAGE,IMAP,IPA> &o)
const
234 template<
typename ATYPE>
235 void write(
const pni::core::array_view<ATYPE> &v)
const
237 if(v.is_contiguous())
241 typedef typename ATYPE::value_type value_type;
242 typedef pni::core::dynamic_array<value_type> array_type;
243 auto buffer = array_type::create(v.template shape<pni::core::shape_t>());
244 std::copy(v.begin(),v.end(),buffer.begin());
269 void write(
size_t n,
const T *data)
const
272 static_assert(!std::is_pointer<T>::value,
"no const pointer");
275 throw size_mismatch_error(EXCEPTION_RECORD,
276 "Memory and attribute size do not match!");
298 void write(
const std::vector<T> &data)
const
300 write(data.size(),data.data());
319 template<
typename T >
323 static_assert(!std::is_pointer<T>::value,
"no const pointer");
326 throw size_mismatch_error(EXCEPTION_RECORD,
327 "Field is not scalar!");
350 pni::core::string s(value);
369 void write(
const pni::core::array &a)
const
400 void read(pni::core::mdarray<STORAGE,IMAP,IPA> &o)
const
406 template<
typename ATYPE>
407 void read(pni::core::array_view<ATYPE> &v)
const
409 if(v.is_contiguous())
413 typedef typename ATYPE::value_type value_type;
414 typedef pni::core::dynamic_array<value_type> buffer_type;
415 auto buffer = buffer_type::create(v.template shape<pni::core::shape_t>());
417 std::copy(buffer.begin(),buffer.end(),v.begin());
422 template<
typename ATYPE>
423 void read(pni::core::array_view<ATYPE> &&v)
const
441 void read(pni::core::array &a)
const
467 throw size_mismatch_error(EXCEPTION_RECORD,
468 "Try to read a scalar from an array field!");
492 void read(
size_t n,T *value)
const
496 throw size_mismatch_error(EXCEPTION_RECORD,
497 "Memory and attribute size do not match!");
518 void read(std::vector<T> &data)
const
520 read(data.size(),data.data());
533 template<
typename CTYPE>
539 "Cannot get shape from invalid attribute!");
540 return type_type::template from_index_vector<CTYPE>(_imp.shape());
555 size_t rank()
const {
return this->_imp.rank(); }
568 size_t size()
const {
return _imp.size(); }
582 pni::core::type_id_t
type_id()
const {
return _imp.type_id(); }
617 pni::core::string
name()
const {
return _imp.name(); }
635 return _imp.filename();
643 template<
typename ...ITYPES>
647 attribute_type a(*
this);
650 typename type_type::selection_vector_type selection{pni::core::slice(indices)...};
653 a.
_imp.apply_selection(selection);
660 attribute_type
operator()(
const std::vector<pni::core::slice> &indices)
const
663 attribute_type a(*
this);
666 typename type_type::selection_vector_type selection(indices.size());
667 std::copy(indices.begin(),indices.end(),selection.begin());
670 a.
_imp.apply_selection(selection);
698 return field_type(field_imp_type(std::move(p)));
700 return group_type(group_imp_type(std::move(p)));
702 throw type_error(EXCEPTION_RECORD,
703 "Cannot convert parent type");
void read(pni::core::array &a) const
read data to array
Definition: nxattribute.hpp:441
void read(pni::core::array_view< ATYPE > &&v) const
Definition: nxattribute.hpp:423
size_t size() const
obtain attribute size
Definition: nxattribute.hpp:568
pni::core::type_id_t type_id() const
obtain type id
Definition: nxattribute.hpp:582
implementation map
Definition: nximp_map.hpp:50
nexus object traits
Definition: nxobject_traits.hpp:44
bool is_valid() const
check validity of the attribute
Definition: nxattribute.hpp:601
unexpected invalid object
Definition: exceptions.hpp:130
void read(std::vector< T > &data) const
read data to an STL vector
Definition: nxattribute.hpp:518
void write(const pni::core::array_view< ATYPE > &v) const
write view data to an attribute
Definition: nxattribute.hpp:235
void _read_array(ATYPE &a) const
read data to array
Definition: nxattribute.hpp:115
attribute object
Definition: nxattribute.hpp:55
void write(size_t n, const T *data) const
write data from a plain C pointer
Definition: nxattribute.hpp:269
pni::core::type_id_t type_id(const h5datatype &o)
get type code
Definition: h5datatype.cpp:240
attribute_type & operator=(const typename nxobject_trait< IMPID >::object_type &o)
conversion assignment
Definition: nxattribute.hpp:177
void write(const T &value) const
write a single scalar value
Definition: nxattribute.hpp:320
Definition: cbf_reader.hpp:41
void close()
close attribute
Definition: nxattribute.hpp:591
void read(size_t n, T *value) const
read data to pointer
Definition: nxattribute.hpp:492
nximp_map< IMPID >::type_imp type_type
implementation of the type trait
Definition: nxattribute.hpp:61
void write(const pni::core::mdarray< STORAGE, IMAP, IPA > &o) const
write data from an mdarray instance
Definition: nxattribute.hpp:210
size_t rank() const
return attribute rank
Definition: nxattribute.hpp:555
attribute_type operator()(const std::vector< pni::core::slice > &indices) const
Definition: nxattribute.hpp:660
void write(const std::vector< T > &data) const
write data from a vector
Definition: nxattribute.hpp:298
void read(T &value) const
read a single scalar value
Definition: nxattribute.hpp:463
ATYPE as_attribute(const nxobject< GTYPE, FTYPE, ATYPE, LTYPE > &o)
as attribute wrapper
Definition: as_attribute.hpp:170
CTYPE shape() const
obtain attribute shape
Definition: nxattribute.hpp:534
pni::core::string filename() const
return filename
Definition: nxattribute.hpp:633
nximp_map< IMPID >::attribute_imp implementation_type
implementation type of the attribute
Definition: nxattribute.hpp:59
void read(pni::core::mdarray< STORAGE, IMAP, IPA > &o) const
read data to an array
Definition: nxattribute.hpp:400
attribute_type operator()(ITYPES...indices) const
apply selection to an attribute
Definition: nxattribute.hpp:644
void write(const pni::core::array &a) const
write array type erasure data
Definition: nxattribute.hpp:369
void _write_array(const ATYPE &a) const
write data from array
Definition: nxattribute.hpp:87
pni::core::string name() const
get attribute name
Definition: nxattribute.hpp:617
nxobject_trait< IMPID >::object_type parent() const
return parent object
Definition: nxattribute.hpp:687
nxattribute(implementation_type &&i)
move constructor from implementation
Definition: nxattribute.hpp:143
implementation_type _imp
implementation of the attribute object
Definition: nxattribute.hpp:66
nxattribute() noexcept
default constructor
Definition: nxattribute.hpp:130
void write(const char *value) const
write a C-string
Definition: nxattribute.hpp:348
void read(pni::core::array_view< ATYPE > &v) const
Definition: nxattribute.hpp:407
nxattribute(const typename nxobject_trait< IMPID >::object_type &o)
conversion constructor
Definition: nxattribute.hpp:158
nxattribute< IMPID > attribute_type
define the actual type of this object
Definition: nxattribute.hpp:63