]> git.sesse.net Git - xml-template/blobdiff - c++0x/xml-template.cpp
Make Clone and Alternate in C++0x handle embedded NULL values (kind of pointless...
[xml-template] / c++0x / xml-template.cpp
index 9e19f0914c03a9a14f7a6d9ad8db6dcf68920441..30e5a7e1e3f96a6d740ebefdb68ea1c2d1c6bfb4 100644 (file)
@@ -74,6 +74,9 @@ void Clone::process(xmlNode *node, bool clean)
        vector<xmlNode *> new_nodes;
 
        for (auto it : subdirectives) {
+               if (it == NULL) {
+                       continue;
+               }
                xmlNode *new_node;
                xmlDOMWrapCloneNode(NULL, node->doc, node, &new_node, node->doc, NULL, 1, 0);
                it->process(new_node, clean);
@@ -102,8 +105,12 @@ Alternate::Alternate(const string &attribute,
                     const vector<string> &alternatives)
     : Clone(subdirectives_subs)
 {
+       unsigned jx = 0;
        for (unsigned ix = 0; ix < subdirectives_subs.size(); ++ix) {
-               string value = alternatives[ix % alternatives.size()];
+               if (subdirectives_subs[ix] == NULL) {
+                       continue;
+               }
+               string value = alternatives[jx++ % alternatives.size()];
                subdirectives_subs[ix]->substitution_map.insert(make_pair(
                        attribute,
                        new Replace { value }));