73 void insert(
const std::string& name,
const T& data)
const;
78 size_t number_of_values()
const;
83 std::string name(
size_t index)
const;
89 T value(
size_t index)
const;
95 T value(
const std::string& name)
const;
103 void insert_underlying(
const std::string& name,
const T& data)
const;
108 static Enum create_underlying(
const Datatype& base_type);
114 void underlying_value(
size_t index, T& data)
const;
120 void underlying_value(
const std::string& name, T& data)
const;
124 void check_type(
const T& data)
const;
129 void Enum::check_type(
const T& data)
const 132 auto mem_type = datatype::create<T>();
133 if (mem_type != super())
135 std::stringstream ss;
136 ss <<
"Attempt to insert enum value of mismatching type";
137 throw (std::runtime_error(ss.str()));
144 return create_underlying(
datatype::create<
typename std::underlying_type<T>::type>());
153 if (0 > H5Tenum_insert(static_cast<hid_t>(*
this), name.c_str(), &data))
155 std::stringstream ss;
156 ss <<
"Could not insert Enum value " << name <<
"=" << data;
164 auto data2 =
static_cast<typename std::underlying_type<T>::type
>(data);
165 insert_underlying(name, data2);
173 if (0 > H5Tget_member_value(static_cast<hid_t>(*
this), static_cast<uint32_t>(index), &data))
175 std::stringstream ss;
176 ss <<
"Could not retrieve Enum value at idx=" << index;
186 if (0 > H5Tenum_valueof(static_cast<hid_t>(*
this), name.c_str(), &data))
188 std::stringstream ss;
189 ss <<
"Could not retrieve Enum value with name=" << name;
197 typename std::underlying_type<T>::type t;
198 underlying_value(index, t);
199 return static_cast<T
>(t);
205 typename std::underlying_type<T>::type t;
206 underlying_value(name, t);
207 return static_cast<T
>(t);
static Singleton & instance()
reference to singleton
Definition: error.hpp:50
void throw_with_stack(const std::string &message)
throws an exception, potentially nested with error stack
Wrapper for hid_t object identifiers.
Definition: object_handle.hpp:66
T value(size_t index) const
get value at index (with underlying type deduction)
Definition: enum.hpp:195
compound data type
Definition: enum.hpp:45
void insert_underlying(const std::string &name, const T &data) const
insert enum value definition
Definition: enum.hpp:149
Definition: attribute.hpp:43
void insert(const std::string &name, const T &data) const
insert enum value definition (with underlying type deduction)
Definition: enum.hpp:162
TypeTrait< typename std::remove_const< T >::type >::TypeClass create(const T &v=T())
factory function for creating data types
Definition: factory.hpp:38
#define DLL_EXPORT
Definition: windows.hpp:35
static Enum create(const T &)
named constructor (with underlying type deduction)
Definition: enum.hpp:142
base class for all data types
Definition: datatype.hpp:41
void underlying_value(size_t index, T &data) const
get value at index
Definition: enum.hpp:169