summaryrefslogtreecommitdiff
path: root/slicer/xml
diff options
context:
space:
mode:
Diffstat (limited to 'slicer/xml')
-rw-r--r--slicer/xml/Jamfile.jam2
-rw-r--r--slicer/xml/serializer.cpp32
-rw-r--r--slicer/xml/serializer.h34
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