From 181f0b281fbd3bfb013c371c1f3cba4c9429759d Mon Sep 17 00:00:00 2001 From: cxl Date: Sun, 28 Feb 2010 13:37:30 +0000 Subject: [PATCH] reference: XmlizeCustomValue example git-svn-id: svn://ultimatepp.org/upp/trunk@2156 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- .../XmlizeCustomValue/XmlizeCustomValue.cpp | 43 +++++++++++++++++++ .../XmlizeCustomValue/XmlizeCustomValue.upp | 11 +++++ 2 files changed, 54 insertions(+) create mode 100644 reference/XmlizeCustomValue/XmlizeCustomValue.cpp create mode 100644 reference/XmlizeCustomValue/XmlizeCustomValue.upp 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 + "" = ""; +