$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r80266 - in trunk: boost/proto boost/proto/functional boost/proto/functional/range boost/proto/functional/std libs/proto/doc libs/proto/doc/reference/functional libs/proto/doc/reference/functional/range libs/proto/doc/reference/functional/std
From: eric_at_[hidden]
Date: 2012-08-27 17:46:12
Author: eric_niebler
Date: 2012-08-27 17:46:09 EDT (Mon, 27 Aug 2012)
New Revision: 80266
URL: http://svn.boost.org/trac/boost/changeset/80266
Log:
add function objects for <iterator> and some boost.range functions
Added:
   trunk/boost/proto/functional/range/
   trunk/boost/proto/functional/range.hpp   (contents, props changed)
   trunk/boost/proto/functional/range/begin.hpp   (contents, props changed)
   trunk/boost/proto/functional/range/empty.hpp   (contents, props changed)
   trunk/boost/proto/functional/range/end.hpp   (contents, props changed)
   trunk/boost/proto/functional/range/rbegin.hpp   (contents, props changed)
   trunk/boost/proto/functional/range/rend.hpp   (contents, props changed)
   trunk/boost/proto/functional/range/size.hpp   (contents, props changed)
   trunk/boost/proto/functional/std/iterator.hpp   (contents, props changed)
   trunk/libs/proto/doc/reference/functional/range/
   trunk/libs/proto/doc/reference/functional/range.xml   (contents, props changed)
   trunk/libs/proto/doc/reference/functional/range/begin.xml   (contents, props changed)
   trunk/libs/proto/doc/reference/functional/range/empty.xml   (contents, props changed)
   trunk/libs/proto/doc/reference/functional/range/end.xml   (contents, props changed)
   trunk/libs/proto/doc/reference/functional/range/rbegin.xml   (contents, props changed)
   trunk/libs/proto/doc/reference/functional/range/rend.xml   (contents, props changed)
   trunk/libs/proto/doc/reference/functional/range/size.xml   (contents, props changed)
   trunk/libs/proto/doc/reference/functional/std/iterator.xml   (contents, props changed)
Text files modified: 
   trunk/boost/proto/functional.hpp     |     1                                         
   trunk/boost/proto/functional/std.hpp |     1                                         
   trunk/libs/proto/doc/reference.xml   |    57 ++++++++++++++++++++++++++++++++++++++++
   3 files changed, 59 insertions(+), 0 deletions(-)
Modified: trunk/boost/proto/functional.hpp
==============================================================================
--- trunk/boost/proto/functional.hpp	(original)
+++ trunk/boost/proto/functional.hpp	2012-08-27 17:46:09 EDT (Mon, 27 Aug 2012)
@@ -11,5 +11,6 @@
 
 #include <boost/proto/functional/std.hpp>
 #include <boost/proto/functional/fusion.hpp>
+#include <boost/proto/functional/range.hpp>
 
 #endif
