84 lines
2.2 KiB
C++
84 lines
2.2 KiB
C++
#include <iostream>
|
|
#include <sstream>
|
|
#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<class Archive>
|
|
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<class Archive>
|
|
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;
|
|
}
|