]> git.sesse.net Git - xml-template/blobdiff - c++0x/xml-template.h
Fix a potential bug in the C++0x cleaning.
[xml-template] / c++0x / xml-template.h
index cd417e26465a3be7fba5d59d247af700a2735cdd..8f3d69b19257e3ae85e0d4f57163b39597277c30 100644 (file)
@@ -6,9 +6,11 @@
 #include <string>
 #include <utility>
 #include <unordered_map>
+#include <vector>
 
 class Directive {
  public:
+       virtual ~Directive();
        virtual void process(xmlNode *node, bool clean) = 0;
 };
 
@@ -21,14 +23,31 @@ class Replace : public Directive {
        const std::string str;
 };
 
+class Clone : public Directive {
+ public:
+       Clone(const std::vector<Directive *> &subdirectives);
+       Clone(std::initializer_list<Directive *> subdirectives);
+       ~Clone();
+       virtual void process(xmlNode *node, bool clean);
+
+ private:
+       const std::vector<Directive *> subdirectives;
+};
+
 class Substitute : public Directive {
  public:
        Substitute(const std::unordered_map<std::string, Directive*> &substitution_map);
+       Substitute(std::initializer_list<std::pair<const std::string, Directive*>> substitution_map);
+       ~Substitute();
 
        virtual void process(xmlNode *node, bool clean);
 
  private:
-       const std::unordered_map<std::string, Directive*> &substitution_map;
+       const std::unordered_map<std::string, Directive*> substitution_map;
 };
 
+void process_file(const std::string &input_filename,
+                  const std::string &output_filename,
+                  Directive *root_directive);
+
 #endif  // !defined(_XML_TEMPLATE_H)