Added: trunk/boost/proto/functional/range.hpp
==============================================================================
--- (empty file)
+++ trunk/boost/proto/functional/range.hpp	2012-08-27 17:46:09 EDT (Mon, 27 Aug 2012)
@@ -0,0 +1,19 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file range.hpp
+/// Proto callables for things found in the boost range library
+//
+//  Copyright 2012 Eric Niebler. Distributed under 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)
+
+#ifndef BOOST_PROTO_FUNCTIONAL_RANGE_HPP_EAN_27_08_2012
+#define BOOST_PROTO_FUNCTIONAL_RANGE_HPP_EAN_27_08_2012
+
+#include <boost/proto/functional/range/begin.hpp>
+#include <boost/proto/functional/range/empty.hpp>
+#include <boost/proto/functional/range/end.hpp>
+#include <boost/proto/functional/range/rbegin.hpp>
+#include <boost/proto/functional/range/rend.hpp>
+#include <boost/proto/functional/range/size.hpp>
+
+#endif
Added: trunk/boost/proto/functional/range/begin.hpp
==============================================================================
--- (empty file)
+++ trunk/boost/proto/functional/range/begin.hpp	2012-08-27 17:46:09 EDT (Mon, 27 Aug 2012)
@@ -0,0 +1,51 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file begin.hpp
+/// Proto callables for boost::begin()
+//
+//  Copyright 2012 Eric Niebler. Distributed under 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)
+
+#ifndef BOOST_PROTO_FUNCTIONAL_RANGE_BEGIN_HPP_EAN_27_08_2012
+#define BOOST_PROTO_FUNCTIONAL_RANGE_BEGIN_HPP_EAN_27_08_2012
+
+#include <boost/range/begin.hpp>
+#include <boost/proto/proto_fwd.hpp>
+
+namespace boost { namespace proto { namespace functional
+{
+
+    // A PolymorphicFunctionObject that wraps boost::begin()
+    struct begin
+    {
+        BOOST_PROTO_CALLABLE()
+
+        template<typename Sig>
+        struct result;
+
+        template<typename This, typename Rng>
+        struct result<This(Rng)>
+          : boost::range_iterator<Rng>
+        {};
+
+        template<typename This, typename Rng>
+        struct result<This(Rng &)>
+          : boost::range_iterator<Rng>
+        {};
+
+        template<typename Rng>
+        typename boost::range_iterator<Rng>::type operator()(Rng &rng) const
+        {
+            return boost::begin(rng);
+        }
+
+        template<typename Rng>
+        typename boost::range_iterator<Rng const>::type operator()(Rng const &rng) const
+        {
+            return boost::begin(rng);
+        }
+    };
+
+}}}
+
+#endif
Added: trunk/boost/proto/functional/range/empty.hpp
==============================================================================
--- (empty file)
+++ trunk/boost/proto/functional/range/empty.hpp	2012-08-27 17:46:09 EDT (Mon, 27 Aug 2012)
@@ -0,0 +1,34 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file empty.hpp
+/// Proto callables for boost::empty()
+//
+//  Copyright 2012 Eric Niebler. Distributed under 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)
+
+#ifndef BOOST_PROTO_FUNCTIONAL_RANGE_EMPTY_HPP_EAN_27_08_2012
+#define BOOST_PROTO_FUNCTIONAL_RANGE_EMPTY_HPP_EAN_27_08_2012
+
+#include <boost/range/empty.hpp>
+#include <boost/proto/proto_fwd.hpp>
+
+namespace boost { namespace proto { namespace functional
+{
+
+    // A PolymorphicFunctionObject that wraps boost::empty()
+    struct empty
+    {
+        BOOST_PROTO_CALLABLE()
+
+        typedef bool result_type;
+
+        template<typename Rng>
+        bool operator()(Rng const &rng) const
+        {
+            return boost::empty(rng);
+        }
+    };
+
+}}}
+
+#endif
Added: trunk/boost/proto/functional/range/end.hpp
==============================================================================
--- (empty file)
+++ trunk/boost/proto/functional/range/end.hpp	2012-08-27 17:46:09 EDT (Mon, 27 Aug 2012)
@@ -0,0 +1,51 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file end.hpp
+/// Proto callables for boost::end()
+//
+//  Copyright 2012 Eric Niebler. Distributed under 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)
+
+#ifndef BOOST_PROTO_FUNCTIONAL_RANGE_END_HPP_EAN_27_08_2012
+#define BOOST_PROTO_FUNCTIONAL_RANGE_END_HPP_EAN_27_08_2012
+
+#include <boost/range/end.hpp>
+#include <boost/proto/proto_fwd.hpp>
+
+namespace boost { namespace proto { namespace functional
+{
+
+    // A PolymorphicFunctionObject that wraps boost::end()
+    struct end
+    {
+        BOOST_PROTO_CALLABLE()
+
+        template<typename Sig>
+        struct result;
+
+        template<typename This, typename Rng>
+        struct result<This(Rng)>
+          : boost::range_iterator<Rng>
+        {};
+
+        template<typename This, typename Rng>
+        struct result<This(Rng &)>
+          : boost::range_iterator<Rng>
+        {};
+
+        template<typename Rng>
+        typename boost::range_iterator<Rng>::type operator()(Rng &rng) const
+        {
+            return boost::end(rng);
+        }
+
+        template<typename Rng>
+        typename boost::range_iterator<Rng const>::type operator()(Rng const &rng) const
+        {
+            return boost::end(rng);
+        }
+    };
+
+}}}
+
+#endif
Added: trunk/boost/proto/functional/range/rbegin.hpp
==============================================================================
--- (empty file)
+++ trunk/boost/proto/functional/range/rbegin.hpp	2012-08-27 17:46:09 EDT (Mon, 27 Aug 2012)
@@ -0,0 +1,51 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file rbegin.hpp
+/// Proto callables for boost::rbegin()
+//
+//  Copyright 2012 Eric Niebler. Distributed under 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)
+
+#ifndef BOOST_PROTO_FUNCTIONAL_RANGE_RBEGIN_HPP_EAN_27_08_2012
+#define BOOST_PROTO_FUNCTIONAL_RANGE_RBEGIN_HPP_EAN_27_08_2012
+
+#include <boost/range/rbegin.hpp>
+#include <boost/proto/proto_fwd.hpp>
+
+namespace boost { namespace proto { namespace functional
+{
+
+    // A PolymorphicFunctionObject that wraps boost::rbegin()
+    struct rbegin
+    {
+        BOOST_PROTO_CALLABLE()
+
+        template<typename Sig>
+        struct result;
+
+        template<typename This, typename Rng>
+        struct result<This(Rng)>
+          : boost::range_reverse_iterator<Rng>
+        {};
+
+        template<typename This, typename Rng>
+        struct result<This(Rng &)>
+          : boost::range_reverse_iterator<Rng>
+        {};
+
+        template<typename Rng>
+        typename boost::range_reverse_iterator<Rng>::type operator()(Rng &rng) const
+        {
+            return boost::rbegin(rng);
+        }
+
+        template<typename Rng>
+        typename boost::range_reverse_iterator<Rng const>::type operator()(Rng const &rng) const
+        {
+            return boost::rbegin(rng);
+        }
+    };
+
+}}}
+
+#endif
Added: trunk/boost/proto/functional/range/rend.hpp
==============================================================================
--- (empty file)
+++ trunk/boost/proto/functional/range/rend.hpp	2012-08-27 17:46:09 EDT (Mon, 27 Aug 2012)
@@ -0,0 +1,51 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file rend.hpp
+/// Proto callables for boost::rend()
+//
+//  Copyright 2012 Eric Niebler. Distributed under 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)
+
+#ifndef BOOST_PROTO_FUNCTIONAL_RANGE_REND_HPP_EAN_27_08_2012
+#define BOOST_PROTO_FUNCTIONAL_RANGE_REND_HPP_EAN_27_08_2012
+
+#include <boost/range/rend.hpp>
+#include <boost/proto/proto_fwd.hpp>
+
+namespace boost { namespace proto { namespace functional
+{
+
+    // A PolymorphicFunctionObject that wraps boost::rend()
+    struct rend
+    {
+        BOOST_PROTO_CALLABLE()
+
+        template<typename Sig>
+        struct result;
+
+        template<typename This, typename Rng>
+        struct result<This(Rng)>
+          : boost::range_iterator<Rng>
+        {};
+
+        template<typename This, typename Rng>
+        struct result<This(Rng &)>
+          : boost::range_iterator<Rng>
+        {};
+
+        template<typename Rng>
+        typename boost::range_iterator<Rng>::type operator()(Rng &rng) const
+        {
+            return boost::rend(rng);
+        }
+
+        template<typename Rng>
+        typename boost::range_iterator<Rng const>::type operator()(Rng const &rng) const
+        {
+            return boost::rend(rng);
+        }
+    };
+
+}}}
+
+#endif
Added: trunk/boost/proto/functional/range/size.hpp
==============================================================================
--- (empty file)
+++ trunk/boost/proto/functional/range/size.hpp	2012-08-27 17:46:09 EDT (Mon, 27 Aug 2012)
@@ -0,0 +1,45 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file size.hpp
+/// Proto callables for boost::size()
+//
+//  Copyright 2012 Eric Niebler. Distributed under 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)
+
+#ifndef BOOST_PROTO_FUNCTIONAL_RANGE_SIZE_HPP_EAN_27_08_2012
+#define BOOST_PROTO_FUNCTIONAL_RANGE_SIZE_HPP_EAN_27_08_2012
+
+#include <boost/range/size.hpp>
+#include <boost/proto/proto_fwd.hpp>
+
+namespace boost { namespace proto { namespace functional
+{
+
+    // A PolymorphicFunctionObject that wraps boost::size()
+    struct size
+    {
+        BOOST_PROTO_CALLABLE()
+
+        template<typename Sig>
+        struct result;
+
+        template<typename This, typename Rng>
+        struct result<This(Rng)>
+          : boost::range_size<Rng>
+        {};
+
+        template<typename This, typename Rng>
+        struct result<This(Rng &)>
+          : boost::range_size<Rng>
+        {};
+
+        template<typename Rng>
+        typename boost::range_size<Rng>::type operator()(Rng const &rng) const
+        {
+            return boost::size(rng);
+        }
+    };
+
+}}}
+
+#endif
Modified: trunk/boost/proto/functional/std.hpp
==============================================================================
--- trunk/boost/proto/functional/std.hpp	(original)
+++ trunk/boost/proto/functional/std.hpp	2012-08-27 17:46:09 EDT (Mon, 27 Aug 2012)
@@ -10,5 +10,6 @@
 #define BOOST_PROTO_FUNCTIONAL_STD_HPP_EAN_11_27_2010
 
 #include <boost/proto/functional/std/utility.hpp>
