serialization works for containment and inheritance
This commit is contained in:
@@ -33,7 +33,7 @@ class B: public xml::Serialize {
|
||||
className("b")
|
||||
.persist(i, "i")
|
||||
.persist(txt, "txt")
|
||||
.persist(a);
|
||||
.persist(a, "a");
|
||||
}
|
||||
};
|
||||
|
||||
|
@@ -5,7 +5,7 @@
|
||||
// 1 2 3 4 5 6 7 8
|
||||
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
|
||||
|
||||
// g++ -I../../src ../../src/xml.cxx serialization.cxx
|
||||
// g++ -I../../src ../../src/xml.cxx inherit_serialization.cxx
|
||||
|
||||
#include <xml-cxx/xml.hxx>
|
||||
#include <iostream>
|
||||
@@ -17,7 +17,7 @@ class A: public xml::Serialize {
|
||||
std::string txt;
|
||||
protected:
|
||||
void initXmlMembers() {
|
||||
className("b");
|
||||
className("A");
|
||||
persist(a, "a");
|
||||
persist(txt, "txt");
|
||||
}
|
||||
@@ -25,68 +25,25 @@ class A: public xml::Serialize {
|
||||
|
||||
class B: public A {
|
||||
public:
|
||||
int a;
|
||||
std::string txt;
|
||||
int b;
|
||||
protected:
|
||||
void initXmlMembers() {
|
||||
className("b");
|
||||
persist(a, "a");
|
||||
persist(txt, "txt");
|
||||
A::initXmlMembers();
|
||||
className("B");
|
||||
persist(b, "b");
|
||||
}
|
||||
};
|
||||
|
||||
//! Class with external xml::Serialize
|
||||
class C {
|
||||
public:
|
||||
int a;
|
||||
std::string txt;
|
||||
};
|
||||
|
||||
int main(int, char**) {
|
||||
{ // Serialization as a member
|
||||
std::stringstream ss("<a>\n"
|
||||
"\t<a>1234</a>\n"
|
||||
"\t<txt>Dies ist ein Serialisierungs-Test</txt>\n"
|
||||
"</a>");
|
||||
A a;
|
||||
a._ser.loadXml(ss);
|
||||
if (a.a==1234) a.a=4321;
|
||||
a._ser.saveXml(std::cout)<<std::endl;
|
||||
} { // Inherited Serialization
|
||||
std::stringstream ss("<b>\n"
|
||||
"\t<a>1234</a>\n"
|
||||
"\t<txt>Dies ist ein Serialisierungs-Test</txt>\n"
|
||||
"</b>");
|
||||
B b;
|
||||
b.loadXml(ss);
|
||||
if (b.a==1234) b.a=4321;
|
||||
b.saveXml(std::cout)<<std::endl;
|
||||
} { // External xml::Serialize: "ser" must live in no longer than "c"!
|
||||
std::stringstream ss("<c>\n"
|
||||
"\t<a>1234</a>\n"
|
||||
"\t<txt>Dies ist ein Serialisierungs-Test</txt>\n"
|
||||
"</c>");
|
||||
C c;
|
||||
xml::Serialize ser(xml::Serialize("c")
|
||||
.persist(c.a, "a")
|
||||
.persist(c.txt, "txt"));
|
||||
ser.loadXml(ss);
|
||||
if (c.a==1234) c.a=4321;
|
||||
ser.saveXml(std::cout)<<std::endl;
|
||||
} { // Use xml::Serialize to store anything, e.g. local variables
|
||||
// Important: "ser" must live in no longer than the variables!
|
||||
std::stringstream ss("<d>\n"
|
||||
"\t<a>1234</a>\n"
|
||||
"\t<txt>Dies ist ein Serialisierungs-Test</txt>\n"
|
||||
"</d>");
|
||||
int a;
|
||||
std::string txt;
|
||||
xml::Serialize ser(xml::Serialize("d")
|
||||
.persist(a, "a")
|
||||
.persist(txt, "txt"));
|
||||
ser.loadXml(ss);
|
||||
if (a==1234) a=4321;
|
||||
ser.saveXml(std::cout)<<std::endl;
|
||||
}
|
||||
std::stringstream ss("<B>\n"
|
||||
"\t<b>1234</b>\n"
|
||||
"\t<a>5678</a>\n"
|
||||
"\t<txt>Dies ist ein Serialisierungs-Test</txt>\n"
|
||||
"</B>");
|
||||
B b;
|
||||
b.loadXml(ss);
|
||||
if (b.b==1234) b.b=4321;
|
||||
if (b.a==5678) b.a=8765;
|
||||
b.saveXml(std::cout)<<std::endl;
|
||||
return 0;
|
||||
}
|
||||
|
@@ -6,11 +6,15 @@
|
||||
AM_CXXFLAGS += -I ${top_srcdir}/src
|
||||
AM_LDFLAGS = -L${top_builddir}/src -lxml-cxx
|
||||
|
||||
noinst_PROGRAMS = address node_macros serialization contain_serialization
|
||||
noinst_PROGRAMS = address node_macros serialization \
|
||||
contain_serialization inherit_serialization \
|
||||
list_serialization
|
||||
|
||||
address_SOURCES = address.cxx
|
||||
node_macros_SOURCES = node_macros.cxx
|
||||
serialization_SOURCES = serialization.cxx
|
||||
contain_serialization_SOURCES = contain_serialization.cxx
|
||||
inherit_serialization_SOURCES = inherit_serialization.cxx
|
||||
list_serialization_SOURCES = list_serialization.cxx
|
||||
|
||||
MAINTAINERCLEANFILES = makefile.in
|
||||
|
Reference in New Issue
Block a user