24 #include <pni/core/types.hpp>
25 #include <pni/core/error.hpp>
26 #include "../nxobject.hpp"
27 #include "../nxobject_traits.hpp"
50 template<
typename FTYPE>
51 void set_unit(
const FTYPE &field,
const pni::core::string &value)
57 static_assert(std::is_same<field_type,FTYPE>::value,
58 "A UNIT CAN ONLY SET ON A FIELD TYPE!");
60 auto attribute = field.attributes.template create<string>(
"units",
true);
61 attribute.write(value);
117 throw type_error(EXCEPTION_RECORD,
118 "Groups do not have units!");
152 throw type_error(EXCEPTION_RECORD,
153 "Attributes do not have units!");
165 throw type_error(EXCEPTION_RECORD,
166 "Links do not have units!");
198 const pni::core::string &s)
202 return boost::apply_visitor(visitor_type(s),o);
pni::core::string _unit
unit string
Definition: set_unit.hpp:84
FTYPE field_type
Nexus field type.
Definition: set_unit.hpp:91
GTYPE group_type
Nexus group type.
Definition: set_unit.hpp:89
ATYPE attribute_type
Nexus attribute type.
Definition: set_unit.hpp:93
result_type operator()(const group_type &) const
process groups
Definition: set_unit.hpp:114
nexus object traits
Definition: nxobject_traits.hpp:44
void result_type
result type
Definition: set_unit.hpp:87
set_unit_visitor(const pni::core::string &s)
constructor
Definition: set_unit.hpp:103
result_type operator()(const link_type &) const
process links
Definition: set_unit.hpp:162
Definition: cbf_reader.hpp:41
LTYPE link_type
NeXus link type.
Definition: set_unit.hpp:95
implementation code type map
Definition: nximp_code_map.hpp:37
void set_unit(const FTYPE &field, const pni::core::string &value)
set the unit
Definition: set_unit.hpp:51
result_type operator()(const attribute_type &) const
process attributes
Definition: set_unit.hpp:149
boost::variant< GTYPE, FTYPE, ATYPE, LTYPE > nxobject
Definition: nxobject.hpp:44
result_type operator()(const field_type &f) const
process fields
Definition: set_unit.hpp:135
set unit visitor
Definition: set_unit.hpp:81