26 #include <pni/core/types.hpp>
27 #include <pni/core/utilities.hpp>
33 #include "../exceptions.hpp"
83 template<nximp_code IMPID>
class nxgroup
104 using iterator = pni::core::container_iterator<const group_type>;
142 auto chunk = pni::core::container_utils<CTYPE>::create(shape.size());
144 std::copy(shape.begin(),shape.end(),chunk.begin());
179 const CTYPE &chunk)
const
183 type_type::to_index_vector(shape),
184 type_type::to_index_vector(chunk)));
226 type_type::to_index_vector(shape),
227 type_type::to_index_vector(chunk),
242 explicit nxgroup():_imp(),attributes(_imp) { }
264 _imp(
std::move(o._imp)),
301 if(
this == &g)
return *
this;
313 if(
this == &g)
return *
this;
315 _imp = std::move(g._imp);
348 const pni::core::string &type=pni::core::string())
const
359 g.
attributes.template create<pni::core::string>(
"NX_class").write(type);
394 typename CTYPE = pni::core::shape_t
397 const CTYPE &shape={1})
const
402 throw size_mismatch_error(EXCEPTION_RECORD,
403 "Shape container must not be empty!");
405 auto chunk = _create_auto_chunk<shape_t>(shape);
407 return this->_create_field<T>(n,shape,chunk);
445 typename CTYPE=pni::core::shape_t
449 const CTYPE &chunk)
const
451 return _create_field<T>(n,shape,chunk);
498 throw size_mismatch_error(EXCEPTION_RECORD,
499 "Shape must not be empty!");
501 auto chunk = _create_auto_chunk<shape_t>(shape);
503 return _create_field<T>(n,shape,chunk,filter);
551 return _create_field<T>(n,s,cs,filter);
572 at(
const pni::core::string &n)
const
576 if(find(n.begin(),n.end(),
'/')!=n.end())
577 throw value_error(EXCEPTION_RECORD,
578 "Invalid character in object name!");
594 throw type_error(EXCEPTION_RECORD,
595 "Unknown Nexus object type!");
631 size_t size()
const {
return _imp.size(); }
708 if(n.find(
'/')==pni::core::string::npos)
709 return _imp.has_child(n);
731 void remove(
const pni::core::string &n)
const{ _imp.remove(n); }
774 pni::core::string
name()
const {
return _imp.name(); }
792 return _imp.filename();
840 template<nximp_code IMPID>
843 if(a.imp().object() == b.imp().object())
return true;
861 template<nximp_code IMPID>
864 if(a == b)
return false;
attribute manager template
Definition: nxattribute_manager.hpp:42
Filter object.
Definition: nxfilter.hpp:42
nxobject_trait< IMPID >::object_type parent() const
return parent object
Definition: nxgroup.hpp:645
typename nxobject_trait< IMPID >::link_type link_type
link type
Definition: nxgroup.hpp:110
pni::core::string filename() const
return filename
Definition: nxgroup.hpp:790
bool operator!=(const nxgroup< IMPID > &a, const nxgroup< IMPID > &b)
group inequality check
Definition: nxgroup.hpp:862
nxgroup(group_type &&o)
move constructor
Definition: nxgroup.hpp:263
typename nximp_map< IMPID >::group_imp imp_type
group implementation type
Definition: nxgroup.hpp:95
implementation map
Definition: nximp_map.hpp:50
nexus object traits
Definition: nxobject_traits.hpp:44
pni::io::nx::nxgroup< nximp_code::HDF5 > nxgroup
Definition: nx_hdf5_implementation.hpp:49
group_type & operator=(const typename nxobject_trait< IMPID >::object_type &o)
conversion assignment
Definition: nxgroup.hpp:324
const imp_type & imp() const noexcept
get constant reference to the implementation
Definition: nxgroup.hpp:821
nxobject_type
Nexus typd ids.
Definition: nxobject_type.hpp:39
nxobject_trait< IMPID >::object_type operator[](const pni::core::string &n) const
open an object
Definition: nxgroup.hpp:615
auto link_status(const GTYPE< IMPID > parent, const pni::core::string &lname) -> nxlink_status
Definition: nxlink.hpp:410
nxgroup< IMPID > group_type
the group type
Definition: nxgroup.hpp:99
typename nximp_map< IMPID >::type_imp type_type
type implementation
Definition: nxgroup.hpp:97
NXgroup object.
Definition: nxgroup.hpp:89
group_type & operator=(group_type &&g)
move assignment
Definition: nxgroup.hpp:311
nxobject_trait< IMPID >::object_type operator[](size_t i) const
open object by index
Definition: nxgroup.hpp:688
pni::core::type_id_t type_id(const h5datatype &o)
get type code
Definition: h5datatype.cpp:240
field_type _create_field(const pni::core::string &n, const CTYPE &shape, const CTYPE &chunk, const nxfilter< FIMP > &filter) const
field creation function
Definition: nxgroup.hpp:220
void close()
close the group
Definition: nxgroup.hpp:803
field_type create_field(const pni::core::string &n, const CTYPE &shape={1}) const
create a field
Definition: nxgroup.hpp:396
Definition: cbf_reader.hpp:41
field_type _create_field(const pni::core::string &n, const CTYPE &shape, const CTYPE &chunk) const
field creation function
Definition: nxgroup.hpp:177
iterator end() const
iterator on last child
Definition: nxgroup.hpp:755
bool has_child(const pni::core::string &n) const
check if a particular object exists
Definition: nxgroup.hpp:706
auto link_name(const GTYPE< IMPID > &parent, size_t index) -> pni::core::string
get link name
Definition: nxlink.hpp:264
nxobject_trait< IMPID >::object_type at(size_t i) const
open object by index
Definition: nxgroup.hpp:668
typename nxobject_trait< IMPID >::attribute_type attribute_type
attribute type
Definition: nxgroup.hpp:108
group_type & operator=(const group_type &g)
copy assignment
Definition: nxgroup.hpp:299
nxgroup(imp_type &&imp)
move construct from implementation object
Definition: nxgroup.hpp:279
CTYPE _create_auto_chunk(const STYPE &shape) const
automatic chunk creation
Definition: nxgroup.hpp:140
imp_type & imp()
get non-const ref
Definition: nxfilter.hpp:64
typename nximp_map< IMPID >::object_imp object_imp_type
object implementation type
Definition: nxgroup.hpp:116
nxgroup()
default constructor
Definition: nxgroup.hpp:242
bool operator==(const nxgroup< IMPID > &a, const nxgroup< IMPID > &b)
group equality check
Definition: nxgroup.hpp:841
imp_type _imp
the implementation instance of nxgroup
Definition: nxgroup.hpp:120
typename nximp_map< IMPID >::field_imp field_imp_type
field implementation type
Definition: nxgroup.hpp:114
bool is_valid() const
check group validity
Definition: nxgroup.hpp:815
field_type create_field(const pni::core::string &n, const CTYPES &s, const CTYPEC &cs, const nxfilter< FIMP > &filter) const
create a multidimensional field (explicit chunk) with filter
Definition: nxgroup.hpp:546
nxobject_trait< IMPID >::object_type at(const pni::core::string &n) const
open an arbitrary object
Definition: nxgroup.hpp:572
field_type create_field(const pni::core::string &n, const CTYPES &shape, const nxfilter< FIMP > &filter) const
Creates a multidimensional field with a filter.
Definition: nxgroup.hpp:491
GTYPE as_group(const nxobject< GTYPE, FTYPE, ATYPE, LTYPE > &o)
as group wrapper
Definition: as_group.hpp:167
pni::core::string name() const
name of the group
Definition: nxgroup.hpp:774
pni::core::container_iterator< const group_type > iterator
iterator type
Definition: nxgroup.hpp:104
nxgroup(const typename nxobject_trait< IMPID >::object_type &o)
conversion constructor
Definition: nxgroup.hpp:288
group_type create_group(const pni::core::string &n, const pni::core::string &type=pni::core::string()) const
create a group as nexus class
Definition: nxgroup.hpp:347
typename nxobject_trait< IMPID >::field_type field_type
field type
Definition: nxgroup.hpp:106
iterator begin() const noexcept
iterator on first child
Definition: nxgroup.hpp:742
field_type create_field(const pni::core::string &n, const CTYPE &shape, const CTYPE &chunk) const
create a field
Definition: nxgroup.hpp:447
size_t size() const
return number of children
Definition: nxgroup.hpp:631
nxgroup(const group_type &o)
copy constructor
Definition: nxgroup.hpp:254
nxattribute_manager< group_type > attributes
attribute manager
Definition: nxgroup.hpp:239
typename nxobject_trait< IMPID >::object_type value_type
nxobject as container value_type
Definition: nxgroup.hpp:102