1 #ifndef MHO_AxisPack_HH__
2 #define MHO_AxisPack_HH__
34 typedef std::integral_constant< std::size_t,
sizeof...(XAxisTypeS) >
NAXES;
45 uint64_t total_size = 0;
69 template< std::
size_t N = 0 >
70 typename std::enable_if< (N ==
sizeof...(XAxisTypeS)),
void >::type
79 template< std::
size_t N = 0 >
80 typename std::enable_if< (N <
sizeof...(XAxisTypeS)),
void >::type
resize_axis_pack(
const std::size_t* dim)
83 std::get< N >(*this).Resize(dim[N]);
85 resize_axis_pack< N + 1 >(dim);
95 template< std::
size_t N = 0 >
96 typename std::enable_if< (N ==
sizeof...(XAxisTypeS)),
void >::type
106 template< std::
size_t N = 0 >
107 typename std::enable_if< (N <
sizeof...(XAxisTypeS)),
void >::type
compute_total_size(uint64_t& total_size)
const
109 total_size += std::get< N >(*this).GetSerializedSize();
111 compute_total_size< N + 1 >(total_size);
121 template< std::
size_t N = 0 >
122 typename std::enable_if< (N ==
sizeof...(XAxisTypeS)),
void >::type
132 template< std::
size_t N = 0 >
133 typename std::enable_if< (N <
sizeof...(XAxisTypeS)),
void >::type
copy(
const MHO_AxisPack& rhs)
135 std::get< N >(*this).Copy(std::get< N >(rhs));
146 aData.StreamOutData_V0(s);
150 "error, cannot stream out MHO_Axis object with unknown version: " << aData.
GetVersion() << eom);
162 aData.StreamInData_V0(s);
179 template<
typename XStream >
void StreamInData_V0(XStream& s) {
istream_tuple(s, *
this); }
189 template<
typename XStream >
void StreamOutData_V0(XStream& s)
const {
ostream_tuple(s, *
this); }
198 virtual MHO_UUID DetermineTypeUUID()
const override
200 MHO_MD5HashGenerator gen;
205 return gen.GetDigestAsUUID();
223 #define DefAxisPack1(TYPE1) using MHO_AxisPack_##TYPE1 = MHO_AxisPack< MHO_Axis##TYPE1 >;
225 #define DefAxisPack2(TYPE1, TYPE2) using MHO_AxisPack_##TYPE1##_##TYPE2 = MHO_AxisPack< MHO_Axis##TYPE1, MHO_Axis##TYPE2 >;
227 #define DefAxisPack3(TYPE1, TYPE2, TYPE3) \
228 using MHO_AxisPack_##TYPE1##_##TYPE2##_##TYPE3 = MHO_AxisPack< MHO_Axis##TYPE1, MHO_Axis##TYPE2, MHO_Axis##TYPE3 >;
230 #define DefAxisPack4(TYPE1, TYPE2, TYPE3, TYPE4) \
231 using MHO_AxisPack_##TYPE1##_##TYPE2##_##TYPE3##_##TYPE4 = \
232 MHO_AxisPack< MHO_Axis##TYPE1, MHO_Axis##TYPE2, MHO_Axis##TYPE3, MHO_Axis##TYPE4 >;
#define msg_error(xKEY, xCONTENT)
Definition: MHO_Message.hh:244
Class MHO_AxisPack.
Definition: MHO_AxisPack.hh:22
std::enable_if<(N==sizeof...(XAxisTypeS)), void >::type copy(const MHO_AxisPack &) const
used for copying the full tuple from one axis pack to another
Definition: MHO_AxisPack.hh:123
MHO_AxisPack(const MHO_AxisPack &obj)
Definition: MHO_AxisPack.hh:29
std::enable_if<(N==sizeof...(XAxisTypeS)), void >::type compute_total_size(uint64_t &) const
Inductively computes and adds total serialized size of tuple elements to uint64_t& (needed for stream...
Definition: MHO_AxisPack.hh:97
virtual uint64_t GetSerializedSize() const override
Getter for serialized size.
Definition: MHO_AxisPack.hh:43
std::integral_constant< std::size_t, sizeof...(XAxisTypeS) > NAXES
Definition: MHO_AxisPack.hh:31
virtual MHO_AxisPack & operator=(const MHO_AxisPack &rhs)
Definition: MHO_AxisPack.hh:55
friend XStream & operator<<(XStream &s, const MHO_AxisPack &aData)
Definition: MHO_AxisPack.hh:140
std::enable_if<(N==sizeof...(XAxisTypeS)), void >::type resize_axis_pack(const std::size_t *)
inductive access to all elements of the tuple, so we can re-size them from an array
Definition: MHO_AxisPack.hh:71
std::tuple< XAxisTypeS... > axis_pack_tuple_type
Definition: MHO_AxisPack.hh:35
virtual ~MHO_AxisPack()
Definition: MHO_AxisPack.hh:31
MHO_AxisPack(const std::size_t *dim)
Definition: MHO_AxisPack.hh:26
MHO_AxisPack()
Definition: MHO_AxisPack.hh:24
std::enable_if<(N< sizeof...(XAxisTypeS)), void >::type resize_axis_pack(const std::size_t *dim)
Resize each element of the axis pack using the dimensions specified in dim.
Definition: MHO_AxisPack.hh:80
friend XStream & operator>>(XStream &s, MHO_AxisPack &aData)
Definition: MHO_AxisPack.hh:155
std::enable_if<(N< sizeof...(XAxisTypeS)), void >::type copy(const MHO_AxisPack &rhs)
Copies an axis pack recursively using template meta-programming.
Definition: MHO_AxisPack.hh:133
std::enable_if<(N< sizeof...(XAxisTypeS)), void >::type compute_total_size(uint64_t &total_size) const
Recursively computes and adds serialized size of Nth XAxisTypeS element to total_size.
Definition: MHO_AxisPack.hh:107
Class MHO_Serializable.
Definition: MHO_Serializable.hh:26
virtual MHO_ClassVersion GetVersion() const
Getter for version.
Definition: MHO_Serializable.hh:46
Definition: MHO_ChannelLabeler.hh:17
std::enable_if<(N >=sizeof...(T)), XStream & >::type istream_tuple(XStream &s, std::tuple< T... > &)
Returns an XStream& without modification for terminating case.
Definition: MHO_Meta.hh:155
int Int
Definition: MHO_AxisPack.hh:219
DefAxisPack3(Int, Int, Int)
uint32_t MHO_ClassVersion
Definition: MHO_ClassIdentity.hh:22
std::string String
Definition: MHO_AxisPack.hh:221
DefAxisPack4(Int, Int, Int, Int)
double Double
Definition: MHO_AxisPack.hh:220
std::enable_if<(N >=sizeof...(T)), XStream & >::type ostream_tuple(XStream &s, const std::tuple< T... > &)
Terminating case for ostream_tuple, does nothing and returns s.
Definition: MHO_Meta.hh:118
static void ClassVersionErrorMsg(const XClassType &obj, MHO_ClassVersion version)
Generates an error message for when an unknown or unsupported class version is encountered.
Definition: MHO_ClassIdentity.hh:99
static std::string ClassName()
Returns the class name as a string.
Definition: MHO_ClassIdentity.hh:36
static void SetUnknown(XStreamType &)
Setter for unknown.
Definition: MHO_FileStreamer.hh:215