]> git.sesse.net Git - xml-template/blobdiff - c++0x/xml-template.cpp
Add Alternate support to C++0x version, and corresponding attribute2 test.
[xml-template] / c++0x / xml-template.cpp
index fda97fc7ca97b83e28b8b4ab1f3d35558cd3011f..9e19f0914c03a9a14f7a6d9ad8db6dcf68920441 100644 (file)
@@ -49,7 +49,14 @@ string Replace::get_contents() { return str; }
 
 Clone::Clone(const vector<Directive *> &subdirectives)
        : subdirectives(subdirectives) {}
-       
+
+Clone::Clone(const vector<Substitute *> &subdirectives_subs)
+{
+       for (auto it : subdirectives_subs) {
+               subdirectives.push_back(static_cast<Directive *>(it));
+       }
+}
+
 Clone::Clone(initializer_list<Directive *> subdirectives)
        : subdirectives(subdirectives) {}
 
@@ -89,6 +96,19 @@ void Clone::process(xmlNode *node, bool clean)
                clean_node(node);
        }
 }
+       
+Alternate::Alternate(const string &attribute,
+                    const vector<Substitute *> &subdirectives_subs,
+                    const vector<string> &alternatives)
+    : Clone(subdirectives_subs)
+{
+       for (unsigned ix = 0; ix < subdirectives_subs.size(); ++ix) {
+               string value = alternatives[ix % alternatives.size()];
+               subdirectives_subs[ix]->substitution_map.insert(make_pair(
+                       attribute,
+                       new Replace { value }));
+       } 
+}
 
 Substitute::Substitute(const unordered_map<string, Directive*> &substitution_map)
        : substitution_map(substitution_map) {}