+#include <boost/proto/functional/std/iterator.hpp>
 
 #endif
Added: trunk/boost/proto/functional/std/iterator.hpp
==============================================================================
--- (empty file)
+++ trunk/boost/proto/functional/std/iterator.hpp	2012-08-27 17:46:09 EDT (Mon, 27 Aug 2012)
@@ -0,0 +1,158 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file iterator.hpp
+/// Proto callables for std functions found in \<iterator\>
+//
+//  Copyright 2012 Eric Niebler. Distributed under 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)
+
+#ifndef BOOST_PROTO_FUNCTIONAL_STD_ITERATOR_HPP_EAN_27_08_2012
+#define BOOST_PROTO_FUNCTIONAL_STD_ITERATOR_HPP_EAN_27_08_2012
+
+#include <iterator>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/proto/proto_fwd.hpp>
+
+namespace boost { namespace proto { namespace functional
+{
+
+    // A PolymorphicFunctionObject wrapping std::advance
+    struct advance
+    {
+        BOOST_PROTO_CALLABLE()
+
+        typedef void result_type;
+
+        template<typename InputIterator, typename Distance>
+        void operator()(InputIterator &x, Distance n) const
+        {
+            std::advance(x, n);
+        }
+    };
+
+    // A PolymorphicFunctionObject wrapping std::distance
+    struct distance
+    {
+        BOOST_PROTO_CALLABLE()
+
+        template<typename Sig>
+        struct result;
+
+        template<typename This, typename InputIter1, typename InputIter2>
+        struct result<This(InputIter1, InputIter2)>
+        {
+            typedef
+                typename std::iterator_traits<
+                    typename boost::remove_const<
+                        typename boost::remove_reference<InputIter1>::type
+                    >::type
+                >::difference_type
+            type;
+        };
+
+        template<typename InputIterator>
+        typename std::iterator_traits<InputIterator>::difference_type
+        operator()(InputIterator first, InputIterator last) const
+        {
+            return std::distance(first, last);
+        }
+    };
+
+    // A PolymorphicFunctionObject wrapping std::next
+    struct next
+    {
+        BOOST_PROTO_CALLABLE()
+
+        template<typename Sig>
+        struct result;
+
+        template<typename This, typename ForwardIterator>
+        struct result<This(ForwardIterator)>
+        {
+            typedef
+                typename boost::remove_const<
+                    typename boost::remove_reference<ForwardIterator>::type
+                >::type
+            type;
+        };
+
+        template<typename This, typename ForwardIterator, typename Distance>
+        struct result<This(ForwardIterator, Distance)>
+        {
+            typedef
+                typename boost::remove_const<
+                    typename boost::remove_reference<ForwardIterator>::type
+                >::type
+            type;
+        };
+
+        template<typename ForwardIterator>
+        ForwardIterator operator()(ForwardIterator x) const
+        {
+            return std::advance(
+                x
+              , static_cast<typename std::iterator_traits<ForwardIterator>::difference_type>(1)
+            );
+        }
+
+        template<typename ForwardIterator>
+        ForwardIterator operator()(
+            ForwardIterator x
+          , typename std::iterator_traits<ForwardIterator>::difference_type n
+        ) const
+        {
+            return std::advance(x, n);
+        }
+    };
+
+    // A PolymorphicFunctionObject wrapping std::prior
+    struct prior
+    {
+        BOOST_PROTO_CALLABLE()
+
+        template<typename Sig>
+        struct result;
+
+        template<typename This, typename BidirectionalIterator>
+        struct result<This(BidirectionalIterator)>
+        {
+            typedef
+                typename boost::remove_const<
+                    typename boost::remove_reference<BidirectionalIterator>::type
+                >::type
+            type;
+        };
+
+        template<typename This, typename BidirectionalIterator, typename Distance>
+        struct result<This(BidirectionalIterator, Distance)>
+        {
+            typedef
+                typename boost::remove_const<
+                    typename boost::remove_reference<BidirectionalIterator>::type
+                >::type
+            type;
+        };
+
+        template<typename BidirectionalIterator>
+        BidirectionalIterator operator()(BidirectionalIterator x) const
+        {
+            return std::advance(
+                x
+              , -static_cast<typename std::iterator_traits<BidirectionalIterator>::difference_type>(1)
+            );
+        }
+
+        template<typename BidirectionalIterator>
+        BidirectionalIterator operator()(
+            BidirectionalIterator x
+          , typename std::iterator_traits<BidirectionalIterator>::difference_type n
+        ) const
+        {
+            return std::advance(x, -n);
+        }
+    };
+
+}}}
+
+#endif
Modified: trunk/libs/proto/doc/reference.xml
==============================================================================
--- trunk/libs/proto/doc/reference.xml	(original)
+++ trunk/libs/proto/doc/reference.xml	2012-08-27 17:46:09 EDT (Mon, 27 Aug 2012)
@@ -324,6 +324,11 @@
       </listitem>
       <listitem>
         <computeroutput>
