From c0c25de694ac9a3737b7d6658e9e26a0e0219eab Mon Sep 17 00:00:00 2001 From: AndreaRigoni Date: Wed, 1 Apr 2026 08:46:09 +0000 Subject: [PATCH] feat: add Geant material management classes and enhance serialization macros for NVP and HRP support --- src/Core/Serializable.h | 37 +++++++++++++++++++++++++++++++------ src/Math/ContainerBox.h | 2 +- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/src/Core/Serializable.h b/src/Core/Serializable.h index 03bcfe2..8fe0930 100644 --- a/src/Core/Serializable.h +++ b/src/Core/Serializable.h @@ -71,15 +71,16 @@ namespace serialization { // ACCESS 2 // template struct access2 {}; -// NON FUNZIONA ... SISTEMARE !!!! // ------------------------------------------ template class hrp : public boost::serialization::wrapper_traits> { + 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 make_hrp_enum(const char *name, T &t, const std::vector(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 +inline hrp make_nvp(const char *name, T &t, const char* units) { + return hrp(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) //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// diff --git a/src/Math/ContainerBox.h b/src/Math/ContainerBox.h index ec83c1c..674e571 100644 --- a/src/Math/ContainerBox.h +++ b/src/Math/ContainerBox.h @@ -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(*this)); + ar & NVP("TRS", boost::serialization::base_object(*this)); } /**