]> git.sesse.net Git - xml-template/blob - c++0x/xml-template.h
Add a clone test for C++0x (no cloning logic yet, so test fails).
[xml-template] / c++0x / xml-template.h
1 #ifndef _XML_TEMPLATE_H
2 #define _XML_TEMPLATE_H 1
3
4 #include <libxml/tree.h>
5
6 #include <string>
7 #include <utility>
8 #include <unordered_map>
9 #include <vector>
10
11 class Directive {
12  public:
13         virtual void process(xmlNode *node, bool clean) = 0;
14 };
15
16 class Replace : public Directive {
17  public:
18         Replace(const std::string &str);
19         virtual void process(xmlNode *node, bool clean);
20
21  private:
22         const std::string str;
23 };
24
25 class Clone : public Directive {
26  public:
27         Clone(const std::vector<Directive *> &subdirectives);
28         virtual void process(xmlNode *node, bool clean);
29
30  private:
31         const std::vector<Directive *> subdirectives;
32 };
33
34 class Substitute : public Directive {
35  public:
36         Substitute(const std::unordered_map<std::string, Directive*> &substitution_map);
37
38         virtual void process(xmlNode *node, bool clean);
39
40  private:
41         const std::unordered_map<std::string, Directive*> &substitution_map;
42 };
43
44 void process_file(const std::string &input_filename,
45                   const std::string &output_filename,
46                   Directive *root_directive);
47
48 #endif  // !defined(_XML_TEMPLATE_H)