+          <classname alt="boost::proto::functional::advance">proto::functional::advance</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
           <classname alt="boost::proto::functional::as_child">proto::functional::as_child</classname>
         </computeroutput>
       </listitem>
@@ -344,6 +349,11 @@
       </listitem>
       <listitem>
         <computeroutput>
+          <classname alt="boost::proto::functional::begin">proto::functional::begin</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
           <classname alt="boost::proto::functional::child">proto::functional::child</classname>
         </computeroutput>
       </listitem>
@@ -364,6 +374,21 @@
       </listitem>
       <listitem>
         <computeroutput>
+          <classname alt="boost::proto::functional::distance">proto::functional::distance</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::functional::empty">proto::functional::empty</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::functional::end">proto::functional::end</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
           <classname alt="boost::proto::functional::env_var">proto::functional::env_var</classname>
         </computeroutput>
       </listitem>
@@ -404,6 +429,11 @@
       </listitem>
       <listitem>
         <computeroutput>
+          <classname alt="boost::proto::functional::next">proto::functional::next</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
           <classname alt="boost::proto::functional::pop_back">proto::functional::pop_back</classname>
         </computeroutput>
       </listitem>
@@ -414,6 +444,11 @@
       </listitem>
       <listitem>
         <computeroutput>
+          <classname alt="boost::proto::functional::prior">proto::functional::prior</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
           <classname alt="boost::proto::functional::push_back">proto::functional::push_back</classname>
         </computeroutput>
       </listitem>
@@ -424,6 +459,16 @@
       </listitem>
       <listitem>
         <computeroutput>
+          <classname alt="boost::proto::functional::rbegin">proto::functional::rbegin</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
+          <classname alt="boost::proto::functional::rend">proto::functional::rend</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
           <classname alt="boost::proto::functional::reverse">proto::functional::reverse</classname>
         </computeroutput>
       </listitem>
@@ -439,6 +484,11 @@
       </listitem>
       <listitem>
         <computeroutput>
+          <classname alt="boost::proto::functional::size">proto::functional::size</classname>
+        </computeroutput>
+      </listitem>
+      <listitem>
+        <computeroutput>
           <classname alt="boost::proto::functional::unpack_expr">proto::functional::unpack_expr</classname>
         </computeroutput>
       </listitem>
@@ -1243,7 +1293,14 @@
   <xi:include href="reference/functional/fusion/push_back.xml"/>
   <xi:include href="reference/functional/fusion/push_front.xml"/>
   <xi:include href="reference/functional/fusion/reverse.xml"/>
+  <xi:include href="reference/functional/range/begin.xml"/>
+  <xi:include href="reference/functional/range/empty.xml"/>
+  <xi:include href="reference/functional/range/end.xml"/>
+  <xi:include href="reference/functional/range/rbegin.xml"/>
+  <xi:include href="reference/functional/range/rend.xml"/>
+  <xi:include href="reference/functional/range/size.xml"/>
   <xi:include href="reference/functional/std.xml"/>
+  <xi:include href="reference/functional/std/iterator.xml"/>
   <xi:include href="reference/functional/std/utility.xml"/>
   <xi:include href="reference/fusion.xml"/>
   <xi:include href="reference/generate.xml"/>
