diff options
Diffstat (limited to 'slicer/xml')
| -rw-r--r-- | slicer/xml/Jamfile.jam | 2 | ||||
| -rw-r--r-- | slicer/xml/serializer.cpp | 32 | ||||
| -rw-r--r-- | slicer/xml/serializer.h | 34 |
3 files changed, 47 insertions, 21 deletions
diff --git a/slicer/xml/Jamfile.jam b/slicer/xml/Jamfile.jam index 97f013c..6c5322b 100644 --- a/slicer/xml/Jamfile.jam +++ b/slicer/xml/Jamfile.jam @@ -13,4 +13,6 @@ lib slicer-xml : <library>boost_filesystem <library>IceUtil <library>libxmlpp + : : + <library>libxmlpp ; diff --git a/slicer/xml/serializer.cpp b/slicer/xml/serializer.cpp index 0cf6b03..103f8f5 100644 --- a/slicer/xml/serializer.cpp +++ b/slicer/xml/serializer.cpp @@ -160,11 +160,6 @@ namespace Slicer { } }; - Xml::Xml(const boost::filesystem::path & p) : - path(p) - { - } - void Xml::DocumentTreeIterate(const xmlpp::Node * node, ModelPartPtr mp) { @@ -234,8 +229,13 @@ namespace Slicer { mp->OnEachChild(boost::bind(&Xml::ModelTreeIterate, root, _1, _2)); } + XmlFile::XmlFile(const boost::filesystem::path & p) : + path(p) + { + } + void - Xml::Deserialize(ModelPartPtr modelRoot) + XmlFile::Deserialize(ModelPartPtr modelRoot) { xmlpp::DomParser dom(path.string()); auto doc = dom.get_document(); @@ -243,11 +243,29 @@ namespace Slicer { } void - Xml::Serialize(ModelPartPtr modelRoot) + XmlFile::Serialize(ModelPartPtr modelRoot) { xmlpp::Document doc; modelRoot->OnEachChild(boost::bind(&Xml::ModelTreeIterateRoot, &doc, _1, _2)); doc.write_to_file_formatted(path.string()); } + + XmlDocument::XmlDocument(xmlpp::Document * & d) : + doc(d) + { + } + + void + XmlDocument::Deserialize(ModelPartPtr modelRoot) + { + DocumentTreeIterate(doc, modelRoot); + } + + void + XmlDocument::Serialize(ModelPartPtr modelRoot) + { + doc = new xmlpp::Document(); + modelRoot->OnEachChild(boost::bind(&Xml::ModelTreeIterateRoot, doc, _1, _2)); + } } diff --git a/slicer/xml/serializer.h b/slicer/xml/serializer.h index 487070b..842b565 100644 --- a/slicer/xml/serializer.h +++ b/slicer/xml/serializer.h @@ -2,32 +2,38 @@ #define SLICER_XML_H #include <slicer/serializer.h> - -namespace xmlpp { - class Document; - class Node; - class Element; - class Attribute; - class ContentNode; -} +#include <libxml++/document.h> namespace Slicer { class Xml : public Serializer { - public: - Xml(const boost::filesystem::path &); - - virtual void Deserialize(ModelPartPtr) override; - virtual void Serialize(ModelPartPtr) override; - protected: static void DocumentTreeIterate(const xmlpp::Node * node, ModelPartPtr mp); static void DocumentTreeIterate(const xmlpp::Document * doc, ModelPartPtr mp); static void ModelTreeIterate(xmlpp::Element *, const std::string &, ModelPartPtr mp); static void ModelTreeIterateRoot(xmlpp::Document *, const std::string &, ModelPartPtr mp); + }; + + class XmlFile : public Xml { + public: + XmlFile(const boost::filesystem::path &); + + virtual void Deserialize(ModelPartPtr) override; + virtual void Serialize(ModelPartPtr) override; private: const boost::filesystem::path path; }; + + class XmlDocument : public Xml { + public: + XmlDocument(xmlpp::Document * &); + + virtual void Deserialize(ModelPartPtr) override; + virtual void Serialize(ModelPartPtr) override; + + private: + xmlpp::Document * & doc; + }; } #endif |
