diff options
Diffstat (limited to 'tools/intergen/third_party/pugixml/contrib/foreach.hpp')
-rw-r--r-- | tools/intergen/third_party/pugixml/contrib/foreach.hpp | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/tools/intergen/third_party/pugixml/contrib/foreach.hpp b/tools/intergen/third_party/pugixml/contrib/foreach.hpp new file mode 100644 index 0000000000..319807771c --- /dev/null +++ b/tools/intergen/third_party/pugixml/contrib/foreach.hpp @@ -0,0 +1,64 @@ +/* + * Boost.Foreach support for pugixml classes. + * This file is provided to the public domain. + * Written by Arseny Kapoulkine (arseny.kapoulkine@gmail.com) + */ + +#ifndef HEADER_PUGIXML_FOREACH_HPP +#define HEADER_PUGIXML_FOREACH_HPP + +#include "pugixml.hpp" + +/* + * These types add support for BOOST_FOREACH macro to xml_node and xml_document classes (child iteration only). + * Example usage: + * BOOST_FOREACH(xml_node n, doc) {} + */ + +namespace boost +{ + template <typename> struct range_mutable_iterator; + template <typename> struct range_const_iterator; + + template<> struct range_mutable_iterator<pugi::xml_node> + { + typedef pugi::xml_node::iterator type; + }; + + template<> struct range_const_iterator<pugi::xml_node> + { + typedef pugi::xml_node::iterator type; + }; + + template<> struct range_mutable_iterator<pugi::xml_document> + { + typedef pugi::xml_document::iterator type; + }; + + template<> struct range_const_iterator<pugi::xml_document> + { + typedef pugi::xml_document::iterator type; + }; +} + +/* + * These types add support for BOOST_FOREACH macro to xml_node and xml_document classes (child/attribute iteration). + * Example usage: + * BOOST_FOREACH(xml_node n, children(doc)) {} + * BOOST_FOREACH(xml_node n, attributes(doc)) {} + */ + +namespace pugi +{ + inline xml_object_range<xml_node_iterator> children(const pugi::xml_node& node) + { + return node.children(); + } + + inline xml_object_range<xml_attribute_iterator> attributes(const pugi::xml_node& node) + { + return node.attributes(); + } +} + +#endif |