Squashed 'third_party/boostorg/iterator/' content from commit b2adecb
Change-Id: I284a73816f9cc846742923879275b84c6e0c915c
git-subtree-dir: third_party/boostorg/iterator
git-subtree-split: b2adecb951af025698618f19a3c838bd314966dc
diff --git a/example/node_iterator2.cpp b/example/node_iterator2.cpp
new file mode 100644
index 0000000..f8f873e
--- /dev/null
+++ b/example/node_iterator2.cpp
@@ -0,0 +1,53 @@
+// Copyright David Abrahams 2004. Use, modification and distribution is
+// subject to the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include "node_iterator2.hpp"
+#include <string>
+#include <memory>
+#include <iostream>
+#include <algorithm>
+#include <boost/mem_fn.hpp>
+#include <cassert>
+
+int main()
+{
+
+#if defined(BOOST_NO_CXX11_SMART_PTR)
+
+ std::auto_ptr<node<int> > nodes(new node<int>(42));
+
+#else
+
+ std::unique_ptr<node<int> > nodes(new node<int>(42));
+
+#endif
+
+ nodes->append(new node<std::string>(" is greater than "));
+ nodes->append(new node<int>(13));
+
+ // Check interoperability
+ assert(node_iterator(nodes.get()) == node_const_iterator(nodes.get()));
+ assert(node_const_iterator(nodes.get()) == node_iterator(nodes.get()));
+
+ assert(node_iterator(nodes.get()) != node_const_iterator());
+ assert(node_const_iterator(nodes.get()) != node_iterator());
+
+ std::copy(
+ node_iterator(nodes.get()), node_iterator()
+ , std::ostream_iterator<node_base>(std::cout, " ")
+ );
+ std::cout << std::endl;
+
+ std::for_each(
+ node_iterator(nodes.get()), node_iterator()
+ , boost::mem_fn(&node_base::double_me)
+ );
+
+ std::copy(
+ node_const_iterator(nodes.get()), node_const_iterator()
+ , std::ostream_iterator<node_base>(std::cout, "/")
+ );
+ std::cout << std::endl;
+ return 0;
+}