diff --git a/reference/XmlizeCustomValue/XmlizeCustomValue.cpp b/reference/XmlizeCustomValue/XmlizeCustomValue.cpp new file mode 100644 index 000000000..29171a7a7 --- /dev/null +++ b/reference/XmlizeCustomValue/XmlizeCustomValue.cpp @@ -0,0 +1,43 @@ +#include + +using namespace Upp; + +struct MyCustomValue : AssignValueTypeNo { + int x, y, z; + + int operator==(const MyCustomValue& o) const { return false; } + void Serialize(Stream& s) {} + String ToString() const { return ""; } + unsigned GetHashValue() const { return 0; } + bool IsNullInstance() const { return false; } + + operator Value() const { return RichValue(*this); } + MyCustomValue(const Value& v) { *this = ValueTo(v); } + + MyCustomValue() {} +}; + +void Xmlize(XmlIO xml, MyCustomValue& v) +{ + xml + .Attr("x", v.x) + .Attr("y", v.y) + .Attr("z", v.z) + ; +} + +INITBLOCK { + RichValue::Register(); +} + +REGISTER_VALUE_XMLIZE(MyCustomValue); + +CONSOLE_APP_MAIN +{ + MyCustomValue a; + a.x = 1; + a.y = 2; + a.z = 3; + Value v = a; + LOG(StoreAsXML(v, "Test")); +} diff --git a/reference/XmlizeCustomValue/XmlizeCustomValue.upp b/reference/XmlizeCustomValue/XmlizeCustomValue.upp new file mode 100644 index 000000000..7b7d5460c --- /dev/null +++ b/reference/XmlizeCustomValue/XmlizeCustomValue.upp @@ -0,0 +1,11 @@ +description "Extending Xmlize to support custom Value type\377"; + +uses + Core; + +file + XmlizeCustomValue.cpp; + +mainconfig + "" = ""; +