00001
00002
00003
00004
00005
00006
00007
00008 #include "root.hpp"
00009 #include "boost/lexical_cast.hpp"
00010 #include <boost/test/test_tools.hpp>
00011 #include "foo.hpp"
00012 #include "bar.hpp"
00013
00014 using namespace persist_test;
00015
00016 ph::common::object_base *root::get_composite_object(const std::string &name)
00017 {
00018 if (name == "foos")
00019 return &foos;
00020 else if (name == "bars")
00021 return &bars;
00022 else if (name == "a_foo")
00023 return &a_foo;
00024 else if (name == "templates")
00025 return &templates;
00026 else
00027 return 0;
00028 }
00029
00030 bool root::has(const std::string &name) const
00031 {
00032 return name == "name" || name == "type" || name == "x" || name == "foos" ||
00033 name == "bars" || name == "a_foo" || name == "templates";
00034 }
00035
00036 void root::set(const std::string &name, const std::string &value)
00037 {
00038 if (name == "name")
00039 _name = value;
00040 else if (name == "type")
00041 _type = value;
00042 else if (name == "x")
00043 x = boost::lexical_cast<int>(value);
00044 }
00045
00046 std::string root::get(const std::string &name) const
00047 {
00048 if (name == "name")
00049 return _name;
00050 else if (name == "type")
00051 return _type;
00052 else if (name == "x")
00053 return boost::lexical_cast<std::string>(x);
00054 else
00055 return "unknown: " + name;
00056 }
00057
00058 bool root::write(ph::common::object_writer *writer) const
00059 {
00060 ph::common::object_writer_context c1(writer, _type);
00061 c1.attr("name", _name);
00062 {
00063 ph::common::object_writer_context c2(writer, "x");
00064 c2.data(boost::lexical_cast<std::string>(x));
00065 }
00066 if (foos.vector()->size() > 0)
00067 {
00068 ph::common::object_writer_context c2(writer, "foos");
00069 for (std::vector<ph::common::object_base *>::const_iterator i = foos.vector()->begin();
00070 i != foos.vector()->end(); i++)
00071 if ((*i)->persistable())
00072 (*i)->persistable()->write(writer);
00073 }
00074 if (bars.vector()->size() > 0)
00075 {
00076 ph::common::object_writer_context c2(writer, "bars");
00077 for (std::vector<ph::common::object_base *>::const_iterator i = bars.vector()->begin();
00078 i != bars.vector()->end(); i++)
00079 if ((*i)->persistable())
00080 (*i)->persistable()->write(writer);
00081 }
00082 if (a_foo.obj() != 0)
00083 {
00084 ph::common::object_writer_context c2(writer, "a_foo");
00085 if (a_foo.obj()->persistable())
00086 a_foo.obj()->persistable()->write(writer);
00087 }
00088 if (templates.vector()->size() > 0)
00089 {
00090 ph::common::object_writer_context c2(writer, "templates");
00091 for (std::vector<ph::common::object_base *>::const_iterator i = templates.vector()->begin();
00092 i != templates.vector()->end(); i++)
00093 if ((*i)->persistable())
00094 (*i)->persistable()->write(writer);
00095 }
00096
00097 return true;
00098 }