Added: trunk/libs/proto/doc/reference/functional/range.xml
==============================================================================
--- (empty file)
+++ trunk/libs/proto/doc/reference/functional/range.xml	2012-08-27 17:46:09 EDT (Mon, 27 Aug 2012)
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2012 Eric Niebler
+
+  Distributed under 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)
+  -->
+<header name="boost/proto/functional/range.hpp">
+  <para>Includes all the functional extensions to Proto for the Boost.Range library.</para>
+</header>
Added: trunk/libs/proto/doc/reference/functional/range/begin.xml
==============================================================================
--- (empty file)
+++ trunk/libs/proto/doc/reference/functional/range/begin.xml	2012-08-27 17:46:09 EDT (Mon, 27 Aug 2012)
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2012 Eric Niebler
+
+  Distributed under 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)
+  -->
+<header name="boost/proto/functional/range/begin.hpp">
+  <para>Includes Proto callable <code><classname>boost::proto::functional::begin</classname></code>.</para>
+
+  <namespace name="boost">
+    <namespace name="proto">
+      <namespace name="functional">
+
+        <!-- proto::functional::begin -->
+        <struct name="begin">
+          <purpose>A <conceptname>PolymorphicFunctionObject</conceptname> type that invokes the
+            <code>boost::begin()</code> accessor function on its arguments.</purpose>
+          <description>
+            <para>
+              A <conceptname>PolymorphicFunctionObject</conceptname> type that invokes the
+              <code>boost::begin()</code> accessor function on its arguments.</para>
+          </description>
+          <inherit>
+            <type><classname>proto::callable</classname></type>
+          </inherit>
+          <struct-specialization name="result">
+            <template>
+              <template-type-parameter name="This"/>
+              <template-type-parameter name="Range"/>
+            </template>
+            <specialization>
+              <template-arg>This(Range)</template-arg>
+            </specialization>
+            <inherit>
+              <type>boost::range_iterator<
+      typename boost::remove_reference<Range>::type
+  ></type>
+            </inherit>
+          </struct-specialization>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+              <type>typename boost::range_iterator< Range >::type</type>
+              <template>
+                <template-type-parameter name="Range"/>
+              </template>
+              <parameter name="rng">
+                <paramtype>Range &</paramtype>
+              </parameter>
+              <returns>
+                <para><code>boost::begin(rng)</code></para>
+              </returns>
+            </method>
+            <method name="operator()" cv="const">
+              <type>typename boost::range_iterator< Range const >::type</type>
+              <template>
+                <template-type-parameter name="Range"/>
+              </template>
+              <parameter name="rng">
+                <paramtype>Range const &</paramtype>
+              </parameter>
+              <returns>
+                <para><code>boost::begin(rng)</code></para>
+              </returns>
+            </method>
+          </method-group>
+        </struct>
+
+      </namespace>
+    </namespace>
+  </namespace>
+</header>
Added: trunk/libs/proto/doc/reference/functional/range/empty.xml
==============================================================================
--- (empty file)
+++ trunk/libs/proto/doc/reference/functional/range/empty.xml	2012-08-27 17:46:09 EDT (Mon, 27 Aug 2012)
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2012 Eric Niebler
+
+  Distributed under 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)
+  -->
+<header name="boost/proto/functional/range/empty.hpp">
+  <para>Includes Proto callable <code><classname>boost::proto::functional::empty</classname></code>.</para>
+
+  <namespace name="boost">
+    <namespace name="proto">
+      <namespace name="functional">
+
+        <!-- proto::functional::empty -->
+        <struct name="empty">
+          <purpose>A <conceptname>PolymorphicFunctionObject</conceptname> type that invokes the
+            <code>boost::empty()</code> function on its arguments.</purpose>
+          <description>
+            <para>
+              A <conceptname>PolymorphicFunctionObject</conceptname> type that invokes the
+              <code>boost::empty()</code> function on its arguments.</para>
+          </description>
+          <inherit>
+            <type><classname>proto::callable</classname></type>
+          </inherit>
+          <typedef name="result_type">
+            <type>bool</type>
+          </typedef>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+              <type>bool</type>
+              <template>
+                <template-type-parameter name="Range"/>
+              </template>
+              <parameter name="rng">
+                <paramtype>Range const &</paramtype>
+              </parameter>
+              <returns>
+                <para><code>boost::empty(rng)</code></para>
+              </returns>
+            </method>
+          </method-group>
+        </struct>
+
+      </namespace>
+    </namespace>
+  </namespace>
+</header>
Added: trunk/libs/proto/doc/reference/functional/range/end.xml
==============================================================================
--- (empty file)
+++ trunk/libs/proto/doc/reference/functional/range/end.xml	2012-08-27 17:46:09 EDT (Mon, 27 Aug 2012)
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2012 Eric Niebler
+
+  Distributed under 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)
+  -->
+<header name="boost/proto/functional/range/end.hpp">
+  <para>Includes Proto callable <code><classname>boost::proto::functional::end</classname></code>.</para>
+
+  <namespace name="boost">
+    <namespace name="proto">
+      <namespace name="functional">
+
+        <!-- proto::functional::end -->
+        <struct name="end">
+          <purpose>A <conceptname>PolymorphicFunctionObject</conceptname> type that invokes the
+            <code>boost::end()</code> accessor function on its arguments.</purpose>
+          <description>
+            <para>
+              A <conceptname>PolymorphicFunctionObject</conceptname> type that invokes the
+              <code>boost::end()</code> accessor function on its arguments.</para>
+          </description>
+          <inherit>
+            <type><classname>proto::callable</classname></type>
+          </inherit>
+          <struct-specialization name="result">
+            <template>
+              <template-type-parameter name="This"/>
+              <template-type-parameter name="Range"/>
+            </template>
+            <specialization>
+              <template-arg>This(Range)</template-arg>
+            </specialization>
+            <inherit>
+              <type>boost::range_iterator<
+      typename boost::remove_reference<Range>::type
+  ></type>
+            </inherit>
+          </struct-specialization>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+              <type>typename boost::range_iterator< Range >::type</type>
+              <template>
+                <template-type-parameter name="Range"/>
+              </template>
+              <parameter name="rng">
+                <paramtype>Range &</paramtype>
+              </parameter>
+              <returns>
+                <para><code>boost::end(rng)</code></para>
+              </returns>
+            </method>
+            <method name="operator()" cv="const">
+              <type>typename boost::range_iterator< Range const >::type</type>
+              <template>
+                <template-type-parameter name="Range"/>
+              </template>
+              <parameter name="rng">
+                <paramtype>Range const &</paramtype>
+              </parameter>
+              <returns>
+                <para><code>boost::end(rng)</code></para>
+              </returns>
+            </method>
+          </method-group>
+        </struct>
+
+      </namespace>
+    </namespace>
+  </namespace>
+</header>
Added: trunk/libs/proto/doc/reference/functional/range/rbegin.xml
==============================================================================
--- (empty file)
+++ trunk/libs/proto/doc/reference/functional/range/rbegin.xml	2012-08-27 17:46:09 EDT (Mon, 27 Aug 2012)
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2012 Eric Niebler
+
+  Distributed under 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)
+  -->
+<header name="boost/proto/functional/range/rbegin.hpp">
+  <para>Includes Proto callable <code><classname>boost::proto::functional::rbegin</classname></code>.</para>
+
+  <namespace name="boost">
+    <namespace name="proto">
+      <namespace name="functional">
+
+        <!-- proto::functional::rbegin -->
+        <struct name="rbegin">
+          <purpose>A <conceptname>PolymorphicFunctionObject</conceptname> type that invokes the
+            <code>boost::rbegin()</code> accessor function on its arguments.</purpose>
+          <description>
+            <para>
+              A <conceptname>PolymorphicFunctionObject</conceptname> type that invokes the
+              <code>boost::rbegin()</code> accessor function on its arguments.</para>
+          </description>
+          <inherit>
+            <type><classname>proto::callable</classname></type>
+          </inherit>
+          <struct-specialization name="result">
+            <template>
+              <template-type-parameter name="This"/>
+              <template-type-parameter name="Range"/>
+            </template>
+            <specialization>
+              <template-arg>This(Range)</template-arg>
+            </specialization>
+            <inherit>
+              <type>boost::range_reverse_iterator<
+      typename boost::remove_reference<Range>::type
+  ></type>
+            </inherit>
+          </struct-specialization>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+              <type>typename boost::range_reverse_iterator< Range >::type</type>
+              <template>
+                <template-type-parameter name="Range"/>
+              </template>
+              <parameter name="rng">
+                <paramtype>Range &</paramtype>
+              </parameter>
+              <returns>
+                <para><code>boost::rbegin(rng)</code></para>
+              </returns>
+            </method>
+            <method name="operator()" cv="const">
+              <type>typename boost::range_reverse_iterator< Range const >::type</type>
+              <template>
+                <template-type-parameter name="Range"/>
+              </template>
+              <parameter name="rng">
+                <paramtype>Range const &</paramtype>
+              </parameter>
+              <returns>
+                <para><code>boost::rbegin(rng)</code></para>
+              </returns>
+            </method>
+          </method-group>
+        </struct>
+
+      </namespace>
+    </namespace>
+  </namespace>
+</header>
Added: trunk/libs/proto/doc/reference/functional/range/rend.xml
==============================================================================
--- (empty file)
+++ trunk/libs/proto/doc/reference/functional/range/rend.xml	2012-08-27 17:46:09 EDT (Mon, 27 Aug 2012)
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2012 Eric Niebler
+
+  Distributed under 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)
+  -->
+<header name="boost/proto/functional/range/rend.hpp">
+  <para>Includes Proto callable <code><classname>boost::proto::functional::rend</classname></code>.</para>
+
+  <namespace name="boost">
+    <namespace name="proto">
+      <namespace name="functional">
+
+        <!-- proto::functional::rend -->
+        <struct name="rend">
+          <purpose>A <conceptname>PolymorphicFunctionObject</conceptname> type that invokes the
+            <code>boost::rend()</code> accessor function on its arguments.</purpose>
+          <description>
+            <para>
+              A <conceptname>PolymorphicFunctionObject</conceptname> type that invokes the
+              <code>boost::rend()</code> accessor function on its arguments.</para>
+          </description>
+          <inherit>
+            <type><classname>proto::callable</classname></type>
+          </inherit>
+          <struct-specialization name="result">
+            <template>
+              <template-type-parameter name="This"/>
+              <template-type-parameter name="Range"/>
+            </template>
+            <specialization>
+              <template-arg>This(Range)</template-arg>
+            </specialization>
+            <inherit>
+              <type>boost::range_reverse_iterator<
+      typename boost::remove_reference<Range>::type
+  ></type>
+            </inherit>
+          </struct-specialization>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+              <type>typename boost::range_reverse_iterator< Range >::type</type>
+              <template>
+                <template-type-parameter name="Range"/>
+              </template>
+              <parameter name="rng">
+                <paramtype>Range &</paramtype>
+              </parameter>
+              <returns>
+                <para><code>boost::rend(rng)</code></para>
+              </returns>
+            </method>
+            <method name="operator()" cv="const">
+              <type>typename boost::range_reverse_iterator< Range const >::type</type>
+              <template>
+                <template-type-parameter name="Range"/>
+              </template>
+              <parameter name="rng">
+                <paramtype>Range const &</paramtype>
+              </parameter>
+              <returns>
+                <para><code>boost::rend(rng)</code></para>
+              </returns>
+            </method>
+          </method-group>
+        </struct>
+
+      </namespace>
+    </namespace>
+  </namespace>
+</header>
Added: trunk/libs/proto/doc/reference/functional/range/size.xml
==============================================================================
--- (empty file)
+++ trunk/libs/proto/doc/reference/functional/range/size.xml	2012-08-27 17:46:09 EDT (Mon, 27 Aug 2012)
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2012 Eric Niebler
+
+  Distributed under 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)
+  -->
+<header name="boost/proto/functional/range/size.hpp">
+  <para>Includes Proto callable <code><classname>boost::proto::functional::size</classname></code>.</para>
+
+  <namespace name="boost">
+    <namespace name="proto">
+      <namespace name="functional">
+
+        <!-- proto::functional::size -->
+        <struct name="size">
+          <purpose>A <conceptname>PolymorphicFunctionObject</conceptname> type that invokes the
+            <code>boost::size()</code> function on its arguments.</purpose>
+          <description>
+            <para>
+              A <conceptname>PolymorphicFunctionObject</conceptname> type that invokes the
+              <code>boost::size()</code> function on its arguments.</para>
+          </description>
+          <inherit>
+            <type><classname>proto::callable</classname></type>
+          </inherit>
+          <struct-specialization name="result">
+            <template>
+              <template-type-parameter name="This"/>
+              <template-type-parameter name="Range"/>
+            </template>
+            <specialization>
+              <template-arg>This(Range)</template-arg>
+            </specialization>
+            <inherit>
+              <type>boost::range_size<
+      typename boost::remove_reference<Range>::type
+  ></type>
+            </inherit>
+          </struct-specialization>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+              <type>typename boost::range_size< Range const >::type</type>
+              <template>
+                <template-type-parameter name="Range"/>
+              </template>
+              <parameter name="rng">
+                <paramtype>Range const &</paramtype>
+              </parameter>
+              <returns>
+                <para><code>boost::size(rng)</code></para>
+              </returns>
+            </method>
+          </method-group>
+        </struct>
+
+      </namespace>
+    </namespace>
+  </namespace>
+</header>
Added: trunk/libs/proto/doc/reference/functional/std/iterator.xml
==============================================================================
--- (empty file)
+++ trunk/libs/proto/doc/reference/functional/std/iterator.xml	2012-08-27 17:46:09 EDT (Mon, 27 Aug 2012)
@@ -0,0 +1,247 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2012 Eric Niebler
+
+  Distributed under 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)
+  -->
+<header name="boost/proto/functional/std/iterator.hpp">
+  <para>Includes Proto callables for the functions found in the standard <code><iterator> header</code>.</para>
+
+  <namespace name="boost">
+    <namespace name="proto">
+      <namespace name="functional">
+
+        <!-- proto::functional::advance -->
+        <struct name="advance">
+          <purpose>A <conceptname>PolymorphicFunctionObject</conceptname> type that invokes the
+            <code>std::advance()</code> function on its arguments.</purpose>
+          <description>
+            <para>
+              A <conceptname>PolymorphicFunctionObject</conceptname> type that invokes the
+              <code>std::advance()</code> function on its arguments.</para>
+          </description>
+          <inherit>
+            <type><classname>proto::callable</classname></type>
+          </inherit>
+          <typedef name="result_type">
+            <type>void</type>
+          </typedef>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+              <type>void</type>
+              <template>
+                <template-type-parameter name="InputIterator"/>
+              </template>
+              <template>
+                <template-type-parameter name="Distance"/>
+              </template>
+              <parameter name="x">
+                <paramtype>InputIterator &</paramtype>
+              </parameter>
+              <parameter name="n">
+                <paramtype>Distance</paramtype>
+              </parameter>
+              <description>
+                <para>Calls <code>std::advance(x, n)</code></para>
+              </description>
+            </method>
+          </method-group>
+        </struct>
+
+        <!-- proto::functional::distance -->
+        <struct name="distance">
+          <purpose>A <conceptname>PolymorphicFunctionObject</conceptname> type that invokes the
+            <code>std::distance()</code> function on its arguments.</purpose>
+          <description>
+            <para>
+              A <conceptname>PolymorphicFunctionObject</conceptname> type that invokes the
+              <code>std::distance()</code> function on its arguments.</para>
+          </description>
+          <inherit>
+            <type><classname>proto::callable</classname></type>
+          </inherit>
+          <struct-specialization name="result">
+            <template>
+              <template-type-parameter name="This"/>
+              <template-type-parameter name="InputIterator"/>
+            </template>
+            <specialization>
+              <template-arg>This(InputIterator, InputIterator)</template-arg>
+            </specialization>
+            <typedef name="type">
+              <type>typename std::iterator_traits<
+      typename boost::remove_const<
+        typename boost::remove_reference<InputIterator>::type
+      >::type
+    >::difference_type</type>
+            </typedef>
+          </struct-specialization>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+              <type>void</type>
+              <template>
+                <template-type-parameter name="InputIterator"/>
+              </template>
+              <parameter name="first">
+                <paramtype>InputIterator</paramtype>
+              </parameter>
+              <parameter name="last">
+                <paramtype>InputIterator</paramtype>
+              </parameter>
+              <returns>
+                <para><code>std::distance(first, last)</code></para>
+              </returns>
+            </method>
+          </method-group>
+        </struct>
+        
+        <!-- proto::functional::next -->
+        <struct name="next">
+          <purpose>A <conceptname>PolymorphicFunctionObject</conceptname> type that invokes the
+            <code>std::next()</code> function on its arguments.</purpose>
+          <description>
+            <para>
+              A <conceptname>PolymorphicFunctionObject</conceptname> type that invokes the
+              <code>std::next()</code> function on its arguments.</para>
+          </description>
+          <inherit>
+            <type><classname>proto::callable</classname></type>
+          </inherit>
+          <struct-specialization name="result">
+            <template>
+              <template-type-parameter name="This"/>
+              <template-type-parameter name="ForwardIterator"/>
+            </template>
+            <specialization>
+              <template-arg>This(ForwardIterator)</template-arg>
+            </specialization>
+            <typedef name="type">
+              <type>typename boost::remove_const<
+      typename boost::remove_reference<ForwardIterator>::type
+    >::type</type>
+            </typedef>
+          </struct-specialization>
+          <struct-specialization name="result">
+            <template>
+              <template-type-parameter name="This"/>
+              <template-type-parameter name="ForwardIterator"/>
+              <template-type-parameter name="Distance"/>
+            </template>
+            <specialization>
+              <template-arg>This(ForwardIterator, Distance)</template-arg>
+            </specialization>
+            <typedef name="type">
+              <type>typename boost::remove_const<
+      typename boost::remove_reference<ForwardIterator>::type
+    >::type</type>
+            </typedef>
+          </struct-specialization>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+              <type>void</type>
+              <template>
+                <template-type-parameter name="ForwardIterator"/>
+              </template>
+              <parameter name="x">
+                <paramtype>ForwardIterator</paramtype>
+              </parameter>
+              <returns>
+                <para><code>std::next(x)</code></para>
+              </returns>
+            </method>
+            <method name="operator()" cv="const">
+              <type>void</type>
+              <template>
+                <template-type-parameter name="ForwardIterator"/>
+              </template>
+              <parameter name="x">
+                <paramtype>ForwardIterator</paramtype>
+              </parameter>
+              <parameter name="n">
+                <paramtype>typename std::iterator_traits<ForwardIterator>::difference_type</paramtype>
+              </parameter>
+              <returns>
+                <para><code>std::next(x, n)</code></para>
+              </returns>
+            </method>
+          </method-group>
+        </struct>
+
+        <!-- proto::functional::prior -->
+        <struct name="prior">
+          <purpose>A <conceptname>PolymorphicFunctionObject</conceptname> type that invokes the
+            <code>std::prior()</code> function on its arguments.</purpose>
+          <description>
+            <para>
+              A <conceptname>PolymorphicFunctionObject</conceptname> type that invokes the
+              <code>std::prior()</code> function on its arguments.</para>
+          </description>
+          <inherit>
+            <type><classname>proto::callable</classname></type>
+          </inherit>
+          <struct-specialization name="result">
+            <template>
+              <template-type-parameter name="This"/>
+              <template-type-parameter name="BidirectionalIterator"/>
+            </template>
+            <specialization>
+              <template-arg>This(BidirectionalIterator)</template-arg>
+            </specialization>
+            <typedef name="type">
+              <type>typename boost::remove_const<
+      typename boost::remove_reference<BidirectionalIterator>::type
+    >::type</type>
+            </typedef>
+          </struct-specialization>
+          <struct-specialization name="result">
+            <template>
+              <template-type-parameter name="This"/>
+              <template-type-parameter name="BidirectionalIterator"/>
+              <template-type-parameter name="Distance"/>
+            </template>
+            <specialization>
+              <template-arg>This(BidirectionalIterator, Distance)</template-arg>
+            </specialization>
+            <typedef name="type">
+              <type>typename boost::remove_const<
+      typename boost::remove_reference<BidirectionalIterator>::type
+    >::type</type>
+            </typedef>
+          </struct-specialization>
+          <method-group name="public member functions">
+            <method name="operator()" cv="const">
+              <type>void</type>
+              <template>
+                <template-type-parameter name="BidirectionalIterator"/>
+              </template>
+              <parameter name="x">
+                <paramtype>BidirectionalIterator</paramtype>
+              </parameter>
+              <returns>
+                <para><code>std::prior(x)</code></para>
+              </returns>
+            </method>
+            <method name="operator()" cv="const">
+              <type>void</type>
+              <template>
+                <template-type-parameter name="BidirectionalIterator"/>
+              </template>
+              <parameter name="x">
+                <paramtype>BidirectionalIterator</paramtype>
+              </parameter>
+              <parameter name="n">
+                <paramtype>typename std::iterator_traits<BidirectionalIterator>::difference_type</paramtype>
+              </parameter>
+              <returns>
+                <para><code>std::prior(x, n)</code></para>
+              </returns>
+            </method>
+          </method-group>
+        </struct>
+
+      </namespace>
+    </namespace>
+  </namespace>
+</header>