#include #include #include "Core/Object.h" #include "Core/Property.h" #include "Core/Serializable.h" #include "Core/Archives.h" using namespace uLib; struct SimpleObject { int value; std::string name; template void serialize(Archive & ar, const unsigned int version) { ar & HRP(value); ar & HRP(name); } }; struct DynamicObject : public Object { float width; int height; DynamicObject() : width(10.0f), height(20) { // Automatic registration of properties based on serialize/HRP ULIB_ACTIVATE_PROPERTIES(*this); } template void serialize(Archive & ar, const unsigned int version) { ar & HRP(width); ar & HRP(height); } }; int main() { SimpleObject obj; obj.value = 42; obj.name = "TestObject"; std::cout << "Testing HRP Serialization to Log..." << std::endl; std::stringstream ss; { uLib::Archive::log_archive ar(ss); ar << boost::serialization::make_nvp("Object", obj); } std::cout << ss.str() << std::endl; std::cout << "Testing HRP Serialization to HRT..." << std::endl; ss.str(""); { uLib::Archive::hrt_oarchive ar(ss); ar << obj; } std::cout << ss.str() << std::endl; std::cout << "Testing HRP Serialization to XML..." << std::endl; ss.str(""); { uLib::Archive::xml_oarchive ar(ss); ar << boost::serialization::make_nvp("Object", obj); } std::cout << ss.str() << std::endl; std::cout << "Testing Dynamic Property Creation via ULIB_ACTIVATE_PROPERTIES macro..." << std::endl; DynamicObject dynObj; // (properties were already created in DynamicObject constructor via macro) std::cout << "Registered Properties in dynObj:" << std::endl; const auto& props = dynObj.GetProperties(); for (auto* p : props) { std::cout << " - [" << p->GetTypeName() << "] " << p->GetName() << " = " << p->GetValueAsString() << std::endl; } if (props.size() == 2) { std::cout << "Dynamic Property Creation SUCCESS!" << std::endl; } else { std::cout << "Dynamic Property Creation FAILED (Expected 2, got " << props.size() << ")" << std::endl; } return 0; }