feat: add Geant material management classes and enhance serialization macros for NVP and HRP support

This commit is contained in:
AndreaRigoni
2026-04-01 08:46:09 +00:00
parent 34f834d370
commit c0c25de694
2 changed files with 32 additions and 7 deletions

View File

@@ -71,15 +71,16 @@ namespace serialization {
// ACCESS 2 //
template <class T> struct access2 {};
// NON FUNZIONA ... SISTEMARE !!!! // ------------------------------------------
template <class T>
class hrp : public boost::serialization::wrapper_traits<hrp<T>> {
const char *m_name;
const char *m_units;
T &m_value;
bool m_has_range;
T m_min;
T m_max;
T m_min, m_max;
bool m_has_default;
T m_default;
@@ -160,8 +161,12 @@ inline hrp_enum<T> make_hrp_enum(const char *name, T &t, const std::vector<std::
return hrp_enum<T>(name, t, labels, units);
}
#define HRP(name) boost::serialization::make_hrp(BOOST_PP_STRINGIZE(name), name)
#define HRPU(name, units) boost::serialization::make_hrp(BOOST_PP_STRINGIZE(name), name, units)
template <class T>
inline hrp<T> make_nvp(const char *name, T &t, const char* units) {
return hrp<T>(name, t, units);
}
} // namespace serialization
} // namespace boost
@@ -181,7 +186,27 @@ namespace uLib {
#define _AR_OP(r, data, elem) data &BOOST_SERIALIZATION_BASE_OBJECT_NVP(elem);
#define NVP(data) BOOST_SERIALIZATION_NVP(data)
// NAME VALUE PAIR //
#define NVP_GET_MACRO(_1, _2, _3, NAME, ...) NAME
#define NVP(...) NVP_GET_MACRO(__VA_ARGS__, NVP3, NVP2, NVP1)(__VA_ARGS__)
#define NVP1(data) BOOST_SERIALIZATION_NVP(data)
#define NVP2(name, data) boost::serialization::make_nvp(name, data)
#define NVP3(name, data, units) boost::serialization::make_nvp(name, data, units)
// HUMAN READABLE PROPERTY //
#define HRP_GET_MACRO(_1, _2, _3, _4, _5, _6, NAME, ...) NAME
#define HRP(...) HRP_GET_MACRO(__VA_ARGS__, HRP6, HRP5, HRP4, HRP3, HRP2, HRP1)(__VA_ARGS__)
#define HRP1(data) boost::serialization::make_hrp(BOOST_PP_STRINGIZE(data), data)
#define HRP2(name, data) boost::serialization::make_hrp(name, data)
#define HRP3(name, data, units) boost::serialization::make_hrp(name, data, units)
#define HRP4(name, data, units, default) boost::serialization::make_hrp(name, data, units).set_default(default)
#define HRP5(name, data, units, min, max) boost::serialization::make_hrp(name, data, units).range(min, max)
#define HRP6(name, data, units, default, min, max) boost::serialization::make_hrp(name, data, units).set_default(default).range(min, max)
#define HRPU(name, units) boost::serialization::make_hrp(BOOST_PP_STRINGIZE(name), name, units)
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////

View File

@@ -103,7 +103,7 @@ public:
void serialize(ArchiveT & ar, const unsigned int version) {
ar & HRP(Size);
ar & HRP(Origin);
ar & boost::serialization::make_nvp("TRS", boost::serialization::base_object<TRS>(*this));
ar & NVP("TRS", boost::serialization::base_object<TRS>(*this));
}
/**