refactor: standardize object type identification using uLibTypeMacro and update serialization macros
This commit is contained in:
@@ -54,13 +54,13 @@ public:
|
||||
virtual void Updated() override { ULIB_SIGNAL_EMIT(PropertyBase::Updated); }
|
||||
|
||||
// Serialization support for different uLib archives
|
||||
virtual void serialize(Archive::xml_oarchive & ar, const unsigned int version) = 0;
|
||||
virtual void serialize(Archive::xml_iarchive & ar, const unsigned int version) = 0;
|
||||
virtual void serialize(Archive::text_oarchive & ar, const unsigned int version) = 0;
|
||||
virtual void serialize(Archive::text_iarchive & ar, const unsigned int version) = 0;
|
||||
virtual void serialize(Archive::hrt_oarchive & ar, const unsigned int version) = 0;
|
||||
virtual void serialize(Archive::hrt_iarchive & ar, const unsigned int version) = 0;
|
||||
virtual void serialize(Archive::log_archive & ar, const unsigned int version) = 0;
|
||||
virtual void serialize(Archive::xml_oarchive & ar, const unsigned int version) override = 0;
|
||||
virtual void serialize(Archive::xml_iarchive & ar, const unsigned int version) override = 0;
|
||||
virtual void serialize(Archive::text_oarchive & ar, const unsigned int version) override = 0;
|
||||
virtual void serialize(Archive::text_iarchive & ar, const unsigned int version) override = 0;
|
||||
virtual void serialize(Archive::hrt_oarchive & ar, const unsigned int version) override = 0;
|
||||
virtual void serialize(Archive::hrt_iarchive & ar, const unsigned int version) override = 0;
|
||||
virtual void serialize(Archive::log_archive & ar, const unsigned int version) override = 0;
|
||||
};
|
||||
|
||||
|
||||
@@ -407,12 +407,32 @@ private:
|
||||
|
||||
|
||||
/**
|
||||
* @brief Convenience macro to automatically activate and register all HRP members
|
||||
* @brief Convenience macro to automatically activate and register all HRP members
|
||||
* as uLib properties. Usage: ULIB_ACTIVATE_PROPERTIES(obj)
|
||||
*/
|
||||
#define ULIB_ACTIVATE_PROPERTIES(obj) \
|
||||
{ uLib::Archive::property_register_archive _ar_tmp(&(obj)); _ar_tmp & (obj); }
|
||||
|
||||
/**
|
||||
* @brief Declares a private member that automatically calls ULIB_ACTIVATE_PROPERTIES
|
||||
* in every constructor of the class. Place this macro as the last declaration
|
||||
* inside the class body (before the closing brace).
|
||||
*
|
||||
* Usage: ULIB_DECLARE_PROPERTIES(ClassName)
|
||||
*
|
||||
* This replaces per-constructor ULIB_ACTIVATE_PROPERTIES(*this) calls.
|
||||
* RegisterDynamicProperty deduplicates by qualified name, so re-registration
|
||||
* from inherited activators in a hierarchy is safe.
|
||||
*/
|
||||
#define ULIB_DECLARE_PROPERTIES(SelfType) \
|
||||
private: \
|
||||
struct _PropActivator { \
|
||||
_PropActivator(SelfType* self) { \
|
||||
uLib::Archive::property_register_archive _ar(self); \
|
||||
_ar & *self; \
|
||||
} \
|
||||
} _prop_activator{this};
|
||||
|
||||
} // namespace Archive
|
||||
} // namespace uLib
|
||||
|
||||
|
||||
Reference in New Issue
Block a user