Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r83402 - in sandbox/container_gen: boost/container_gen libs/container_gen/doc libs/container_gen/doc/html libs/container_gen/doc/html/container_gen libs/container_gen/doc/html/container_gen/reference libs/container_gen/test
From: sponage_at_[hidden]
Date: 2013-03-10 15:43:06


Author: expaler
Date: 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
New Revision: 83402
URL: http://svn.boost.org/trac/boost/changeset/83402

Log:
Boost.ContainerGen: added splice_function_gen metafunction.
Added:
   sandbox/container_gen/boost/container_gen/insert_range_function_gen.hpp (contents, props changed)
   sandbox/container_gen/boost/container_gen/push_range_function_gen.hpp (contents, props changed)
   sandbox/container_gen/boost/container_gen/splice_function_gen.hpp (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/changelog.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/container_gen.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/changelog.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/container_gen.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/emplace_assoc_function_gen.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/emplace_function_gen.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/has_emplace_mfunc_selector.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/has_stable_iters_selector.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/insert_range_function_gen.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/insert_range_result_gen.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_associative_selector.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_flat_assoc_selector.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_hashed_assoc_selector.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_multiple_assoc_selector.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_ptr_selector.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_random_access_selector.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_recursive_selector.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_reversible_selector.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_tr1_selector.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_unique_assoc_selector.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/push_range_function_gen.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/selectors.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/splice_function_gen.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/html/index.html (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_container_gen.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_emplace_assoc_func_gen.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_emplace_function_gen.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_has_emplace_mfunc_sel.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_has_stable_iters_sel.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_ins_range_function_gen.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_insert_range_result_gen.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_is_associative_selector.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_is_flat_assoc_selector.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_is_hashed_assoc_sel.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_is_multiple_assoc_sel.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_is_ptr_selector.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_is_rand_access_selector.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_is_recursive_selector.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_is_reversible_selector.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_is_tr1_selector.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_is_unique_assoc_sel.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_push_range_function_gen.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_selectors.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/ref_splice_function_gen.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/doc/reference.qbk (contents, props changed)
   sandbox/container_gen/libs/container_gen/test/insert_range_function_gen.cpp (contents, props changed)
   sandbox/container_gen/libs/container_gen/test/splice_function_gen.cpp (contents, props changed)

Added: sandbox/container_gen/boost/container_gen/insert_range_function_gen.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/container_gen/insert_range_function_gen.hpp 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,979 @@
+//=======================================================================
+// Copyright (C) 2013 Cromwell D. Enage
+//
+// 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_CONTAINER_GEN_INSERT_RANGE_FUNCTION_GEN_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_INSERT_RANGE_FUNCTION_GEN_HPP_INCLUDED
+
+#include <deque>
+#include <utility>
+#include <algorithm>
+#include <boost/mpl/bool.hpp>
+#include <boost/range.hpp>
+#include <boost/assert.hpp>
+
+namespace boost { namespace detail {
+
+ template <typename F, typename C>
+ class insert_range_function_proxy
+ {
+ C& _container;
+
+ public:
+ explicit insert_range_function_proxy(C& c);
+
+ template <typename Itr>
+ insert_range_function_proxy&
+ operator()(typename C::iterator pos, Itr itr, Itr itr_end);
+
+ template <typename InputRange>
+ insert_range_function_proxy&
+ operator()(typename C::iterator pos, InputRange const& r);
+ };
+
+ template <typename F, typename C>
+ insert_range_function_proxy<F,C>::insert_range_function_proxy(C& c)
+ : _container(c)
+ {
+ }
+
+ template <typename F, typename C>
+ template <typename Itr>
+ inline insert_range_function_proxy<F,C>&
+ insert_range_function_proxy<F,C>::operator()(
+ typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ )
+ {
+ F::evaluate(this->_container, pos, itr, itr_end);
+ return *this;
+ }
+
+ template <typename F, typename C>
+ template <typename InputRange>
+ inline insert_range_function_proxy<F,C>&
+ insert_range_function_proxy<F,C>::operator()(
+ typename C::iterator pos
+ , InputRange const& r
+ )
+ {
+ F::evaluate(this->_container, pos, ::boost::begin(r), ::boost::end(r));
+ return *this;
+ }
+
+ struct fis_insert_range_function
+ {
+ template <typename C>
+ insert_range_function_proxy<fis_insert_range_function,C>
+ operator[](C& _container) const;
+
+ template <typename C, typename InputRange>
+ ::std::pair<typename C::iterator,typename C::iterator>
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , InputRange const& r
+ ) const;
+
+ template <typename C, typename Itr>
+ ::std::pair<typename C::iterator,typename C::iterator>
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ ) const;
+
+ template <typename C, typename Itr>
+ static void
+ evaluate(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ );
+ };
+
+ template <typename C>
+ inline insert_range_function_proxy<fis_insert_range_function,C>
+ fis_insert_range_function::operator[](C& _container) const
+ {
+ return insert_range_function_proxy<fis_insert_range_function,C>(
+ _container
+ );
+ }
+
+ template <typename C, typename InputRange>
+ inline ::std::pair<typename C::iterator,typename C::iterator>
+ fis_insert_range_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , InputRange const& r
+ ) const
+ {
+ return this->operator()(
+ _container
+ , pos
+ , ::boost::begin(r)
+ , ::boost::end(r)
+ );
+ }
+
+ template <typename C, typename Itr>
+ inline ::std::pair<typename C::iterator,typename C::iterator>
+ fis_insert_range_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ ) const
+ {
+ typename C::iterator result_begin = _container.previous(pos);
+ fis_insert_range_function::evaluate(_container, pos, itr, itr_end);
+ return ::std::pair<typename C::iterator,typename C::iterator>(
+ ++result_begin
+ , pos
+ );
+ }
+
+ template <typename C, typename Itr>
+ inline void
+ fis_insert_range_function::evaluate(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ )
+ {
+ _container.insert(pos, itr, itr_end);
+ }
+
+ struct ras_insert_range_function
+ {
+ template <typename C>
+ insert_range_function_proxy<ras_insert_range_function,C>
+ operator[](C& _container) const;
+
+ template <typename C, typename InputRange>
+ ::std::pair<typename C::iterator,typename C::iterator>
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , InputRange const& r
+ ) const;
+
+ template <typename C, typename Itr>
+ ::std::pair<typename C::iterator,typename C::iterator>
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ ) const;
+
+ template <typename C, typename Itr>
+ static void
+ evaluate(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ );
+ };
+
+ template <typename C>
+ inline insert_range_function_proxy<ras_insert_range_function,C>
+ ras_insert_range_function::operator[](C& _container) const
+ {
+ return insert_range_function_proxy<ras_insert_range_function,C>(
+ _container
+ );
+ }
+
+ template <typename C, typename InputRange>
+ inline ::std::pair<typename C::iterator,typename C::iterator>
+ ras_insert_range_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , InputRange const& r
+ ) const
+ {
+ return this->operator()(
+ _container
+ , pos
+ , ::boost::begin(r)
+ , ::boost::end(r)
+ );
+ }
+
+ template <typename C, typename Itr>
+ inline ::std::pair<typename C::iterator,typename C::iterator>
+ ras_insert_range_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ ) const
+ {
+ typename C::size_type const begin_index = (
+ ::std::distance(_container.begin(), pos)
+ );
+ ras_insert_range_function::evaluate(_container, pos, itr, itr_end);
+ return ::std::pair<typename C::iterator,typename C::iterator>(
+ _container.begin() + begin_index
+ , _container.begin() + begin_index + ::std::distance(itr, itr_end)
+ );
+ }
+
+ template <typename C, typename Itr>
+ inline void
+ ras_insert_range_function::evaluate(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ )
+ {
+ _container.insert(pos, itr, itr_end);
+ }
+
+ struct bdq_insert_range_function
+ {
+ template <typename C>
+ insert_range_function_proxy<bdq_insert_range_function,C>
+ operator[](C& _container) const;
+
+ template <typename C, typename InputRange>
+ ::std::pair<typename C::iterator,typename C::iterator>
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , InputRange const& r
+ ) const;
+
+ template <typename C, typename Itr>
+ ::std::pair<typename C::iterator,typename C::iterator>
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ ) const;
+
+ template <typename C, typename Itr>
+ static void
+ evaluate(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ );
+ };
+
+ template <typename C>
+ inline insert_range_function_proxy<bdq_insert_range_function,C>
+ bdq_insert_range_function::operator[](C& _container) const
+ {
+ return insert_range_function_proxy<bdq_insert_range_function,C>(
+ _container
+ );
+ }
+
+ template <typename C, typename InputRange>
+ inline ::std::pair<typename C::iterator,typename C::iterator>
+ bdq_insert_range_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , InputRange const& r
+ ) const
+ {
+ return this->operator()(
+ _container
+ , pos
+ , ::boost::begin(r)
+ , ::boost::end(r)
+ );
+ }
+
+ template <typename C, typename Itr>
+ inline ::std::pair<typename C::iterator,typename C::iterator>
+ bdq_insert_range_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ ) const
+ {
+ typename C::size_type const begin_index = (
+ ::std::distance(_container.begin(), pos)
+ );
+ bdq_insert_range_function::evaluate(_container, pos, itr, itr_end);
+ return ::std::pair<typename C::iterator,typename C::iterator>(
+ _container.begin() + begin_index
+ , _container.begin() + begin_index + ::std::distance(itr, itr_end)
+ );
+ }
+
+ template <typename C, typename Itr>
+ void
+ bdq_insert_range_function::evaluate(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ )
+ {
+ for (; itr != itr_end; ++itr)
+ {
+ ++(pos = _container.insert(pos, *itr));
+ }
+ }
+
+ struct bis_insert_range_function
+ {
+ template <typename C>
+ insert_range_function_proxy<bis_insert_range_function,C>
+ operator[](C& _container) const;
+
+ template <typename C, typename InputRange>
+ ::std::pair<typename C::iterator,typename C::iterator>
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , InputRange const& r
+ ) const;
+
+ template <typename C, typename Itr>
+ ::std::pair<typename C::iterator,typename C::iterator>
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ ) const;
+
+ template <typename C, typename Itr>
+ static void
+ evaluate(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ );
+ };
+
+ template <typename C>
+ inline insert_range_function_proxy<bis_insert_range_function,C>
+ bis_insert_range_function::operator[](C& _container) const
+ {
+ return insert_range_function_proxy<bis_insert_range_function,C>(
+ _container
+ );
+ }
+
+ template <typename C, typename InputRange>
+ inline ::std::pair<typename C::iterator,typename C::iterator>
+ bis_insert_range_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , InputRange const& r
+ ) const
+ {
+ return this->operator()(
+ _container
+ , pos
+ , ::boost::begin(r)
+ , ::boost::end(r)
+ );
+ }
+
+ template <typename C, typename Itr>
+ inline ::std::pair<typename C::iterator,typename C::iterator>
+ bis_insert_range_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ ) const
+ {
+ if (_container.empty())
+ {
+ BOOST_ASSERT(pos == _container.end());
+ bis_insert_range_function::evaluate(_container, pos, itr, itr_end);
+ return ::std::pair<typename C::iterator,typename C::iterator>(
+ _container.begin()
+ , _container.end()
+ );
+ }
+ else
+ {
+ typename C::iterator start = pos;
+ --start;
+ bis_insert_range_function::evaluate(_container, pos, itr, itr_end);
+ return ::std::pair<typename C::iterator,typename C::iterator>(
+ ++start
+ , pos
+ );
+ }
+ }
+
+ template <typename C, typename Itr>
+ inline void
+ bis_insert_range_function::evaluate(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ )
+ {
+ _container.insert(pos, itr, itr_end);
+ }
+
+ struct uac_insert_range_function
+ {
+ template <typename C>
+ insert_range_function_proxy<uac_insert_range_function,C>
+ operator[](C& _container) const;
+
+ template <typename C, typename InputRange>
+ ::std::deque<typename C::iterator>
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , InputRange const& r
+ ) const;
+
+ template <typename C, typename Itr>
+ ::std::deque<typename C::iterator>
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ ) const;
+
+ template <typename C, typename Itr>
+ static void
+ evaluate(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ );
+ };
+
+ template <typename C>
+ inline insert_range_function_proxy<uac_insert_range_function,C>
+ uac_insert_range_function::operator[](C& _container) const
+ {
+ return insert_range_function_proxy<uac_insert_range_function,C>(
+ _container
+ );
+ }
+
+ template <typename C, typename InputRange>
+ inline ::std::deque<typename C::iterator>
+ uac_insert_range_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , InputRange const& r
+ ) const
+ {
+ return this->operator()(
+ _container
+ , pos
+ , ::boost::begin(r)
+ , ::boost::end(r)
+ );
+ }
+
+ template <typename C, typename Itr>
+ ::std::deque<typename C::iterator>
+ uac_insert_range_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ ) const
+ {
+ ::std::deque<typename C::iterator> result;
+
+ for (
+ ::std::pair<typename C::iterator,bool> insert_result;
+ itr != itr_end;
+ ++itr
+ )
+ {
+ insert_result = _container.insert(*itr);
+
+ if (insert_result.second)
+ {
+ result.push_back(insert_result.first);
+ }
+ }
+
+ return result;
+ }
+
+ template <typename C, typename Itr>
+ inline void
+ uac_insert_range_function::evaluate(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ )
+ {
+ _container.insert(itr, itr_end);
+ }
+
+ struct mac_insert_range_function
+ {
+ template <typename C>
+ insert_range_function_proxy<mac_insert_range_function,C>
+ operator[](C& _container) const;
+
+ template <typename C, typename InputRange>
+ ::std::deque<typename C::iterator>
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , InputRange const& r
+ ) const;
+
+ template <typename C, typename Itr>
+ ::std::deque<typename C::iterator>
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ ) const;
+
+ template <typename C, typename Itr>
+ static void
+ evaluate(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ );
+ };
+
+ template <typename C>
+ inline insert_range_function_proxy<mac_insert_range_function,C>
+ mac_insert_range_function::operator[](C& _container) const
+ {
+ return insert_range_function_proxy<mac_insert_range_function,C>(
+ _container
+ );
+ }
+
+ template <typename C, typename InputRange>
+ inline ::std::deque<typename C::iterator>
+ mac_insert_range_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , InputRange const& r
+ ) const
+ {
+ return this->operator()(
+ _container
+ , pos
+ , ::boost::begin(r)
+ , ::boost::end(r)
+ );
+ }
+
+ template <typename C, typename Itr>
+ ::std::deque<typename C::iterator>
+ mac_insert_range_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ ) const
+ {
+ ::std::deque<typename C::iterator> result;
+
+ for (; itr != itr_end; ++itr)
+ {
+ result.push_back(_container.insert(*itr));
+ }
+
+ return result;
+ }
+
+ template <typename C, typename Itr>
+ inline void
+ mac_insert_range_function::evaluate(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ )
+ {
+ _container.insert(itr, itr_end);
+ }
+
+ struct ptr_uac_insert_range_function
+ {
+ template <typename C>
+ insert_range_function_proxy<ptr_uac_insert_range_function,C>
+ operator[](C& _container) const;
+
+ template <typename C, typename InputRange>
+ ::std::deque<typename C::iterator>
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , InputRange const& r
+ ) const;
+
+ template <typename C, typename Itr>
+ ::std::deque<typename C::iterator>
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ ) const;
+
+ template <typename C, typename Itr>
+ static void
+ evaluate(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ );
+ };
+
+ template <typename C>
+ inline insert_range_function_proxy<ptr_uac_insert_range_function,C>
+ ptr_uac_insert_range_function::operator[](C& _container) const
+ {
+ return insert_range_function_proxy<ptr_uac_insert_range_function,C>(
+ _container
+ );
+ }
+
+ template <typename C, typename InputRange>
+ inline ::std::deque<typename C::iterator>
+ ptr_uac_insert_range_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , InputRange const& r
+ ) const
+ {
+ return this->operator()(
+ _container
+ , pos
+ , ::boost::begin(r)
+ , ::boost::end(r)
+ );
+ }
+
+ template <typename C, typename Itr>
+ ::std::deque<typename C::iterator>
+ ptr_uac_insert_range_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ ) const
+ {
+ ::std::deque<typename C::iterator> result;
+
+ for (
+ ::std::pair<typename C::iterator,bool> insert_result;
+ itr != itr_end;
+ ++itr
+ )
+ {
+ insert_result = _container.insert(new typename C::key_type(*itr));
+
+ if (insert_result.second)
+ {
+ result.push_back(insert_result.first);
+ }
+ }
+
+ return result;
+ }
+
+ template <typename C, typename Itr>
+ inline void
+ ptr_uac_insert_range_function::evaluate(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ )
+ {
+ _container.insert(itr, itr_end);
+ }
+
+ struct ptr_mac_insert_range_function
+ {
+ template <typename C>
+ insert_range_function_proxy<ptr_mac_insert_range_function,C>
+ operator[](C& _container) const;
+
+ template <typename C, typename InputRange>
+ ::std::deque<typename C::iterator>
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , InputRange const& r
+ ) const;
+
+ template <typename C, typename Itr>
+ ::std::deque<typename C::iterator>
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ ) const;
+
+ template <typename C, typename Itr>
+ static void
+ evaluate(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ );
+ };
+
+ template <typename C>
+ inline insert_range_function_proxy<ptr_mac_insert_range_function,C>
+ ptr_mac_insert_range_function::operator[](C& _container) const
+ {
+ return insert_range_function_proxy<ptr_mac_insert_range_function,C>(
+ _container
+ );
+ }
+
+ template <typename C, typename InputRange>
+ inline ::std::deque<typename C::iterator>
+ ptr_mac_insert_range_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , InputRange const& r
+ ) const
+ {
+ return this->operator()(
+ _container
+ , pos
+ , ::boost::begin(r)
+ , ::boost::end(r)
+ );
+ }
+
+ template <typename C, typename Itr>
+ ::std::deque<typename C::iterator>
+ ptr_mac_insert_range_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ ) const
+ {
+ ::std::deque<typename C::iterator> result;
+
+ for (; itr != itr_end; ++itr)
+ {
+ result.push_back(
+ _container.insert(new typename C::key_type(*itr))
+ );
+ }
+
+ return result;
+ }
+
+ template <typename C, typename Itr>
+ inline void
+ ptr_mac_insert_range_function::evaluate(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ )
+ {
+ _container.insert(itr, itr_end);
+ }
+
+ struct uns_ac_insert_range_function
+ {
+ template <typename C>
+ insert_range_function_proxy<uns_ac_insert_range_function,C>
+ operator[](C& _container) const;
+
+ template <typename C, typename InputRange>
+ void
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , InputRange const& r
+ ) const;
+
+ template <typename C, typename Itr>
+ void
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ ) const;
+
+ template <typename C, typename Itr>
+ static void
+ evaluate(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ );
+ };
+
+ template <typename C>
+ inline insert_range_function_proxy<uns_ac_insert_range_function,C>
+ uns_ac_insert_range_function::operator[](C& _container) const
+ {
+ return insert_range_function_proxy<uns_ac_insert_range_function,C>(
+ _container
+ );
+ }
+
+ template <typename C, typename InputRange>
+ inline void
+ uns_ac_insert_range_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , InputRange const& r
+ ) const
+ {
+ this->operator()(_container, pos, ::boost::begin(r), ::boost::end(r));
+ }
+
+ template <typename C, typename Itr>
+ inline void
+ uns_ac_insert_range_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ ) const
+ {
+ uns_ac_insert_range_function::evaluate(_container, pos, itr, itr_end);
+ }
+
+ template <typename C, typename Itr>
+ inline void
+ uns_ac_insert_range_function::evaluate(
+ C& _container
+ , typename C::iterator pos
+ , Itr itr
+ , Itr itr_end
+ )
+ {
+ _container.insert(itr, itr_end);
+ }
+}} // namespace boost::detail
+
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/container_gen/has_stable_iters_selector.hpp>
+#include <boost/container_gen/is_associative_selector.hpp>
+#include <boost/container_gen/is_unique_assoc_selector.hpp>
+#include <boost/container_gen/is_multiple_assoc_selector.hpp>
+#include <boost/container_gen/is_ptr_selector.hpp>
+#include <boost/container_gen/is_random_access_selector.hpp>
+
+//[reference__insert_range_function_gen
+namespace boost {
+
+ template <typename Selector>
+ struct insert_range_function_gen
+ //<-
+ : ::boost::mpl::eval_if<
+ is_associative_selector<Selector>
+ , ::boost::mpl::eval_if<
+ has_stable_iterators_selector<Selector>
+ , ::boost::mpl::eval_if<
+ is_ptr_selector<Selector>
+ , ::boost::mpl::if_<
+ is_unique_associative_selector<Selector>
+ , detail::ptr_uac_insert_range_function
+ , detail::ptr_mac_insert_range_function
+ >
+ , ::boost::mpl::if_<
+ is_multiple_associative_selector<Selector>
+ , detail::mac_insert_range_function
+ , detail::uac_insert_range_function
+ >
+ >
+ , ::boost::mpl::identity<detail::uns_ac_insert_range_function>
+ >
+ , ::boost::mpl::if_<
+ is_random_access_selector<Selector>
+ , detail::ras_insert_range_function
+ , detail::bis_insert_range_function
+ >
+ >
+ //->
+ {
+ // typedef ... type;
+ //<-
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1, insert_range_function_gen, (Selector))
+ //->
+ };
+} // namespace boost
+//]
+
+#include <boost/config.hpp>
+#include <boost/container_gen/selectors.hpp>
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+ template <typename AllocatorSelector>
+ struct insert_range_function_gen<slist_selector<AllocatorSelector> >
+ {
+ typedef detail::fis_insert_range_function type;
+ };
+
+ template <typename AllocatorSelector>
+ struct insert_range_function_gen<
+ deque_selector< ::boost::mpl::true_,AllocatorSelector>
+ >
+ {
+ typedef detail::bdq_insert_range_function type;
+ };
+} // namespace boost
+
+#elif !defined BOOST_NO_SLIST
+
+namespace boost {
+
+ template <>
+ struct insert_range_function_gen<slist_selector_base>
+ {
+ typedef detail::fis_insert_range_function type;
+ };
+} // namespace boost
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION, BOOST_NO_SLIST
+
+#endif // BOOST_CONTAINER_GEN_INSERT_RANGE_FUNCTION_GEN_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/container_gen/push_range_function_gen.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/container_gen/push_range_function_gen.hpp 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,705 @@
+//=======================================================================
+// Copyright (C) 2013 Cromwell D. Enage
+//
+// 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_CONTAINER_GEN_PUSH_RANGE_FUNCTION_GEN_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_PUSH_RANGE_FUNCTION_GEN_HPP_INCLUDED
+
+#include <deque>
+#include <utility>
+#include <boost/range.hpp>
+
+namespace boost { namespace detail {
+
+ template <typename F, typename C>
+ class push_range_function_proxy
+ {
+ C& _container;
+
+ public:
+ explicit push_range_function_proxy(C& c);
+
+ template <typename Itr>
+ push_range_function_proxy& operator()(Itr itr, Itr itr_end);
+
+ template <typename InputRange>
+ push_range_function_proxy& operator()(InputRange const& r);
+ };
+
+ template <typename F, typename C>
+ push_range_function_proxy<F,C>::push_range_function_proxy(C& c)
+ : _container(c)
+ {
+ }
+
+ template <typename F, typename C>
+ template <typename Itr>
+ inline push_range_function_proxy<F,C>&
+ push_range_function_proxy<F,C>::operator()(Itr itr, Itr itr_end)
+ {
+ F::evaluate(this->_container, itr, itr_end);
+ return *this;
+ }
+
+ template <typename F, typename C>
+ template <typename InputRange>
+ inline push_range_function_proxy<F,C>&
+ push_range_function_proxy<F,C>::operator()(InputRange const& r)
+ {
+ F::evaluate(this->_container, ::boost::begin(r), ::boost::end(r));
+ return *this;
+ }
+
+ struct fis_push_range_function
+ {
+ template <typename C>
+ push_range_function_proxy<fis_push_range_function,C>
+ operator[](C& _container) const;
+
+ template <typename C, typename InputRange>
+ ::std::pair<typename C::iterator,typename C::iterator>
+ operator()(C& _container, InputRange const& r) const;
+
+ template <typename C, typename Itr>
+ ::std::pair<typename C::iterator,typename C::iterator>
+ operator()(C& _container, Itr itr, Itr itr_end) const;
+
+ template <typename C, typename Itr>
+ static void evaluate(C& _container, Itr itr, Itr itr_end);
+ };
+
+ template <typename C>
+ inline push_range_function_proxy<fis_push_range_function,C>
+ fis_push_range_function::operator[](C& _container) const
+ {
+ return push_range_function_proxy<fis_push_range_function,C>(
+ _container
+ );
+ }
+
+ template <typename C, typename InputRange>
+ inline ::std::pair<typename C::iterator,typename C::iterator>
+ fis_push_range_function::operator()(
+ C& _container
+ , InputRange const& r
+ ) const
+ {
+ return this->operator()(
+ _container
+ , ::boost::begin(r)
+ , ::boost::end(r)
+ );
+ }
+
+ template <typename C, typename Itr>
+ inline ::std::pair<typename C::iterator,typename C::iterator>
+ fis_push_range_function::operator()(
+ C& _container
+ , Itr itr
+ , Itr itr_end
+ ) const
+ {
+ typename C::iterator const range_end = _container.begin();
+ fis_push_range_function::evaluate(_container, itr, itr_end);
+ return ::std::pair<typename C::iterator,typename C::iterator>(
+ _container.begin()
+ , range_end
+ );
+ }
+
+ template <typename C, typename Itr>
+ inline void
+ fis_push_range_function::evaluate(C& _container, Itr itr, Itr itr_end)
+ {
+ _container.insert(_container.begin(), itr, itr_end);
+ }
+
+ struct ras_push_range_function
+ {
+ template <typename C>
+ push_range_function_proxy<ras_push_range_function,C>
+ operator[](C& _container) const;
+
+ template <typename C, typename InputRange>
+ ::std::pair<typename C::iterator,typename C::iterator>
+ operator()(C& _container, InputRange const& r) const;
+
+ template <typename C, typename Itr>
+ ::std::pair<typename C::iterator,typename C::iterator>
+ operator()(C& _container, Itr itr, Itr itr_end) const;
+
+ template <typename C, typename Itr>
+ static void evaluate(C& _container, Itr itr, Itr itr_end);
+ };
+
+ template <typename C>
+ inline push_range_function_proxy<ras_push_range_function,C>
+ ras_push_range_function::operator[](C& _container) const
+ {
+ return push_range_function_proxy<ras_push_range_function,C>(
+ _container
+ );
+ }
+
+ template <typename C, typename InputRange>
+ inline ::std::pair<typename C::iterator,typename C::iterator>
+ ras_push_range_function::operator()(
+ C& _container
+ , InputRange const& r
+ ) const
+ {
+ return this->operator()(
+ _container
+ , ::boost::begin(r)
+ , ::boost::end(r)
+ );
+ }
+
+ template <typename C, typename Itr>
+ inline ::std::pair<typename C::iterator,typename C::iterator>
+ ras_push_range_function::operator()(
+ C& _container
+ , Itr itr
+ , Itr itr_end
+ ) const
+ {
+ if (_container.empty())
+ {
+ ras_push_range_function::evaluate(_container, itr, itr_end);
+ return ::std::pair<typename C::iterator,typename C::iterator>(
+ _container.begin()
+ , _container.end()
+ );
+ }
+ else
+ {
+ typename C::size_type const old_size = _container.size();
+ ras_push_range_function::evaluate(_container, itr, itr_end);
+ return ::std::pair<typename C::iterator,typename C::iterator>(
+ _container.begin() + old_size
+ , _container.end()
+ );
+ }
+ }
+
+ template <typename C, typename Itr>
+ inline void
+ ras_push_range_function::evaluate(C& _container, Itr itr, Itr itr_end)
+ {
+ _container.insert(_container.end(), itr, itr_end);
+ }
+
+ struct bis_push_range_function
+ {
+ template <typename C>
+ push_range_function_proxy<bis_push_range_function,C>
+ operator[](C& _container) const;
+
+ template <typename C, typename InputRange>
+ ::std::pair<typename C::iterator,typename C::iterator>
+ operator()(C& _container, InputRange const& r) const;
+
+ template <typename C, typename Itr>
+ ::std::pair<typename C::iterator,typename C::iterator>
+ operator()(C& _container, Itr itr, Itr itr_end) const;
+
+ template <typename C, typename Itr>
+ static void evaluate(C& _container, Itr itr, Itr itr_end);
+ };
+
+ template <typename C>
+ inline push_range_function_proxy<bis_push_range_function,C>
+ bis_push_range_function::operator[](C& _container) const
+ {
+ return push_range_function_proxy<bis_push_range_function,C>(
+ _container
+ );
+ }
+
+ template <typename C, typename InputRange>
+ inline ::std::pair<typename C::iterator,typename C::iterator>
+ bis_push_range_function::operator()(
+ C& _container
+ , InputRange const& r
+ ) const
+ {
+ return this->operator()(
+ _container
+ , ::boost::begin(r)
+ , ::boost::end(r)
+ );
+ }
+
+ template <typename C, typename Itr>
+ inline ::std::pair<typename C::iterator,typename C::iterator>
+ bis_push_range_function::operator()(
+ C& _container
+ , Itr itr
+ , Itr itr_end
+ ) const
+ {
+ if (_container.empty())
+ {
+ bis_push_range_function::evaluate(_container, itr, itr_end);
+ return ::std::pair<typename C::iterator,typename C::iterator>(
+ _container.begin()
+ , _container.end()
+ );
+ }
+ else
+ {
+ typename C::iterator pos = _container.end();
+ --pos;
+ bis_push_range_function::evaluate(_container, itr, itr_end);
+ return ::std::pair<typename C::iterator,typename C::iterator>(
+ ++pos
+ , _container.end()
+ );
+ }
+ }
+
+ template <typename C, typename Itr>
+ inline void
+ bis_push_range_function::evaluate(C& _container, Itr itr, Itr itr_end)
+ {
+ _container.insert(_container.end(), itr, itr_end);
+ }
+
+ struct uac_push_range_function
+ {
+ template <typename C>
+ push_range_function_proxy<uac_push_range_function,C>
+ operator[](C& _container) const;
+
+ template <typename C, typename InputRange>
+ ::std::deque<typename C::iterator>
+ operator()(C& _container, InputRange const& r) const;
+
+ template <typename C, typename Itr>
+ ::std::deque<typename C::iterator>
+ operator()(C& _container, Itr itr, Itr itr_end) const;
+
+ template <typename C, typename Itr>
+ static void evaluate(C& _container, Itr itr, Itr itr_end);
+ };
+
+ template <typename C>
+ inline push_range_function_proxy<uac_push_range_function,C>
+ uac_push_range_function::operator[](C& _container) const
+ {
+ return push_range_function_proxy<uac_push_range_function,C>(
+ _container
+ );
+ }
+
+ template <typename C, typename InputRange>
+ inline ::std::deque<typename C::iterator>
+ uac_push_range_function::operator()(
+ C& _container
+ , InputRange const& r
+ ) const
+ {
+ return this->operator()(
+ _container
+ , ::boost::begin(r)
+ , ::boost::end(r)
+ );
+ }
+
+ template <typename C, typename Itr>
+ ::std::deque<typename C::iterator>
+ uac_push_range_function::operator()(
+ C& _container
+ , Itr itr
+ , Itr itr_end
+ ) const
+ {
+ ::std::deque<typename C::iterator> result;
+
+ for (
+ ::std::pair<typename C::iterator,bool> insert_result;
+ itr != itr_end;
+ ++itr
+ )
+ {
+ insert_result = _container.insert(*itr);
+
+ if (insert_result.second)
+ {
+ result.push_back(insert_result.first);
+ }
+ }
+
+ return result;
+ }
+
+ template <typename C, typename Itr>
+ inline void
+ uac_push_range_function::evaluate(C& _container, Itr itr, Itr itr_end)
+ {
+ _container.insert(itr, itr_end);
+ }
+
+ struct mac_push_range_function
+ {
+ template <typename C>
+ push_range_function_proxy<mac_push_range_function,C>
+ operator[](C& _container) const;
+
+ template <typename C, typename InputRange>
+ ::std::deque<typename C::iterator>
+ operator()(C& _container, InputRange const& r) const;
+
+ template <typename C, typename Itr>
+ ::std::deque<typename C::iterator>
+ operator()(C& _container, Itr itr, Itr itr_end) const;
+
+ template <typename C, typename Itr>
+ static void evaluate(C& _container, Itr itr, Itr itr_end);
+ };
+
+ template <typename C>
+ inline push_range_function_proxy<mac_push_range_function,C>
+ mac_push_range_function::operator[](C& _container) const
+ {
+ return push_range_function_proxy<mac_push_range_function,C>(
+ _container
+ );
+ }
+
+ template <typename C, typename InputRange>
+ inline ::std::deque<typename C::iterator>
+ mac_push_range_function::operator()(
+ C& _container
+ , InputRange const& r
+ ) const
+ {
+ return this->operator()(
+ _container
+ , ::boost::begin(r)
+ , ::boost::end(r)
+ );
+ }
+
+ template <typename C, typename Itr>
+ ::std::deque<typename C::iterator>
+ mac_push_range_function::operator()(
+ C& _container
+ , Itr itr
+ , Itr itr_end
+ ) const
+ {
+ ::std::deque<typename C::iterator> result;
+
+ for (; itr != itr_end; ++itr)
+ {
+ result.push_back(_container.insert(*itr));
+ }
+
+ return result;
+ }
+
+ template <typename C, typename Itr>
+ inline void
+ mac_push_range_function::evaluate(C& _container, Itr itr, Itr itr_end)
+ {
+ _container.insert(itr, itr_end);
+ }
+
+ struct ptr_uac_push_range_function
+ {
+ template <typename C>
+ push_range_function_proxy<ptr_uac_push_range_function,C>
+ operator[](C& _container) const;
+
+ template <typename C, typename InputRange>
+ ::std::deque<typename C::iterator>
+ operator()(C& _container, InputRange const& r) const;
+
+ template <typename C, typename Itr>
+ ::std::deque<typename C::iterator>
+ operator()(C& _container, Itr itr, Itr itr_end) const;
+
+ template <typename C, typename Itr>
+ static void
+ evaluate(C& _container, Itr itr, Itr itr_end);
+ };
+
+ template <typename C>
+ inline push_range_function_proxy<ptr_uac_push_range_function,C>
+ ptr_uac_push_range_function::operator[](C& _container) const
+ {
+ return push_range_function_proxy<ptr_uac_push_range_function,C>(
+ _container
+ );
+ }
+
+ template <typename C, typename InputRange>
+ inline ::std::deque<typename C::iterator>
+ ptr_uac_push_range_function::operator()(
+ C& _container
+ , InputRange const& r
+ ) const
+ {
+ return this->operator()(
+ _container
+ , ::boost::begin(r)
+ , ::boost::end(r)
+ );
+ }
+
+ template <typename C, typename Itr>
+ ::std::deque<typename C::iterator>
+ ptr_uac_push_range_function::operator()(
+ C& _container
+ , Itr itr
+ , Itr itr_end
+ ) const
+ {
+ ::std::deque<typename C::iterator> result;
+
+ for (
+ ::std::pair<typename C::iterator,bool> insert_result;
+ itr != itr_end;
+ ++itr
+ )
+ {
+ insert_result = _container.insert(new typename C::key_type(*itr));
+
+ if (insert_result.second)
+ {
+ result.push_back(insert_result.first);
+ }
+ }
+
+ return result;
+ }
+
+ template <typename C, typename Itr>
+ inline void
+ ptr_uac_push_range_function::evaluate(
+ C& _container
+ , Itr itr
+ , Itr itr_end
+ )
+ {
+ _container.insert(itr, itr_end);
+ }
+
+ struct ptr_mac_push_range_function
+ {
+ template <typename C>
+ push_range_function_proxy<ptr_mac_push_range_function,C>
+ operator[](C& _container) const;
+
+ template <typename C, typename InputRange>
+ ::std::deque<typename C::iterator>
+ operator()(C& _container, InputRange const& r) const;
+
+ template <typename C, typename Itr>
+ ::std::deque<typename C::iterator>
+ operator()(C& _container, Itr itr, Itr itr_end) const;
+
+ template <typename C, typename Itr>
+ static void
+ evaluate(C& _container, Itr itr, Itr itr_end);
+ };
+
+ template <typename C>
+ inline push_range_function_proxy<ptr_mac_push_range_function,C>
+ ptr_mac_push_range_function::operator[](C& _container) const
+ {
+ return push_range_function_proxy<ptr_mac_push_range_function,C>(
+ _container
+ );
+ }
+
+ template <typename C, typename InputRange>
+ inline ::std::deque<typename C::iterator>
+ ptr_mac_push_range_function::operator()(
+ C& _container
+ , InputRange const& r
+ ) const
+ {
+ return this->operator()(
+ _container
+ , ::boost::begin(r)
+ , ::boost::end(r)
+ );
+ }
+
+ template <typename C, typename Itr>
+ ::std::deque<typename C::iterator>
+ ptr_mac_push_range_function::operator()(
+ C& _container
+ , Itr itr
+ , Itr itr_end
+ ) const
+ {
+ ::std::deque<typename C::iterator> result;
+
+ for (; itr != itr_end; ++itr)
+ {
+ result.push_back(
+ _container.insert(new typename C::key_type(*itr))
+ );
+ }
+
+ return result;
+ }
+
+ template <typename C, typename Itr>
+ inline void
+ ptr_mac_push_range_function::evaluate(
+ C& _container
+ , Itr itr
+ , Itr itr_end
+ )
+ {
+ _container.insert(itr, itr_end);
+ }
+
+ struct uns_ac_push_range_function
+ {
+ template <typename C>
+ push_range_function_proxy<uns_ac_push_range_function,C>
+ operator[](C& _container) const;
+
+ template <typename C, typename InputRange>
+ void operator()(C& _container, InputRange const& r) const;
+
+ template <typename C, typename Itr>
+ void operator()(C& _container, Itr itr, Itr itr_end) const;
+
+ template <typename C, typename Itr>
+ static void
+ evaluate(C& _container, Itr itr, Itr itr_end);
+ };
+
+ template <typename C>
+ inline push_range_function_proxy<uns_ac_push_range_function,C>
+ uns_ac_push_range_function::operator[](C& _container) const
+ {
+ return push_range_function_proxy<uns_ac_push_range_function,C>(
+ _container
+ );
+ }
+
+ template <typename C, typename InputRange>
+ inline void
+ uns_ac_push_range_function::operator()(
+ C& _container
+ , InputRange const& r
+ ) const
+ {
+ this->operator()(_container, ::boost::begin(r), ::boost::end(r));
+ }
+
+ template <typename C, typename Itr>
+ inline void
+ uns_ac_push_range_function::operator()(
+ C& _container
+ , Itr itr
+ , Itr itr_end
+ ) const
+ {
+ uns_ac_push_range_function::evaluate(_container, itr, itr_end);
+ }
+
+ template <typename C, typename Itr>
+ inline void
+ uns_ac_push_range_function::evaluate(
+ C& _container
+ , Itr itr
+ , Itr itr_end
+ )
+ {
+ _container.insert(itr, itr_end);
+ }
+}} // namespace boost::detail
+
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/container_gen/has_stable_iters_selector.hpp>
+#include <boost/container_gen/is_associative_selector.hpp>
+#include <boost/container_gen/is_unique_assoc_selector.hpp>
+#include <boost/container_gen/is_multiple_assoc_selector.hpp>
+#include <boost/container_gen/is_ptr_selector.hpp>
+#include <boost/container_gen/is_random_access_selector.hpp>
+
+//[reference__push_range_function_gen
+namespace boost {
+
+ template <typename Selector>
+ struct push_range_function_gen
+ //<-
+ : ::boost::mpl::eval_if<
+ is_associative_selector<Selector>
+ , ::boost::mpl::eval_if<
+ has_stable_iterators_selector<Selector>
+ , ::boost::mpl::eval_if<
+ is_ptr_selector<Selector>
+ , ::boost::mpl::if_<
+ is_unique_associative_selector<Selector>
+ , detail::ptr_uac_push_range_function
+ , detail::ptr_mac_push_range_function
+ >
+ , ::boost::mpl::if_<
+ is_multiple_associative_selector<Selector>
+ , detail::mac_push_range_function
+ , detail::uac_push_range_function
+ >
+ >
+ , ::boost::mpl::identity<detail::uns_ac_push_range_function>
+ >
+ , ::boost::mpl::if_<
+ is_random_access_selector<Selector>
+ , detail::ras_push_range_function
+ , detail::bis_push_range_function
+ >
+ >
+ //->
+ {
+ // typedef ... type;
+ //<-
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1, push_range_function_gen, (Selector))
+ //->
+ };
+} // namespace boost
+//]
+
+#include <boost/config.hpp>
+#include <boost/container_gen/selectors.hpp>
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+ template <typename AllocatorSelector>
+ struct push_range_function_gen<slist_selector<AllocatorSelector> >
+ {
+ typedef detail::fis_push_range_function type;
+ };
+} // namespace boost
+
+#elif !defined BOOST_NO_SLIST
+
+namespace boost {
+
+ template <>
+ struct push_range_function_gen<slist_selector_base>
+ {
+ typedef detail::fis_push_range_function type;
+ };
+} // namespace boost
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION, BOOST_NO_SLIST
+
+#endif // BOOST_CONTAINER_GEN_PUSH_RANGE_FUNCTION_GEN_HPP_INCLUDED
+

Added: sandbox/container_gen/boost/container_gen/splice_function_gen.hpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/boost/container_gen/splice_function_gen.hpp 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,970 @@
+//=======================================================================
+// Copyright (C) 2013 Cromwell D. Enage
+//
+// 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_CONTAINER_GEN_SPLICE_FUNCTION_GEN_HPP_INCLUDED
+#define BOOST_CONTAINER_GEN_SPLICE_FUNCTION_GEN_HPP_INCLUDED
+
+#include <boost/config.hpp>
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#error This metafunction requires partial template specialization support.
+#endif
+
+#include <deque>
+#include <utility>
+#include <algorithm>
+#include <boost/mpl/bool.hpp>
+#include <boost/move/move.hpp>
+#include <boost/range.hpp>
+#include <boost/assert.hpp>
+
+namespace boost { namespace detail {
+
+ template <typename F, typename C>
+ class splice_function_proxy
+ {
+ C& _container;
+
+ public:
+ explicit splice_function_proxy(C& c);
+
+ splice_function_proxy&
+ operator()(
+ typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ );
+
+ splice_function_proxy&
+ operator()(
+ typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ );
+ };
+
+ template <typename F, typename C>
+ splice_function_proxy<F,C>::splice_function_proxy(C& c)
+ : _container(c)
+ {
+ }
+
+ template <typename F, typename C>
+ inline splice_function_proxy<F,C>&
+ splice_function_proxy<F,C>::operator()(
+ typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ )
+ {
+ F::evaluate(this->_container, pos, c, itr);
+ return *this;
+ }
+
+ template <typename F, typename C>
+ inline splice_function_proxy<F,C>&
+ splice_function_proxy<F,C>::operator()(
+ typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ )
+ {
+ F::evaluate(this->_container, pos, c, itr, itr_end);
+ return *this;
+ }
+
+ struct fis_splice_function
+ {
+ template <typename C>
+ splice_function_proxy<fis_splice_function,C>
+ operator[](C& _container) const;
+
+ template <typename C>
+ typename C::iterator
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ ) const;
+
+ template <typename C>
+ ::std::pair<typename C::iterator,typename C::iterator>
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ ) const;
+
+ template <typename C>
+ static void
+ evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ );
+
+ template <typename C>
+ static void
+ evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ );
+ };
+
+ template <typename C>
+ inline splice_function_proxy<fis_splice_function,C>
+ fis_splice_function::operator[](C& _container) const
+ {
+ return splice_function_proxy<fis_splice_function,C>(_container);
+ }
+
+ template <typename C>
+ inline typename C::iterator
+ fis_splice_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ ) const
+ {
+ typename C::iterator result_begin = _container.previous(pos);
+ fis_splice_function::evaluate(
+ _container
+ , pos
+ , c
+ , itr
+ );
+ return ++result_begin;
+ }
+
+ template <typename C>
+ inline ::std::pair<typename C::iterator,typename C::iterator>
+ fis_splice_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ ) const
+ {
+ typename C::iterator result_begin = _container.previous(pos);
+ fis_splice_function::evaluate(
+ _container
+ , pos
+ , c
+ , itr
+ , itr_end
+ );
+ return ::std::pair<typename C::iterator,typename C::iterator>(
+ ++result_begin
+ , pos
+ );
+ }
+
+ template <typename C>
+ inline void
+ fis_splice_function::evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ )
+ {
+ _container.insert(pos, ::boost::move(*itr));
+ c.erase(itr);
+ }
+
+ template <typename C>
+ inline void
+ fis_splice_function::evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ )
+ {
+ _container.insert(
+ pos
+ , ::boost::move_iterator<typename C::iterator>(itr)
+ , ::boost::move_iterator<typename C::iterator>(itr_end)
+ );
+ c.erase(itr, itr_end);
+ }
+
+ struct ras_splice_function
+ {
+ template <typename C>
+ splice_function_proxy<ras_splice_function,C>
+ operator[](C& _container) const;
+
+ template <typename C>
+ typename C::iterator
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ ) const;
+
+ template <typename C>
+ ::std::pair<typename C::iterator,typename C::iterator>
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ ) const;
+
+ template <typename C>
+ static void
+ evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ );
+
+ template <typename C>
+ static void
+ evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ );
+ };
+
+ template <typename C>
+ inline splice_function_proxy<ras_splice_function,C>
+ ras_splice_function::operator[](C& _container) const
+ {
+ return splice_function_proxy<ras_splice_function,C>(_container);
+ }
+
+ template <typename C>
+ inline typename C::iterator
+ ras_splice_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ ) const
+ {
+ typename C::size_type const index = (
+ ::std::distance(_container.begin(), pos)
+ );
+ ras_splice_function::evaluate(
+ _container
+ , pos
+ , c
+ , itr
+ );
+ return _container.begin() + index;
+ }
+
+ template <typename C>
+ inline ::std::pair<typename C::iterator,typename C::iterator>
+ ras_splice_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ ) const
+ {
+ typename C::size_type const begin_index = (
+ ::std::distance(_container.begin(), pos)
+ );
+ ras_splice_function::evaluate(
+ _container
+ , pos
+ , c
+ , itr
+ , itr_end
+ );
+ return ::std::pair<typename C::iterator,typename C::iterator>(
+ _container.begin() + begin_index
+ , _container.begin() + begin_index + ::std::distance(itr, itr_end)
+ );
+ }
+
+ template <typename C>
+ inline void
+ ras_splice_function::evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ )
+ {
+ _container.insert(pos, ::boost::move(*itr));
+ c.erase(itr);
+ }
+
+ template <typename C>
+ inline void
+ ras_splice_function::evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ )
+ {
+ _container.insert(
+ pos
+ , ::boost::move_iterator<typename C::iterator>(itr)
+ , ::boost::move_iterator<typename C::iterator>(itr_end)
+ );
+ c.erase(itr, itr_end);
+ }
+
+ struct ptr_ras_splice_function
+ {
+ template <typename C>
+ splice_function_proxy<ptr_ras_splice_function,C>
+ operator[](C& _container) const;
+
+ template <typename C>
+ typename C::iterator
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ ) const;
+
+ template <typename C>
+ ::std::pair<typename C::iterator,typename C::iterator>
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ ) const;
+
+ template <typename C>
+ static void
+ evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ );
+
+ template <typename C>
+ static void
+ evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ );
+ };
+
+ template <typename C>
+ inline splice_function_proxy<ptr_ras_splice_function,C>
+ ptr_ras_splice_function::operator[](C& _container) const
+ {
+ return splice_function_proxy<ptr_ras_splice_function,C>(_container);
+ }
+
+ template <typename C>
+ inline typename C::iterator
+ ptr_ras_splice_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ ) const
+ {
+ typename C::size_type const index = (
+ ::std::distance(_container.begin(), pos)
+ );
+ ptr_ras_splice_function::evaluate(
+ _container
+ , pos
+ , c
+ , itr
+ );
+ return _container.begin() + index;
+ }
+
+ template <typename C>
+ inline ::std::pair<typename C::iterator,typename C::iterator>
+ ptr_ras_splice_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ ) const
+ {
+ typename C::size_type const begin_index = (
+ ::std::distance(_container.begin(), pos)
+ );
+ ptr_ras_splice_function::evaluate(
+ _container
+ , pos
+ , c
+ , itr
+ , itr_end
+ );
+ return ::std::pair<typename C::iterator,typename C::iterator>(
+ _container.begin() + begin_index
+ , _container.begin() + begin_index + ::std::distance(itr, itr_end)
+ );
+ }
+
+ template <typename C>
+ inline void
+ ptr_ras_splice_function::evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ )
+ {
+ _container.transfer(pos, itr, c);
+ }
+
+ template <typename C>
+ inline void
+ ptr_ras_splice_function::evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ )
+ {
+ _container.transfer(pos, itr, itr_end, c);
+ }
+
+ struct bdq_splice_function
+ {
+ template <typename C>
+ splice_function_proxy<bdq_splice_function,C>
+ operator[](C& _container) const;
+
+ template <typename C>
+ typename C::iterator
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ ) const;
+
+ template <typename C>
+ ::std::pair<typename C::iterator,typename C::iterator>
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ ) const;
+
+ template <typename C>
+ static void
+ evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ );
+
+ template <typename C>
+ static void
+ evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ );
+ };
+
+ template <typename C>
+ inline splice_function_proxy<bdq_splice_function,C>
+ bdq_splice_function::operator[](C& _container) const
+ {
+ return splice_function_proxy<bdq_splice_function,C>(_container);
+ }
+
+ template <typename C>
+ inline typename C::iterator
+ bdq_splice_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ ) const
+ {
+ typename C::size_type const index = (
+ ::std::distance(_container.begin(), pos)
+ );
+ bdq_splice_function::evaluate(
+ _container
+ , pos
+ , c
+ , itr
+ );
+ return _container.begin() + index;
+ }
+
+ template <typename C>
+ inline ::std::pair<typename C::iterator,typename C::iterator>
+ bdq_splice_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ ) const
+ {
+ typename C::size_type const begin_index = (
+ ::std::distance(_container.begin(), pos)
+ );
+ bdq_splice_function::evaluate(
+ _container
+ , pos
+ , c
+ , itr
+ , itr_end
+ );
+ return ::std::pair<typename C::iterator,typename C::iterator>(
+ _container.begin() + begin_index
+ , _container.begin() + begin_index + ::std::distance(itr, itr_end)
+ );
+ }
+
+ template <typename C>
+ inline void
+ bdq_splice_function::evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ )
+ {
+ _container.insert(pos, ::boost::move(*itr));
+ c.erase(itr);
+ }
+
+ template <typename C>
+ void
+ bdq_splice_function::evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ )
+ {
+ ::boost::move_iterator<typename C::iterator> move_end(itr_end);
+
+ for (
+ ::boost::move_iterator<typename C::iterator> move_itr(itr);
+ move_itr != move_end;
+ ++move_itr
+ )
+ {
+ ++(pos = _container.insert(pos, *move_itr));
+ }
+
+ c.erase(itr, itr_end);
+ }
+
+ struct bis_splice_function
+ {
+ template <typename C>
+ splice_function_proxy<bis_splice_function,C>
+ operator[](C& _container) const;
+
+ template <typename C>
+ typename C::iterator
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ ) const;
+
+ template <typename C>
+ ::std::pair<typename C::iterator,typename C::iterator>
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ ) const;
+
+ template <typename C>
+ static void
+ evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ );
+
+ template <typename C>
+ static void
+ evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ );
+ };
+
+ template <typename C>
+ inline splice_function_proxy<bis_splice_function,C>
+ bis_splice_function::operator[](C& _container) const
+ {
+ return splice_function_proxy<bis_splice_function,C>(_container);
+ }
+
+ template <typename C>
+ inline typename C::iterator
+ bis_splice_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ ) const
+ {
+ if (_container.empty())
+ {
+ BOOST_ASSERT(pos == _container.end());
+ bis_splice_function::evaluate(
+ _container
+ , pos
+ , c
+ , itr
+ );
+ return _container.begin();
+ }
+ else
+ {
+ typename C::iterator start = pos;
+ --start;
+ bis_splice_function::evaluate(
+ _container
+ , pos
+ , c
+ , itr
+ );
+ return ++start;
+ }
+ }
+
+ template <typename C>
+ inline ::std::pair<typename C::iterator,typename C::iterator>
+ bis_splice_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ ) const
+ {
+ if (_container.empty())
+ {
+ BOOST_ASSERT(pos == _container.end());
+ bis_splice_function::evaluate(
+ _container
+ , pos
+ , c
+ , itr
+ , itr_end
+ );
+ return ::std::pair<typename C::iterator,typename C::iterator>(
+ _container.begin()
+ , _container.end()
+ );
+ }
+ else
+ {
+ typename C::iterator start = pos;
+ --start;
+ bis_splice_function::evaluate(
+ _container
+ , pos
+ , c
+ , itr
+ , itr_end
+ );
+ return ::std::pair<typename C::iterator,typename C::iterator>(
+ ++start
+ , pos
+ );
+ }
+ }
+
+ template <typename C>
+ inline void
+ bis_splice_function::evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ )
+ {
+ _container.insert(pos, ::boost::move(*itr));
+ c.erase(itr);
+ }
+
+ template <typename C>
+ inline void
+ bis_splice_function::evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ )
+ {
+ _container.insert(
+ pos
+ , ::boost::move_iterator<typename C::iterator>(itr)
+ , ::boost::move_iterator<typename C::iterator>(itr_end)
+ );
+ c.erase(itr, itr_end);
+ }
+
+ struct ptr_bis_splice_function
+ {
+ template <typename C>
+ splice_function_proxy<ptr_bis_splice_function,C>
+ operator[](C& _container) const;
+
+ template <typename C>
+ typename C::iterator
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ ) const;
+
+ template <typename C>
+ ::std::pair<typename C::iterator,typename C::iterator>
+ operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ ) const;
+
+ template <typename C>
+ static void
+ evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ );
+
+ template <typename C>
+ static void
+ evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ );
+ };
+
+ template <typename C>
+ inline splice_function_proxy<ptr_bis_splice_function,C>
+ ptr_bis_splice_function::operator[](C& _container) const
+ {
+ return splice_function_proxy<ptr_bis_splice_function,C>(_container);
+ }
+
+ template <typename C>
+ inline typename C::iterator
+ ptr_bis_splice_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ ) const
+ {
+ if (_container.empty())
+ {
+ BOOST_ASSERT(pos == _container.end());
+ ptr_bis_splice_function::evaluate(
+ _container
+ , pos
+ , c
+ , itr
+ );
+ return _container.begin();
+ }
+ else
+ {
+ typename C::iterator start = pos;
+ --start;
+ ptr_bis_splice_function::evaluate(
+ _container
+ , pos
+ , c
+ , itr
+ );
+ return ++start;
+ }
+ }
+
+ template <typename C>
+ inline ::std::pair<typename C::iterator,typename C::iterator>
+ ptr_bis_splice_function::operator()(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ ) const
+ {
+ if (_container.empty())
+ {
+ BOOST_ASSERT(pos == _container.end());
+ ptr_bis_splice_function::evaluate(
+ _container
+ , pos
+ , c
+ , itr
+ , itr_end
+ );
+ return ::std::pair<typename C::iterator,typename C::iterator>(
+ _container.begin()
+ , _container.end()
+ );
+ }
+ else
+ {
+ typename C::iterator start = pos;
+ --start;
+ ptr_bis_splice_function::evaluate(
+ _container
+ , pos
+ , c
+ , itr
+ , itr_end
+ );
+ return ::std::pair<typename C::iterator,typename C::iterator>(
+ ++start
+ , pos
+ );
+ }
+ }
+
+ template <typename C>
+ inline void
+ ptr_bis_splice_function::evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ )
+ {
+ _container.transfer(pos, itr, c);
+ }
+
+ template <typename C>
+ inline void
+ ptr_bis_splice_function::evaluate(
+ C& _container
+ , typename C::iterator pos
+ , C& c
+ , typename C::iterator itr
+ , typename C::iterator itr_end
+ )
+ {
+ _container.transfer(pos, itr, itr_end, c);
+ }
+}} // namespace boost::detail
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/container_gen/is_ptr_selector.hpp>
+#include <boost/container_gen/is_random_access_selector.hpp>
+#include <boost/container_gen/has_stable_iters_selector.hpp>
+
+//[reference__splice_function_gen
+namespace boost {
+
+ template <typename Selector>
+ struct splice_function_gen
+ //<-
+ : ::boost::mpl::eval_if<
+ is_ptr_selector<Selector>
+ , ::boost::mpl::if_<
+ is_random_access_selector<Selector>
+ , detail::ptr_ras_splice_function
+ , detail::ptr_bis_splice_function
+ >
+ , ::boost::mpl::if_<
+ has_stable_iterators_selector<Selector>
+ , detail::bis_splice_function
+ , detail::ras_splice_function
+ >
+ >
+ //->
+ {
+ // typedef ... type;
+ //<-
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1, splice_function_gen, (Selector))
+ //->
+ };
+} // namespace boost
+//]
+
+#include <boost/container_gen/selectors.hpp>
+
+namespace boost {
+
+ template <typename AllocatorSelector>
+ struct splice_function_gen<slist_selector<AllocatorSelector> >
+ {
+ typedef detail::fis_splice_function type;
+ };
+
+ template <typename AllocatorSelector>
+ struct splice_function_gen<
+ deque_selector< ::boost::mpl::true_,AllocatorSelector>
+ >
+ {
+ typedef detail::bdq_splice_function type;
+ };
+} // namespace boost
+
+#endif // BOOST_CONTAINER_GEN_SPLICE_FUNCTION_GEN_HPP_INCLUDED
+

Added: sandbox/container_gen/libs/container_gen/doc/changelog.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/changelog.qbk 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,55 @@
+[/=============================================================================
+ Copyright (C) 2011-2013 Cromwell D. Enage
+
+ 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])
+=============================================================================/]
+
+[section Changelog]
+
+[heading From 0.5 to 0.6]
+
+ * Added __push_range_function_gen__, __insert_range_function_gen__,
+ __splice_function_gen__, and __insert_range_function_gen__ type-generating
+ metafunctions.
+
+[heading From 0.4 to 0.5]
+
+ * Added __is_reversible_selector__ introspection metafunction.
+ * Moved __Boost_Typeof__ registration header files for selectors.
+
+[heading From 0.3 to 0.4]
+
+ * Added `c_str_equivalence_selector` and `c_str_ordering_selector` types.
+
+[heading From 0.2 to 0.3]
+
+ * Moved from __Boost_Utility__ to top level.
+ * Removed `ptr_container_gen` metafunction and `associative_container_gen`
+ and `ptr_associative_container_gen` metafunction classes.
+ * Added selector templates. See __Selectors__.
+ * Added __emplace_function_gen__ and __emplace_associative_function_gen__
+ type-generating metafunctions.
+ * Added __is_flat_associative_selector__, __is_ptr_selector__,
+ __is_recursive_selector__, __is_tr1_selector__, and
+ __has_emplace_member_function_selector__ introspection metafunctions.
+ * Renamed `is_unordered_selector` to __is_hashed_associative_selector__.
+ * Removed `boost_vecS`, `boost_dequeS`, `boost_listS`, `boost_slistS`,
+ `boost_setS`, `boost_mapS`, `boost_multisetS`, and `boost_multimapS`
+ selector type definitions.
+ * Modified __graph_adjacency_list__ so that it also recognizes new selector
+ types (except when __is_ptr_selector__ returns __mpl_true__).
+
+[heading From 0.1 to 0.2]
+
+ * Added `boost_vecS`, `stable_vecS`, `boost_dequeS`, `boost_listS`,
+ `boost_slistS`, `boost_setS`, `boost_mapS`, `boost_multisetS`,
+ `boost_multimapS`, `flat_setS`, `flat_mapS`, `flat_multisetS`, and
+ `flat_multimapS` selector types.
+ * Added __is_associative_selector__, __is_multiple_associative_selector__,
+ `is_unordered_selector`, and __has_stable_iterators_selector__
+ introspection metafunctions.
+
+[endsect] [/ Changelog]
+

Added: sandbox/container_gen/libs/container_gen/doc/container_gen.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/container_gen.qbk 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,201 @@
+[library container_gen
+ [quickbook 1.5]
+ [version 0.6]
+ [authors [Lumsdaine, Andrew][Lee, Lie-Quan][Claveirole, Thomas][Siek, Jeremy G.][Enage, Cromwell D.]]
+ [copyright 1997-2013 Andrew Lumsdaine, Lie-Quan Lee, Thomas Claveirole, Jeremy G. Siek, Cromwell D. Enage]
+ [purpose Collection of container-generating and selector-introspecting metafunctions]
+ [license
+ 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])
+ ]
+]
+
+[/ General links.]
+[def __recursive_data_types__ [@http://en.wikipedia.org/wiki/Recursive_data_type recursive data types]]
+
+[/ General concept links.]
+[def __Default_Constructible__ [@http://www.sgi.com/tech/stl/DefaultConstructible.html [*Default Constructible]]]
+[def __STL_Container__ [@http://www.sgi.com/tech/stl/Container.html [*STL Container]]]
+[def __Input_Iterator__ [@http://www.sgi.com/tech/stl/InputIterator.html [*Input Iterator]]]
+[def __Bidirectional_Iterator__ [@http://www.sgi.com/tech/stl/BidirectionalIterator.html [*Bidirectional Iterator]]]
+[def __Reversible_Container__ [@http://www.sgi.com/tech/stl/ReversibleContainer.html [*Reversible Container]]]
+[def __Random_Access_Iterator__ [@http://www.sgi.com/tech/stl/RandomAccessIterator.html [*Random Access Iterator]]]
+[def __Random_Access_Container__ [@http://www.sgi.com/tech/stl/RandomAccessContainer.html [*Random Access Container]]]
+[def __Associative_Container__ [@http://www.sgi.com/tech/stl/AssociativeContainer.html [*Associative Container]]]
+[def __Sorted_Associative_Container__ [@http://www.sgi.com/tech/stl/SortedAssociativeContainer.html [*Sorted Associative Container]]]
+[def __Hashed_Associative_Container__ [@http://www.sgi.com/tech/stl/HashAssociativeContainer.html [*Hashed Associative Container]]]
+[def __Unique_Associative_Container__ [@http://www.sgi.com/tech/stl/UniqueAssociativeContainer.html [*Unique Associative Container]]]
+[def __Multiple_Associative_Container__ [@http://www.sgi.com/tech/stl/MultipleAssociativeContainer.html [*Multiple Associative Container]]]
+[def __Sequence__ [@http://www.sgi.com/tech/stl/Sequence.html [*Sequence]]]
+[def __Front_Insertion_Sequence__ [@http://www.sgi.com/tech/stl/FrontInsertionSequence.html [*Front Insertion Sequence]]]
+[def __Back_Insertion_Sequence__ [@http://www.sgi.com/tech/stl/BackInsertionSequence.html [*Back Insertion Sequence]]]
+[def __Binary_Predicate__ [@http://www.sgi.com/tech/stl/BinaryPredicate.html [*Binary Predicate]]]
+[def __Strict_Weak_Ordering__ [@http://www.sgi.com/tech/stl/StrictWeakOrdering.html [*Strict Weak Ordering]]]
+[def __Hash_Function__ [@http://www.sgi.com/tech/stl/HashFunction.html [*Hash Function]]]
+
+[/ STL reference links.]
+[def __std_list__ [@http://www.sgi.com/tech/stl/List.html `std::list`]]
+[def __std_pair__ [@http://www.sgi.com/tech/stl/pair.html `std::pair`]]
+[def _std_string_ [@http://www.sgi.com/tech/stl/basic_string.html std::string]]
+
+[/ Boost library links.]
+[def __Boost_Typeof__ [@boost:doc/html/typeof.html [*Boost.Typeof]]]
+[def __Boost_Utility__ [@boost:libs/utility/index.html [*Boost.Utility]]]
+[def __Boost_Assign__ [@boost:libs/assign/doc/index.html [*Boost.Assign]]]
+[def __Boost_Range__ [@boost:libs/range/doc/html/index.html [*Boost.Range]]]
+[def __Boost_Container__ [@boost:doc/html/container.html [*Boost.Container]]]
+[def __Boost_Unordered__ [@boost:doc/html/unordered.html [*Boost.Unordered]]]
+[def __Boost_TR1__ [@boost:doc/html/boost_tr1.html [*Boost.TR1]]]
+[def __Boost_Pointer_Container__ [@boost:libs/ptr_container/doc/index.html [*Boost.PointerContainer]]]
+[def __BGL__ [@boost:libs/graph/doc/index.html BGL]]
+
+[/ Boost concept links.]
+[def __Integral_Constant__ [@boost:libs/mpl/doc/refmanual/integral-constant.html [*Integral Constant]]]
+[def __Boolean_Integral_Constant__ [@boost:libs/mpl/doc/refmanual/integral-constant.html [*Boolean Integral Constant]]]
+[def __Unary_Metafunction_Class__ [@boost:libs/mpl/doc/refmanual/metafunction-class.html [*Unary Metafunction Class]]]
+[def __Binary_Metafunction_Class__ [@boost:libs/mpl/doc/refmanual/metafunction-class.html [*Binary Metafunction Class]]]
+[def __Single_Pass_Range__ [@boost:libs/range/doc/html/range/concepts/single_pass_range.html [*Single Pass Range]]]
+[def __Clone_Allocator__ [@boost:libs/ptr_container/doc/reference.html#the-clone-allocator-concept [*Clone Allocator]]]
+[def __Recursive_Container__ [@boost:doc/html/container/containers_of_incomplete_types.html [*Recursive Container]]]
+[def __Flat_Associative_Container__ [@boost:doc/html/container/non_standard_containers.html#container.non_standard_containers.flat_xxx [*Flat Associative Container]]]
+
+[/ Boost reference links.]
+[def _ASSERT_ [@boost:libs/utility/assert.html BOOST_ASSERT]]
+[def _AUTO_TPL_ [@boost:doc/html/typeof/refe.html#typeof.auto BOOST_AUTO_TPL]]
+[def __TYPEOF_EMULATION__ [@boost:doc/html/typeof/refe.html#typeof.compl `BOOST_TYPEOF_EMULATION`]]
+[def __MPL_CFG_NO_HAS_XXX__ [@boost:libs/mpl/doc/refmanual/cfg-no-has-xxx.html `BOOST_MPL_CFG_NO_HAS_XXX`]]
+[def __mpl_true__ [@boost:libs/mpl/doc/refmanual/bool.html `boost::mpl::true_`]]
+[def _mpl_true_ [@boost:libs/mpl/doc/refmanual/bool.html boost::mpl::true_]]
+[def __mpl_false__ [@boost:libs/mpl/doc/refmanual/bool.html `boost::mpl::false_`]]
+[def __range_equal__ [@boost:libs/range/doc/html/range/reference/algorithms/non_mutating/equal.html `boost::range::equal()`]]
+[def _range_equal_ [@boost:libs/range/doc/html/range/reference/algorithms/non_mutating/equal.html boost::range::equal]]
+[def __range_adaptors_indirect__ [@boost:libs/range/doc/html/range/reference/adaptors/reference/indirected.html `boost::adaptors::indirect()`]]
+[def __array__ [@boost:doc/html/array.html `boost::array`]]
+[def __container_stable_vector__ [@boost:doc/html/boost/container/stable_vector.html `boost::container::stable_vector`]]
+[def __graph_adjacency_list__ [@boost:libs/graph/doc/adjacency_list.html `boost::adjacency_list`]]
+[def __graph_parallel_edge_traits__ [@boost:libs/graph/doc/using_adjacency_list.html#SECTION00834200000000000000 `boost::parallel_edge_traits`]]
+[def __tr1_array__ [@boost:doc/html/boost_tr1/subject_list.html#boost_tr1.subject_list.array `std::tr1::array`]]
+[def __tr1_unordered_set__ [@boost:doc/html/boost_tr1/subject_list.html#boost_tr1.subject_list.unordered_set `std::tr1::unordered_set`]]
+[def __tr1_unordered_multiset__ [@boost:doc/html/boost_tr1/subject_list.html#boost_tr1.subject_list.unordered_set `std::tr1::unordered_multiset`]]
+[def __tr1_unordered_map__ [@boost:doc/html/boost_tr1/subject_list.html#boost_tr1.subject_list.unordered_map `std::tr1::unordered_map`]]
+[def __tr1_unordered_multimap__ [@boost:doc/html/boost_tr1/subject_list.html#boost_tr1.subject_list.unordered_map `std::tr1::unordered_multimap`]]
+
+[/ Boost.ContainerGen reference header file links.]
+[def __boost_container_gen_selectors_hpp__ [@../../../../boost/container_gen/selectors.hpp boost/container_gen/selectors.hpp]]
+[def __boost_typeof_boost_container_gen_selectors_hpp__ [@../../../../boost/typeof/boost/container_gen/selectors.hpp boost/typeof/boost/container_gen/selectors.hpp]]
+[def __boost_container_gen_c_str_cmp_selectors_hpp__ [@../../../../boost/container_gen/c_str_cmp_selectors.hpp boost/container_gen/c_str_cmp_selectors.hpp]]
+[def __boost_typeof_boost_container_gen_c_str_cmp_selectors_hpp__ [@../../../../boost/typeof/boost/container_gen/c_str_cmp_selectors.hpp boost/typeof/boost/container_gen/c_str_cmp_selectors.hpp]]
+[def __boost_container_gen_container_gen_hpp__ [@../../../../boost/container_gen/container_gen.hpp boost/container_gen/container_gen.hpp]]
+[def __boost_container_gen_emplace_function_gen_hpp__ [@../../../../boost/container_gen/emplace_function_gen.hpp boost/container_gen/emplace_function_gen.hpp]]
+[def __boost_container_gen_emplace_assoc_function_gen_hpp__ [@../../../../boost/container_gen/emplace_assoc_function_gen.hpp boost/container_gen/emplace_assoc_function_gen.hpp]]
+[def __boost_container_gen_push_range_function_gen_hpp__ [@../../../../boost/container_gen/push_range_function_gen.hpp boost/container_gen/push_range_function_gen.hpp]]
+[def __boost_container_gen_insert_range_function_gen_hpp__ [@../../../../boost/container_gen/insert_range_function_gen.hpp boost/container_gen/insert_range_function_gen.hpp]]
+[def __boost_container_gen_splice_function_gen_hpp__ [@../../../../boost/container_gen/splice_function_gen.hpp boost/container_gen/splice_function_gen.hpp]]
+[def __boost_container_gen_insert_range_result_gen_hpp__ [@../../../../boost/container_gen/insert_range_result_gen.hpp boost/container_gen/insert_range_result_gen.hpp]]
+[def __boost_container_gen_is_reversible_selector_hpp__ [@../../../../boost/container_gen/is_reversible_selector.hpp boost/container_gen/is_reversible_selector.hpp]]
+[def __boost_container_gen_is_random_access_selector_hpp__ [@../../../../boost/container_gen/is_random_access_selector.hpp boost/container_gen/is_random_access_selector.hpp]]
+[def __boost_container_gen_is_associative_selector_hpp__ [@../../../../boost/container_gen/is_associative_selector.hpp boost/container_gen/is_associative_selector.hpp]]
+[def __boost_container_gen_is_unique_assoc_selector_hpp__ [@../../../../boost/container_gen/is_unique_assoc_selector.hpp boost/container_gen/is_unique_assoc_selector.hpp]]
+[def __boost_container_gen_is_multiple_assoc_selector_hpp__ [@../../../../boost/container_gen/is_multiple_assoc_selector.hpp boost/container_gen/is_multiple_assoc_selector.hpp]]
+[def __boost_container_gen_is_flat_assoc_selector_hpp__ [@../../../../boost/container_gen/is_flat_assoc_selector.hpp boost/container_gen/is_flat_assoc_selector.hpp]]
+[def __boost_container_gen_is_hashed_assoc_selector_hpp__ [@../../../../boost/container_gen/is_hashed_assoc_selector.hpp boost/container_gen/is_hashed_assoc_selector.hpp]]
+[def __boost_container_gen_is_ptr_selector_hpp__ [@../../../../boost/container_gen/is_ptr_selector.hpp boost/container_gen/is_ptr_selector.hpp]]
+[def __boost_container_gen_is_recursive_selector_hpp__ [@../../../../boost/container_gen/is_recursive_selector.hpp boost/container_gen/is_recursive_selector.hpp]]
+[def __boost_container_gen_is_tr1_selector_hpp__ [@../../../../boost/container_gen/is_tr1_selector.hpp boost/container_gen/is_tr1_selector.hpp]]
+[def __boost_container_gen_has_emplace_mfunc_selector_hpp__ [@../../../../boost/container_gen/has_emplace_mfunc_selector.hpp boost/container_gen/has_emplace_mfunc_selector.hpp]]
+[def __boost_container_gen_has_stable_iters_selector_hpp__ [@../../../../boost/container_gen/has_stable_iters_selector.hpp boost/container_gen/has_stable_iters_selector.hpp]]
+[def __libs_container_gen_test_result_range_hpp__ [@../../../../libs/container_gen/test/result_range.hpp `<test/result_range.hpp>`]]
+[def __libs_container_gen_test_push_range_function_gen_cpp__ [@../../../../libs/container_gen/test/push_range_function_gen.cpp `<test/push_range_function_gen.cpp>`]]
+[def __libs_container_gen_test_insert_range_function_gen_cpp__ [@../../../../libs/container_gen/test/insert_range_function_gen.cpp `<test/insert_range_function_gen.cpp>`]]
+[def __libs_container_gen_test_splice_function_gen_cpp__ [@../../../../libs/container_gen/test/splice_function_gen.cpp `<test/splice_function_gen.cpp>`]]
+
+[/ Boost.ContainerGen reference links.]
+[def __Selectors__ [link container_gen.reference.selectors *Selectors*]]
+[def _vector_selector_ [link container_gen.reference.selectors boost::vector_selector]]
+[def _map_selector_ [link container_gen.reference.selectors boost::map_selector]]
+[def __Selectors_synopsis__ [link container_gen.reference.selectors.synopsis synopsis]]
+[def __Selectors_table__ [link container_gen.reference.selectors.description table]]
+[def __container_gen__ [link container_gen.reference.container_gen `container_gen`]]
+[def _container_gen_ [link container_gen.reference.container_gen container_gen]]
+[def __emplace_function_gen__ [link container_gen.reference.emplace_function_gen `emplace_function_gen`]]
+[def _emplace_function_gen_ [link container_gen.reference.emplace_function_gen emplace_function_gen]]
+[def __emplace_associative_function_gen__ [link container_gen.reference.emplace_assoc_function_gen `emplace_associative_function_gen`]]
+[def _emplace_associative_function_gen_ [link container_gen.reference.emplace_assoc_function_gen emplace_associative_function_gen]]
+[def __push_range_function_gen__ [link container_gen.reference.push_range_function_gen `push_range_function_gen`]]
+[def _push_range_function_gen_ [link container_gen.reference.push_range_function_gen push_range_function_gen]]
+[def __insert_range_function_gen__ [link container_gen.reference.insert_range_function_gen `insert_range_function_gen`]]
+[def _insert_range_function_gen_ [link container_gen.reference.insert_range_function_gen insert_range_function_gen]]
+[def __splice_function_gen__ [link container_gen.reference.splice_function_gen `splice_function_gen`]]
+[def _splice_function_gen_ [link container_gen.reference.splice_function_gen splice_function_gen]]
+[def __insert_range_result_gen__ [link container_gen.reference.insert_range_result_gen `insert_range_result_gen`]]
+[def _insert_range_result_gen_ [link container_gen.reference.insert_range_result_gen insert_range_result_gen]]
+[def __is_reversible_selector__ [link container_gen.reference.is_reversible_selector `is_reversible_selector`]]
+[def _is_reversible_selector_ [link container_gen.reference.is_reversible_selector is_reversible_selector]]
+[def __is_random_access_selector__ [link container_gen.reference.is_random_access_selector `is_random_access_selector`]]
+[def _is_random_access_selector_ [link container_gen.reference.is_random_access_selector is_random_access_selector]]
+[def __is_associative_selector__ [link container_gen.reference.is_associative_selector `is_associative_selector`]]
+[def _is_associative_selector_ [link container_gen.reference.is_associative_selector is_associative_selector]]
+[def __is_unique_associative_selector__ [link container_gen.reference.is_unique_assoc_selector `is_unique_associative_selector`]]
+[def _is_unique_associative_selector_ [link container_gen.reference.is_unique_assoc_selector is_unique_associative_selector]]
+[def __is_multiple_associative_selector__ [link container_gen.reference.is_multiple_assoc_selector `is_multiple_associative_selector`]]
+[def _is_multiple_associative_selector_ [link container_gen.reference.is_multiple_assoc_selector is_multiple_associative_selector]]
+[def __is_flat_associative_selector__ [link container_gen.reference.is_flat_assoc_selector `is_flat_associative_selector`]]
+[def _is_flat_associative_selector_ [link container_gen.reference.is_flat_assoc_selector is_flat_associative_selector]]
+[def __is_hashed_associative_selector__ [link container_gen.reference.is_hashed_assoc_selector `is_hashed_associative_selector`]]
+[def _is_hashed_associative_selector_ [link container_gen.reference.is_hashed_assoc_selector is_hashed_associative_selector]]
+[def __is_ptr_selector__ [link container_gen.reference.is_ptr_selector `is_ptr_selector`]]
+[def _is_ptr_selector_ [link container_gen.reference.is_ptr_selector is_ptr_selector]]
+[def __is_recursive_selector__ [link container_gen.reference.is_recursive_selector `is_recursive_selector`]]
+[def _is_recursive_selector_ [link container_gen.reference.is_recursive_selector is_recursive_selector]]
+[def __is_tr1_selector__ [link container_gen.reference.is_tr1_selector `is_tr1_selector`]]
+[def _is_tr1_selector_ [link container_gen.reference.is_tr1_selector is_tr1_selector]]
+[def __has_stable_iterators_selector__ [link container_gen.reference.has_stable_iters_selector `has_stable_iterators_selector`]]
+[def _has_stable_iterators_selector_ [link container_gen.reference.has_stable_iters_selector has_stable_iterators_selector]]
+[def __has_emplace_member_function_selector__ [link container_gen.reference.has_emplace_mfunc_selector `has_emplace_member_function_selector`]]
+[def _has_emplace_member_function_selector_ [link container_gen.reference.has_emplace_mfunc_selector has_emplace_member_function_selector]]
+
+[/ Autogenerate reference documentation directly from code.]
+[/ Bypass Doxygen.]
+[import ../../../boost/container_gen/selectors.hpp]
+[import ../../../boost/container_gen/c_str_cmp_selectors.hpp]
+[import ../../../boost/container_gen/container_gen.hpp]
+[import ../../../boost/container_gen/emplace_function_gen.hpp]
+[import ../../../boost/container_gen/emplace_assoc_function_gen.hpp]
+[import ../../../boost/container_gen/push_range_function_gen.hpp]
+[import ../../../boost/container_gen/insert_range_function_gen.hpp]
+[import ../../../boost/container_gen/splice_function_gen.hpp]
+[import ../../../boost/container_gen/insert_range_result_gen.hpp]
+[import ../../../boost/container_gen/is_reversible_selector.hpp]
+[import ../../../boost/container_gen/is_random_access_selector.hpp]
+[import ../../../boost/container_gen/is_associative_selector.hpp]
+[import ../../../boost/container_gen/is_unique_assoc_selector.hpp]
+[import ../../../boost/container_gen/is_multiple_assoc_selector.hpp]
+[import ../../../boost/container_gen/is_flat_assoc_selector.hpp]
+[import ../../../boost/container_gen/is_hashed_assoc_selector.hpp]
+[import ../../../boost/container_gen/is_ptr_selector.hpp]
+[import ../../../boost/container_gen/is_recursive_selector.hpp]
+[import ../../../boost/container_gen/is_tr1_selector.hpp]
+[import ../../../boost/container_gen/has_stable_iters_selector.hpp]
+[import ../../../boost/container_gen/has_emplace_mfunc_selector.hpp]
+[import ../../../libs/graph/example/container_gen.cpp]
+[import ../../../libs/container_gen/example/output_shape_stats.cpp]
+[import ../../../libs/container_gen/example/output_char_tallies.cpp]
+[import ../../../libs/container_gen/test/result_range.hpp]
+[import ../../../libs/container_gen/test/push_range_function_gen.cpp]
+[import ../../../libs/container_gen/test/insert_range_function_gen.cpp]
+[import ../../../libs/container_gen/test/splice_function_gen.cpp]
+
+[/ index.html Start]
+
+[heading Rationale]
+Significant interest was expressed in moving the `container_gen` metafunction
+from its current place in the __BGL__ to a more general or first-class
+residence. The relevant discussion is archived here:
+[@http://lists.boost.org/Archives/boost/2011/05/181573.php].
+
+[/ index.html End]
+
+[include reference.qbk]
+[include changelog.qbk]
+

Added: sandbox/container_gen/libs/container_gen/doc/html/container_gen/changelog.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/html/container_gen/changelog.html 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,94 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Changelog</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../index.html" title="Chapter&#160;1.&#160;container_gen 0.6">
+<link rel="up" href="../index.html" title="Chapter&#160;1.&#160;container_gen 0.6">
+<link rel="prev" href="reference/has_emplace_mfunc_selector.html" title="has_emplace_member_function_selector">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="reference/has_emplace_mfunc_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="container_gen.changelog"></a><a class="link" href="changelog.html" title="Changelog">Changelog</a>
+</h2></div></div></div>
+<h4>
+<a name="container_gen.changelog.h0"></a>
+ <span class="phrase"><a name="container_gen.changelog.from_0_5_to_0_6"></a></span><a class="link" href="changelog.html#container_gen.changelog.from_0_5_to_0_6">From
+ 0.5 to 0.6</a>
+ </h4>
+<pre class="programlisting"><span class="special">*</span> <span class="identifier">Added</span> <a class="link" href="reference/push_range_function_gen.html" title="push_range_function_gen"><code class="computeroutput"><span class="identifier">push_range_function_gen</span></code></a><span class="special">,</span> <a class="link" href="reference/insert_range_function_gen.html" title="insert_range_function_gen"><code class="computeroutput"><span class="identifier">insert_range_function_gen</span></code></a><span class="special">,</span>
+ <a class="link" href="reference/splice_function_gen.html" title="splice_function_gen"><code class="computeroutput"><span class="identifier">splice_function_gen</span></code></a><span class="special">,</span> <span class="keyword">and</span> <a class="link" href="reference/insert_range_function_gen.html" title="insert_range_function_gen"><code class="computeroutput"><span class="identifier">insert_range_function_gen</span></code></a> <span class="identifier">type</span><span class="special">-</span><span class="identifier">generating</span>
+ <span class="identifier">metafunctions</span><span class="special">.</span>
+</pre>
+<h4>
+<a name="container_gen.changelog.h1"></a>
+ <span class="phrase"><a name="container_gen.changelog.from_0_4_to_0_5"></a></span><a class="link" href="changelog.html#container_gen.changelog.from_0_4_to_0_5">From
+ 0.4 to 0.5</a>
+ </h4>
+<pre class="programlisting"><span class="special">*</span> <span class="identifier">Added</span> <a class="link" href="reference/is_reversible_selector.html" title="is_reversible_selector"><code class="computeroutput"><span class="identifier">is_reversible_selector</span></code></a> <span class="identifier">introspection</span> <span class="identifier">metafunction</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Moved</span> Boost.Typeof <span class="identifier">registration</span> <span class="identifier">header</span> <span class="identifier">files</span> <span class="keyword">for</span> <span class="identifier">selectors</span><span class="special">.</span>
+</pre>
+<h4>
+<a name="container_gen.changelog.h2"></a>
+ <span class="phrase"><a name="container_gen.changelog.from_0_3_to_0_4"></a></span><a class="link" href="changelog.html#container_gen.changelog.from_0_3_to_0_4">From
+ 0.3 to 0.4</a>
+ </h4>
+<pre class="programlisting"><span class="special">*</span> <span class="identifier">Added</span> <span class="error">`</span><span class="identifier">c_str_equivalence_selector</span><span class="error">`</span> <span class="keyword">and</span> <span class="error">`</span><span class="identifier">c_str_ordering_selector</span><span class="error">`</span> <span class="identifier">types</span><span class="special">.</span>
+</pre>
+<h4>
+<a name="container_gen.changelog.h3"></a>
+ <span class="phrase"><a name="container_gen.changelog.from_0_2_to_0_3"></a></span><a class="link" href="changelog.html#container_gen.changelog.from_0_2_to_0_3">From
+ 0.2 to 0.3</a>
+ </h4>
+<pre class="programlisting"><span class="special">*</span> <span class="identifier">Moved</span> <span class="identifier">from</span> Boost.Utility <span class="identifier">to</span> <span class="identifier">top</span> <span class="identifier">level</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Removed</span> <span class="error">`</span><span class="identifier">ptr_container_gen</span><span class="error">`</span> <span class="identifier">metafunction</span> <span class="keyword">and</span> <span class="error">`</span><span class="identifier">associative_container_gen</span><span class="error">`</span>
+ <span class="keyword">and</span> <span class="error">`</span><span class="identifier">ptr_associative_container_gen</span><span class="error">`</span> <span class="identifier">metafunction</span> <span class="identifier">classes</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Added</span> <span class="identifier">selector</span> <span class="identifier">templates</span><span class="special">.</span> <span class="identifier">See</span> <a class="link" href="reference/selectors.html" title="Selectors"><span class="bold"><strong>Selectors</strong></span></a><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Added</span> <a class="link" href="reference/emplace_function_gen.html" title="emplace_function_gen"><code class="computeroutput"><span class="identifier">emplace_function_gen</span></code></a> <span class="keyword">and</span> <a class="link" href="reference/emplace_assoc_function_gen.html" title="emplace_associative_function_gen"><code class="computeroutput"><span class="identifier">emplace_associative_function_gen</span></code></a>
+ <span class="identifier">type</span><span class="special">-</span><span class="identifier">generating</span> <span class="identifier">metafunctions</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Added</span> <a class="link" href="reference/is_flat_assoc_selector.html" title="is_flat_associative_selector"><code class="computeroutput"><span class="identifier">is_flat_associative_selector</span></code></a><span class="special">,</span> <a class="link" href="reference/is_ptr_selector.html" title="is_ptr_selector"><code class="computeroutput"><span class="identifier">is_ptr_selector</span></code></a><span class="special">,</span>
+ <a class="link" href="reference/is_recursive_selector.html" title="is_recursive_selector"><code class="computeroutput"><span class="identifier">is_recursive_selector</span></code></a><span class="special">,</span> <a class="link" href="reference/is_tr1_selector.html" title="is_tr1_selector"><code class="computeroutput"><span class="identifier">is_tr1_selector</span></code></a><span class="special">,</span> <span class="keyword">and</span>
+ <a class="link" href="reference/has_emplace_mfunc_selector.html" title="has_emplace_member_function_selector"><code class="computeroutput"><span class="identifier">has_emplace_member_function_selector</span></code></a> <span class="identifier">introspection</span> <span class="identifier">metafunctions</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Renamed</span> <span class="error">`</span><span class="identifier">is_unordered_selector</span><span class="error">`</span> <span class="identifier">to</span> <a class="link" href="reference/is_hashed_assoc_selector.html" title="is_hashed_associative_selector"><code class="computeroutput"><span class="identifier">is_hashed_associative_selector</span></code></a><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Removed</span> <span class="error">`</span><span class="identifier">boost_vecS</span><span class="error">`</span><span class="special">,</span> <span class="error">`</span><span class="identifier">boost_dequeS</span><span class="error">`</span><span class="special">,</span> <span class="error">`</span><span class="identifier">boost_listS</span><span class="error">`</span><span class="special">,</span> <span class="error">`</span><span class="identifier">boost_slistS</span><span class="error">`</span><span class="special">,</span>
+ <span class="error">`</span><span class="identifier">boost_setS</span><span class="error">`</span><span class="special">,</span> <span class="error">`</span><span class="identifier">boost_mapS</span><span class="error">`</span><span class="special">,</span> <span class="error">`</span><span class="identifier">boost_multisetS</span><span class="error">`</span><span class="special">,</span> <span class="keyword">and</span> <span class="error">`</span><span class="identifier">boost_multimapS</span><span class="error">`</span>
+ <span class="identifier">selector</span> <span class="identifier">type</span> <span class="identifier">definitions</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Modified</span> boost::adjacency_list <span class="identifier">so</span> <span class="identifier">that</span> <span class="identifier">it</span> <span class="identifier">also</span> <span class="identifier">recognizes</span> <span class="keyword">new</span> <span class="identifier">selector</span>
+ <span class="identifier">types</span> <span class="special">(</span><span class="identifier">except</span> <span class="identifier">when</span> <a class="link" href="reference/is_ptr_selector.html" title="is_ptr_selector"><code class="computeroutput"><span class="identifier">is_ptr_selector</span></code></a> <span class="identifier">returns</span> boost::mpl::true_<span class="special">).</span>
+</pre>
+<h4>
+<a name="container_gen.changelog.h4"></a>
+ <span class="phrase"><a name="container_gen.changelog.from_0_1_to_0_2"></a></span><a class="link" href="changelog.html#container_gen.changelog.from_0_1_to_0_2">From
+ 0.1 to 0.2</a>
+ </h4>
+<pre class="programlisting"><span class="special">*</span> <span class="identifier">Added</span> <span class="error">`</span><span class="identifier">boost_vecS</span><span class="error">`</span><span class="special">,</span> <span class="error">`</span><span class="identifier">stable_vecS</span><span class="error">`</span><span class="special">,</span> <span class="error">`</span><span class="identifier">boost_dequeS</span><span class="error">`</span><span class="special">,</span> <span class="error">`</span><span class="identifier">boost_listS</span><span class="error">`</span><span class="special">,</span>
+ <span class="error">`</span><span class="identifier">boost_slistS</span><span class="error">`</span><span class="special">,</span> <span class="error">`</span><span class="identifier">boost_setS</span><span class="error">`</span><span class="special">,</span> <span class="error">`</span><span class="identifier">boost_mapS</span><span class="error">`</span><span class="special">,</span> <span class="error">`</span><span class="identifier">boost_multisetS</span><span class="error">`</span><span class="special">,</span>
+ <span class="error">`</span><span class="identifier">boost_multimapS</span><span class="error">`</span><span class="special">,</span> <span class="error">`</span><span class="identifier">flat_setS</span><span class="error">`</span><span class="special">,</span> <span class="error">`</span><span class="identifier">flat_mapS</span><span class="error">`</span><span class="special">,</span> <span class="error">`</span><span class="identifier">flat_multisetS</span><span class="error">`</span><span class="special">,</span> <span class="keyword">and</span>
+ <span class="error">`</span><span class="identifier">flat_multimapS</span><span class="error">`</span> <span class="identifier">selector</span> <span class="identifier">types</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Added</span> <a class="link" href="reference/is_associative_selector.html" title="is_associative_selector"><code class="computeroutput"><span class="identifier">is_associative_selector</span></code></a><span class="special">,</span> <a class="link" href="reference/is_multiple_assoc_selector.html" title="is_multiple_associative_selector"><code class="computeroutput"><span class="identifier">is_multiple_associative_selector</span></code></a><span class="special">,</span>
+ <span class="error">`</span><span class="identifier">is_unordered_selector</span><span class="error">`</span><span class="special">,</span> <span class="keyword">and</span> <a class="link" href="reference/has_stable_iters_selector.html" title="has_stable_iterators_selector"><code class="computeroutput"><span class="identifier">has_stable_iterators_selector</span></code></a>
+ <span class="identifier">introspection</span> <span class="identifier">metafunctions</span><span class="special">.</span>
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 1997-2013 Andrew Lumsdaine, Lie-Quan Lee,
+ Thomas Claveirole, Jeremy G. Siek, Cromwell D. Enage<p>
+ 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)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="reference/has_emplace_mfunc_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a>
+</div>
+</body>
+</html>

Added: sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference.html 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,70 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Reference</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../index.html" title="Chapter&#160;1.&#160;container_gen 0.6">
+<link rel="up" href="../index.html" title="Chapter&#160;1.&#160;container_gen 0.6">
+<link rel="prev" href="../index.html" title="Chapter&#160;1.&#160;container_gen 0.6">
+<link rel="next" href="reference/selectors.html" title="Selectors">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="reference/selectors.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="container_gen.reference"></a><a class="link" href="reference.html" title="Reference">Reference</a>
+</h2></div></div></div>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="reference/selectors.html" title="Selectors"><span class="bold"><strong>Selectors</strong></span></a>
+</pre>
+<h4>
+<a name="container_gen.reference.h0"></a>
+ <span class="phrase"><a name="container_gen.reference.type_generation_metafunctions"></a></span><a class="link" href="reference.html#container_gen.reference.type_generation_metafunctions">Type
+ Generation Metafunctions</a>
+ </h4>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="reference/container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/emplace_function_gen.html" title="emplace_function_gen"><code class="computeroutput"><span class="identifier">emplace_function_gen</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/emplace_assoc_function_gen.html" title="emplace_associative_function_gen"><code class="computeroutput"><span class="identifier">emplace_associative_function_gen</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/push_range_function_gen.html" title="push_range_function_gen"><code class="computeroutput"><span class="identifier">push_range_function_gen</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/insert_range_function_gen.html" title="insert_range_function_gen"><code class="computeroutput"><span class="identifier">insert_range_function_gen</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/splice_function_gen.html" title="splice_function_gen"><code class="computeroutput"><span class="identifier">splice_function_gen</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/insert_range_result_gen.html" title="insert_range_result_gen"><code class="computeroutput"><span class="identifier">insert_range_result_gen</span></code></a>
+</pre>
+<h4>
+<a name="container_gen.reference.h1"></a>
+ <span class="phrase"><a name="container_gen.reference.selector_introspection_metafunctions"></a></span><a class="link" href="reference.html#container_gen.reference.selector_introspection_metafunctions">Selector
+ Introspection Metafunctions</a>
+ </h4>
+<pre class="programlisting"><span class="special">*</span> <a class="link" href="reference/is_reversible_selector.html" title="is_reversible_selector"><code class="computeroutput"><span class="identifier">is_reversible_selector</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/is_random_access_selector.html" title="is_random_access_selector"><code class="computeroutput"><span class="identifier">is_random_access_selector</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/is_associative_selector.html" title="is_associative_selector"><code class="computeroutput"><span class="identifier">is_associative_selector</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/is_unique_assoc_selector.html" title="is_unique_associative_selector"><code class="computeroutput"><span class="identifier">is_unique_associative_selector</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/is_multiple_assoc_selector.html" title="is_multiple_associative_selector"><code class="computeroutput"><span class="identifier">is_multiple_associative_selector</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/is_flat_assoc_selector.html" title="is_flat_associative_selector"><code class="computeroutput"><span class="identifier">is_flat_associative_selector</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/is_hashed_assoc_selector.html" title="is_hashed_associative_selector"><code class="computeroutput"><span class="identifier">is_hashed_associative_selector</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/is_ptr_selector.html" title="is_ptr_selector"><code class="computeroutput"><span class="identifier">is_ptr_selector</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/is_recursive_selector.html" title="is_recursive_selector"><code class="computeroutput"><span class="identifier">is_recursive_selector</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/is_tr1_selector.html" title="is_tr1_selector"><code class="computeroutput"><span class="identifier">is_tr1_selector</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/has_stable_iters_selector.html" title="has_stable_iterators_selector"><code class="computeroutput"><span class="identifier">has_stable_iterators_selector</span></code></a>
+<span class="special">*</span> <a class="link" href="reference/has_emplace_mfunc_selector.html" title="has_emplace_member_function_selector"><code class="computeroutput"><span class="identifier">has_emplace_member_function_selector</span></code></a>
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 1997-2013 Andrew Lumsdaine, Lie-Quan Lee,
+ Thomas Claveirole, Jeremy G. Siek, Cromwell D. Enage<p>
+ 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)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="reference/selectors.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/container_gen.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/container_gen.html 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,363 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>container_gen</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;container_gen 0.6">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="selectors.html" title="Selectors">
+<link rel="next" href="emplace_function_gen.html" title="emplace_function_gen">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="selectors.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="emplace_function_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="container_gen.reference.container_gen"></a><a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.container_gen.synopsis"></a><a class="link" href="container_gen.html#container_gen.reference.container_gen.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T2</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">container_gen</span>
+ <span class="special">{</span>
+ <span class="comment">// typedef .... type;</span>
+ <span class="special">};</span>
+<span class="special">}</span> <span class="comment">// namespace boost</span>
+</pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.container_gen.description"></a><a class="link" href="container_gen.html#container_gen.reference.container_gen.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+ The boost::adjacency_list class template
+ uses this metafunction to map the <code class="computeroutput"><span class="identifier">OutEdgeList</span></code>
+ and <code class="computeroutput"><span class="identifier">VertexList</span></code> selectors
+ to the actual container types used for the graph storage. You can also
+ use this metafunction to determine the appropriate associative container
+ type given the specified selector. The example routine below uses the
+ <code class="computeroutput"><span class="identifier">container_gen</span></code> return type
+ to associate each distinct string character with the number of times it
+ appears in the string.
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">output_char_tallies</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">str</span><span class="special">,</span> <span class="identifier">Selector</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">container_gen</span><span class="special">&lt;</span><span class="identifier">Selector</span><span class="special">,</span><span class="keyword">char</span><span class="special">,</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">FrequencyTable</span><span class="special">;</span>
+
+ <span class="identifier">FrequencyTable</span> <span class="identifier">freq_table</span><span class="special">;</span>
+
+ <span class="keyword">for</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="identifier">i</span> <span class="special">&lt;</span> <span class="identifier">str</span><span class="special">.</span><span class="identifier">size</span><span class="special">();</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="keyword">typename</span> <span class="identifier">FrequencyTable</span><span class="special">::</span><span class="identifier">iterator</span> <span class="identifier">ft_itr</span> <span class="special">=</span> <span class="identifier">freq_table</span><span class="special">.</span><span class="identifier">find</span><span class="special">(</span><span class="identifier">str</span><span class="special">[</span><span class="identifier">i</span><span class="special">]);</span>
+
+ <span class="keyword">if</span> <span class="special">(</span><span class="identifier">ft_itr</span> <span class="special">==</span> <span class="identifier">freq_table</span><span class="special">.</span><span class="identifier">end</span><span class="special">())</span>
+ <span class="special">{</span>
+ <span class="identifier">freq_table</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="keyword">typename</span> <span class="identifier">FrequencyTable</span><span class="special">::</span><span class="identifier">value_type</span><span class="special">(</span><span class="identifier">str</span><span class="special">[</span><span class="identifier">i</span><span class="special">],</span> <span class="number">1</span><span class="special">));</span>
+ <span class="special">}</span>
+ <span class="keyword">else</span>
+ <span class="special">{</span>
+ <span class="special">++</span><span class="identifier">ft_itr</span><span class="special">-&gt;</span><span class="identifier">second</span><span class="special">;</span>
+ <span class="special">}</span>
+ <span class="special">}</span>
+
+ <span class="keyword">for</span> <span class="special">(</span>
+ <span class="keyword">typename</span> <span class="identifier">FrequencyTable</span><span class="special">::</span><span class="identifier">const_iterator</span> <span class="identifier">ft_itr</span> <span class="special">=</span> <span class="identifier">freq_table</span><span class="special">.</span><span class="identifier">begin</span><span class="special">();</span>
+ <span class="identifier">ft_itr</span> <span class="special">!=</span> <span class="identifier">freq_table</span><span class="special">.</span><span class="identifier">end</span><span class="special">();</span>
+ <span class="special">++</span><span class="identifier">ft_itr</span>
+ <span class="special">)</span>
+ <span class="special">{</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">ft_itr</span><span class="special">-&gt;</span><span class="identifier">first</span> <span class="special">&lt;&lt;</span> <span class="string">": "</span> <span class="special">&lt;&lt;</span> <span class="identifier">ft_itr</span><span class="special">-&gt;</span><span class="identifier">second</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+ <span class="special">}</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+ </p>
+<p>
+ This library provides specializations of this metafunction class for each
+ selector it provides whose resulting storage type models the STL Container concept. Here, two such selectors
+ are passed in calls to the example routine.
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">main</span><span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">char</span><span class="special">**)</span>
+<span class="special">{</span>
+ <span class="identifier">output_char_tallies</span><span class="special">(</span><span class="string">"abacadabra"</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">hash_mapS</span><span class="special">());</span>
+ <span class="identifier">output_char_tallies</span><span class="special">(</span><span class="string">"loolapalooza"</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multimapS</span><span class="special">());</span>
+ <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+ </p>
+<p>
+ The <code class="computeroutput"><span class="identifier">container_gen</span></code> specialization
+ for the <code class="computeroutput"><span class="identifier">multimap_selector</span></code>
+ template is shown here.
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+
+ <span class="keyword">template</span> <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">IsBoost</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CompareSelector</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AllocatorSelector</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Key</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Mapped</span>
+ <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">container_gen</span><span class="special">&lt;</span>
+ <span class="identifier">multimap_selector</span><span class="special">&lt;</span><span class="identifier">IsBoost</span><span class="special">,</span><span class="identifier">CompareSelector</span><span class="special">,</span><span class="identifier">AllocatorSelector</span><span class="special">&gt;</span>
+ <span class="special">,</span> <span class="identifier">Key</span>
+ <span class="special">,</span> <span class="identifier">Mapped</span>
+ <span class="special">&gt;</span>
+ <span class="special">{</span>
+ <span class="keyword">private</span><span class="special">:</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">apply_wrap1</span><span class="special">&lt;</span>
+ <span class="identifier">CompareSelector</span>
+ <span class="special">,</span> <span class="identifier">Key</span>
+ <span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">_comparator</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">apply_wrap2</span><span class="special">&lt;</span>
+ <span class="identifier">AllocatorSelector</span>
+ <span class="special">,</span> <span class="identifier">Key</span>
+ <span class="special">,</span> <span class="identifier">Mapped</span>
+ <span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">_allocator</span><span class="special">;</span>
+
+ <span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">eval_if</span><span class="special">&lt;</span>
+ <span class="identifier">IsBoost</span>
+ <span class="special">,</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">if_</span><span class="special">&lt;</span>
+ <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">tr1</span><span class="special">::</span><span class="identifier">is_void</span><span class="special">&lt;</span><span class="identifier">Mapped</span><span class="special">&gt;</span>
+ <span class="special">,</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">container</span><span class="special">::</span><span class="identifier">multiset</span><span class="special">&lt;</span>
+ <span class="identifier">Key</span>
+ <span class="special">,</span> <span class="identifier">_comparator</span>
+ <span class="special">,</span> <span class="identifier">_allocator</span>
+ <span class="special">&gt;</span>
+ <span class="special">,</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">container</span><span class="special">::</span><span class="identifier">multimap</span><span class="special">&lt;</span>
+ <span class="identifier">Key</span>
+ <span class="special">,</span> <span class="identifier">Mapped</span>
+ <span class="special">,</span> <span class="identifier">_comparator</span>
+ <span class="special">,</span> <span class="identifier">_allocator</span>
+ <span class="special">&gt;</span>
+ <span class="special">&gt;</span>
+ <span class="special">,</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">if_</span><span class="special">&lt;</span>
+ <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">tr1</span><span class="special">::</span><span class="identifier">is_void</span><span class="special">&lt;</span><span class="identifier">Mapped</span><span class="special">&gt;</span>
+ <span class="special">,</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">multiset</span><span class="special">&lt;</span><span class="identifier">Key</span><span class="special">,</span><span class="identifier">_comparator</span><span class="special">,</span><span class="identifier">_allocator</span><span class="special">&gt;</span>
+ <span class="special">,</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">multimap</span><span class="special">&lt;</span><span class="identifier">Key</span><span class="special">,</span><span class="identifier">Mapped</span><span class="special">,</span><span class="identifier">_comparator</span><span class="special">,</span><span class="identifier">_allocator</span><span class="special">&gt;</span>
+ <span class="special">&gt;</span>
+ <span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+
+<span class="special">}</span> <span class="comment">// namespace boost</span>
+</pre>
+<p>
+ </p>
+<p>
+ You can use <code class="computeroutput"><span class="identifier">container_gen</span></code>
+ to easily select an appropriate Boost.PointerContainer type. Pointer containers
+ are ideal for storing heterogeneous items with a common base type, e.g.
+ shapes:
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">my_shape</span>
+<span class="special">{</span>
+ <span class="keyword">virtual</span> <span class="special">~</span><span class="identifier">my_shape</span><span class="special">()</span>
+ <span class="special">{</span>
+ <span class="special">}</span>
+
+ <span class="keyword">virtual</span> <span class="keyword">double</span> <span class="identifier">compute_perimeter</span><span class="special">()</span> <span class="keyword">const</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+
+ <span class="keyword">virtual</span> <span class="keyword">double</span> <span class="identifier">compute_area</span><span class="special">()</span> <span class="keyword">const</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+<span class="special">};</span>
+
+<span class="keyword">class</span> <span class="identifier">your_square</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">my_shape</span>
+<span class="special">{</span>
+ <span class="keyword">double</span> <span class="identifier">length</span><span class="special">;</span>
+
+ <span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">explicit</span> <span class="identifier">your_square</span><span class="special">(</span><span class="keyword">double</span> <span class="identifier">s</span> <span class="special">=</span> <span class="number">1.0</span><span class="special">)</span> <span class="special">:</span> <span class="identifier">length</span><span class="special">(</span><span class="identifier">s</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="special">}</span>
+
+ <span class="keyword">double</span> <span class="identifier">compute_perimeter</span><span class="special">()</span> <span class="keyword">const</span>
+ <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">length</span> <span class="special">*</span> <span class="number">4.0</span><span class="special">;</span>
+ <span class="special">}</span>
+
+ <span class="keyword">double</span> <span class="identifier">compute_area</span><span class="special">()</span> <span class="keyword">const</span>
+ <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">length</span> <span class="special">*</span> <span class="identifier">length</span><span class="special">;</span>
+ <span class="special">}</span>
+<span class="special">};</span>
+
+<span class="keyword">class</span> <span class="identifier">your_circle</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">my_shape</span>
+<span class="special">{</span>
+ <span class="keyword">double</span> <span class="identifier">radius</span><span class="special">;</span>
+
+ <span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">explicit</span> <span class="identifier">your_circle</span><span class="special">(</span><span class="keyword">double</span> <span class="identifier">r</span> <span class="special">=</span> <span class="number">1.0</span><span class="special">)</span> <span class="special">:</span> <span class="identifier">radius</span><span class="special">(</span><span class="identifier">r</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="special">}</span>
+
+ <span class="keyword">double</span> <span class="identifier">compute_perimeter</span><span class="special">()</span> <span class="keyword">const</span>
+ <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">constants</span><span class="special">::</span><span class="identifier">pi</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;()</span> <span class="special">*</span> <span class="identifier">radius</span> <span class="special">*</span> <span class="number">2.0</span><span class="special">;</span>
+ <span class="special">}</span>
+
+ <span class="keyword">double</span> <span class="identifier">compute_area</span><span class="special">()</span> <span class="keyword">const</span>
+ <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">constants</span><span class="special">::</span><span class="identifier">pi</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;()</span> <span class="special">*</span> <span class="identifier">radius</span> <span class="special">*</span> <span class="identifier">radius</span><span class="special">;</span>
+ <span class="special">}</span>
+<span class="special">};</span>
+
+<span class="keyword">class</span> <span class="identifier">some_right_triangle</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">my_shape</span>
+<span class="special">{</span>
+ <span class="keyword">double</span> <span class="identifier">base</span><span class="special">;</span>
+ <span class="keyword">double</span> <span class="identifier">height</span><span class="special">;</span>
+
+ <span class="keyword">public</span><span class="special">:</span>
+ <span class="identifier">some_right_triangle</span><span class="special">(</span><span class="keyword">double</span> <span class="identifier">b</span><span class="special">,</span> <span class="keyword">double</span> <span class="identifier">h</span><span class="special">)</span> <span class="special">:</span> <span class="identifier">base</span><span class="special">(</span><span class="identifier">b</span><span class="special">),</span> <span class="identifier">height</span><span class="special">(</span><span class="identifier">h</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="special">}</span>
+
+ <span class="identifier">some_right_triangle</span><span class="special">()</span> <span class="special">:</span> <span class="identifier">base</span><span class="special">(</span><span class="number">1.0</span><span class="special">),</span> <span class="identifier">height</span><span class="special">(</span><span class="number">1.0</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="special">}</span>
+
+ <span class="keyword">double</span> <span class="identifier">compute_perimeter</span><span class="special">()</span> <span class="keyword">const</span>
+ <span class="special">{</span>
+ <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">std</span><span class="special">;</span>
+ <span class="keyword">return</span> <span class="identifier">sqrt</span><span class="special">(</span><span class="identifier">base</span> <span class="special">*</span> <span class="identifier">base</span> <span class="special">+</span> <span class="identifier">height</span> <span class="special">*</span> <span class="identifier">height</span><span class="special">)</span> <span class="special">+</span> <span class="identifier">base</span> <span class="special">+</span> <span class="identifier">height</span><span class="special">;</span>
+ <span class="special">}</span>
+
+ <span class="keyword">double</span> <span class="identifier">compute_area</span><span class="special">()</span> <span class="keyword">const</span>
+ <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">constants</span><span class="special">::</span><span class="identifier">half</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;()</span> <span class="special">*</span> <span class="identifier">base</span> <span class="special">*</span> <span class="identifier">height</span><span class="special">;</span>
+ <span class="special">}</span>
+<span class="special">};</span>
+</pre>
+<p>
+ </p>
+<p>
+ Algorithms that work on the standard containers also work on pointer containers
+ out of the box.
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">double</span> <span class="identifier">add_perimeter</span><span class="special">(</span><span class="keyword">double</span> <span class="identifier">value</span><span class="special">,</span> <span class="identifier">my_shape</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">shape</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">shape</span><span class="special">.</span><span class="identifier">compute_perimeter</span><span class="special">()</span> <span class="special">+</span> <span class="identifier">value</span><span class="special">;</span>
+<span class="special">}</span>
+
+<span class="keyword">double</span> <span class="identifier">add_area</span><span class="special">(</span><span class="keyword">double</span> <span class="identifier">value</span><span class="special">,</span> <span class="identifier">my_shape</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">shape</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">shape</span><span class="special">.</span><span class="identifier">compute_area</span><span class="special">()</span> <span class="special">+</span> <span class="identifier">value</span><span class="special">;</span>
+<span class="special">}</span>
+
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Shapes</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">output_shape_stats</span><span class="special">(</span><span class="identifier">Shapes</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">shapes</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Total perimeter length = "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">accumulate</span><span class="special">(</span>
+ <span class="identifier">shapes</span>
+ <span class="special">,</span> <span class="number">0.0</span>
+ <span class="special">,</span> <span class="identifier">add_perimeter</span>
+ <span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Total area = "</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">accumulate</span><span class="special">(</span>
+ <span class="identifier">shapes</span>
+ <span class="special">,</span> <span class="number">0.0</span>
+ <span class="special">,</span> <span class="identifier">add_area</span>
+ <span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+ </p>
+<p>
+ The <code class="computeroutput"><span class="identifier">container_gen</span></code> metafunction
+ allows you to programmatically swap out different pointer container types
+ using type selectors.
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">main</span><span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">char</span><span class="special">**)</span>
+<span class="special">{</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">container_gen</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">ptr_listS</span><span class="special">,</span><span class="identifier">my_shape</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">shapes</span><span class="special">;</span>
+
+ <span class="identifier">shapes</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="keyword">new</span> <span class="identifier">your_square</span><span class="special">());</span>
+ <span class="identifier">shapes</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="keyword">new</span> <span class="identifier">your_circle</span><span class="special">());</span>
+ <span class="identifier">shapes</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="keyword">new</span> <span class="identifier">some_right_triangle</span><span class="special">());</span>
+
+ <span class="identifier">output_shape_stats</span><span class="special">(</span><span class="identifier">shapes</span><span class="special">);</span>
+ <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+ </p>
+<p>
+ It is possible to nest associative containers via <code class="computeroutput"><span class="identifier">container_gen</span></code>,
+ e.g.:
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">container_gen</span><span class="special">&lt;</span>
+ <span class="identifier">mapS</span>
+ <span class="special">,</span> <span class="identifier">container_gen</span><span class="special">&lt;</span><span class="identifier">setS</span><span class="special">,</span><span class="keyword">char</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="special">,</span> std::string
+ <span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">MapOfCharSets2Strings</span><span class="special">;</span>
+</pre>
+<p>
+ </p>
+<p>
+ Finally, to use some other container of your choice, define a selector
+ class and then specialize this metafunction for your selector.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.container_gen.definition"></a><a class="link" href="container_gen.html#container_gen.reference.container_gen.definition" title="Where defined">Where
+ defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span>boost/container_gen/container_gen.hpp<span class="special">&gt;</span>
+</pre>
+<p>
+ </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 1997-2013 Andrew Lumsdaine, Lie-Quan Lee,
+ Thomas Claveirole, Jeremy G. Siek, Cromwell D. Enage<p>
+ 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)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="selectors.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="emplace_function_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/emplace_assoc_function_gen.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/emplace_assoc_function_gen.html 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,133 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>emplace_associative_function_gen</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;container_gen 0.6">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="emplace_function_gen.html" title="emplace_function_gen">
+<link rel="next" href="push_range_function_gen.html" title="push_range_function_gen">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="emplace_function_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="push_range_function_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="container_gen.reference.emplace_assoc_function_gen"></a><a class="link" href="emplace_assoc_function_gen.html" title="emplace_associative_function_gen"><code class="computeroutput"><span class="identifier">emplace_associative_function_gen</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.emplace_assoc_function_gen.synopsis"></a><a class="link" href="emplace_assoc_function_gen.html#container_gen.reference.emplace_assoc_function_gen.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">emplace_associative_function_gen</span>
+ <span class="special">{</span>
+ <span class="comment">// typedef ... type;</span>
+ <span class="special">};</span>
+<span class="special">}</span> <span class="comment">// namespace boost</span>
+</pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.emplace_assoc_function_gen.description"></a><a class="link" href="emplace_assoc_function_gen.html#container_gen.reference.emplace_assoc_function_gen.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+ Returns a Default Constructible n-ary function object
+ type whose first argument type is a reference to an Associative Container and whose second argument
+ type is convertible to the container's key type. In practice, the type
+ of this container must be produced by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> when given the same
+ selector template argument. The rest of the function object's arguments,
+ if any, will be forwarded either to the container's emplacement method
+ (if <a class="link" href="has_emplace_mfunc_selector.html" title="has_emplace_member_function_selector"><code class="computeroutput"><span class="identifier">has_emplace_member_function_selector</span></code></a>
+ returns boost::mpl::true_ for the given selector)
+ or to the mapped type's matching constructor. The call operator's return
+ value is a std::pair whose second element evaluates
+ to <code class="computeroutput"><span class="keyword">true</span></code> upon successful insertion
+ and whose first element is an iterator pointing to the key-value pair inserted.
+ </p>
+<p>
+ The return type of this metafunction also defines an indexing operator
+ that accepts a reference to a container and returns a proxy object that
+ allows emplacement function calls to be chained together, much like Boost.Assign.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.emplace_assoc_function_gen.definition"></a><a class="link" href="emplace_assoc_function_gen.html#container_gen.reference.emplace_assoc_function_gen.definition" title="Where defined">Where
+ defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span>boost/container_gen/emplace_assoc_function_gen.hpp<span class="special">&gt;</span>
+</pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.emplace_assoc_function_gen.example"></a><a class="link" href="emplace_assoc_function_gen.html#container_gen.reference.emplace_assoc_function_gen.example" title="Example">Example</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">example</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="keyword">typename</span> <a class="link" href="container_gen.html" title="container_gen">container_gen</a><span class="special">&lt;</span><span class="identifier">Selector</span><span class="special">,</span><span class="keyword">int</span><span class="special">,</span>std::string<span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">c1</span><span class="special">,</span> <span class="identifier">c2</span><span class="special">,</span> <span class="identifier">c3</span><span class="special">;</span>
+ <span class="keyword">typename</span> <span class="identifier">emplace_associative_function_gen</span><span class="special">&lt;</span><span class="identifier">Selector</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">emplacer</span><span class="special">;</span>
+
+ BOOST_AUTO_TPL<span class="special">(</span><span class="identifier">result1</span><span class="special">,</span> <span class="identifier">emplacer</span><span class="special">(</span><span class="identifier">c1</span><span class="special">,</span> <span class="special">-</span><span class="number">1</span><span class="special">,</span> <span class="string">"Hello,"</span><span class="special">));</span>
+ BOOST_AUTO_TPL<span class="special">(</span><span class="identifier">result2</span><span class="special">,</span> <span class="identifier">emplacer</span><span class="special">(</span><span class="identifier">c2</span><span class="special">,</span> <span class="special">-</span><span class="number">1</span><span class="special">,</span> <span class="string">"Hello,"</span><span class="special">));</span>
+ BOOST_ASSERT<span class="special">(</span><span class="identifier">result1</span> <span class="special">==</span> <span class="identifier">result2</span><span class="special">);</span>
+
+ <span class="identifier">result1</span> <span class="special">=</span> <span class="identifier">emplacer</span><span class="special">(</span><span class="identifier">c1</span><span class="special">,</span> <span class="number">42</span><span class="special">,</span> <span class="string">"world!"</span><span class="special">);</span>
+ <span class="identifier">result2</span> <span class="special">=</span> <span class="identifier">emplacer</span><span class="special">(</span><span class="identifier">c2</span><span class="special">,</span> <span class="number">42</span><span class="special">,</span> <span class="string">"world!"</span><span class="special">);</span>
+ BOOST_ASSERT<span class="special">(</span><span class="identifier">result1</span> <span class="special">==</span> <span class="identifier">result2</span><span class="special">);</span>
+ BOOST_ASSERT<span class="special">(</span>boost::range::equal<span class="special">(</span><span class="identifier">c1</span><span class="special">,</span> <span class="identifier">c2</span><span class="special">));</span>
+
+ <span class="identifier">emplacer</span><span class="special">[</span><span class="identifier">c3</span><span class="special">](-</span><span class="number">1</span><span class="special">,</span> <span class="string">"Hello,"</span><span class="special">)(</span><span class="number">42</span><span class="special">,</span> <span class="string">"world!"</span><span class="special">);</span>
+ BOOST_ASSERT<span class="special">(</span>boost::range::equal<span class="special">(</span><span class="identifier">c1</span><span class="special">,</span> <span class="identifier">c3</span><span class="special">));</span>
+<span class="special">}</span>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="identifier">example</span><span class="special">&lt;</span><a class="link" href="selectors.html" title="Selectors">boost::map_selector</a><span class="special">&lt;</span>boost::mpl::true_<span class="special">&gt;</span> <span class="special">&gt;();</span>
+ <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.emplace_assoc_function_gen.test"></a><a class="link" href="emplace_assoc_function_gen.html#container_gen.reference.emplace_assoc_function_gen.test" title="Test">Test</a>
+</h4></div></div></div>
+<p>
+ <test/emplace_assoc_function_gen.cpp>
+ </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 1997-2013 Andrew Lumsdaine, Lie-Quan Lee,
+ Thomas Claveirole, Jeremy G. Siek, Cromwell D. Enage<p>
+ 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)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="emplace_function_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="push_range_function_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/emplace_function_gen.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/emplace_function_gen.html 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,132 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>emplace_function_gen</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;container_gen 0.6">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="container_gen.html" title="container_gen">
+<link rel="next" href="emplace_assoc_function_gen.html" title="emplace_associative_function_gen">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="container_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="emplace_assoc_function_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="container_gen.reference.emplace_function_gen"></a><a class="link" href="emplace_function_gen.html" title="emplace_function_gen"><code class="computeroutput"><span class="identifier">emplace_function_gen</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.emplace_function_gen.synopsis"></a><a class="link" href="emplace_function_gen.html#container_gen.reference.emplace_function_gen.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">emplace_function_gen</span>
+ <span class="special">{</span>
+ <span class="comment">// typedef ... type;</span>
+ <span class="special">};</span>
+<span class="special">}</span> <span class="comment">// namespace boost</span>
+</pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.emplace_function_gen.description"></a><a class="link" href="emplace_function_gen.html#container_gen.reference.emplace_function_gen.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+ Returns a Default Constructible n-ary function object
+ type whose first argument type is a reference to a container. In practice,
+ the type of this container must be produced by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> when given the same
+ selector template argument. The rest of the function object's arguments,
+ if any, will be forwarded either to the container's emplacement method
+ (if <a class="link" href="has_emplace_mfunc_selector.html" title="has_emplace_member_function_selector"><code class="computeroutput"><span class="identifier">has_emplace_member_function_selector</span></code></a>
+ returns boost::mpl::true_ for the given selector)
+ or to the value type's matching constructor. The call operator's return
+ value is a std::pair whose second element evaluates
+ to <code class="computeroutput"><span class="keyword">true</span></code> upon successful insertion
+ and whose first element is an iterator pointing to the element inserted.
+ </p>
+<p>
+ The return type of this metafunction also defines an indexing operator
+ that accepts a reference to a container and returns a proxy object that
+ allows emplacement function calls to be chained together, much like Boost.Assign.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.emplace_function_gen.definition"></a><a class="link" href="emplace_function_gen.html#container_gen.reference.emplace_function_gen.definition" title="Where defined">Where
+ defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span>boost/container_gen/emplace_function_gen.hpp<span class="special">&gt;</span>
+</pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.emplace_function_gen.example"></a><a class="link" href="emplace_function_gen.html#container_gen.reference.emplace_function_gen.example" title="Example">Example</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">example</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="keyword">typename</span> <a class="link" href="container_gen.html" title="container_gen">container_gen</a><span class="special">&lt;</span><span class="identifier">Selector</span><span class="special">,</span>std::string<span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">c1</span><span class="special">,</span> <span class="identifier">c2</span><span class="special">,</span> <span class="identifier">c3</span><span class="special">;</span>
+ <span class="keyword">typename</span> <span class="identifier">emplace_function_gen</span><span class="special">&lt;</span><span class="identifier">Selector</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">emplacer</span><span class="special">;</span>
+
+ BOOST_AUTO_TPL<span class="special">(</span><span class="identifier">result1</span><span class="special">,</span> <span class="identifier">emplacer</span><span class="special">(</span><span class="identifier">c1</span><span class="special">,</span> <span class="string">"Hello,"</span><span class="special">));</span>
+ BOOST_AUTO_TPL<span class="special">(</span><span class="identifier">result2</span><span class="special">,</span> <span class="identifier">emplacer</span><span class="special">(</span><span class="identifier">c2</span><span class="special">,</span> <span class="string">"Hello,"</span><span class="special">));</span>
+ BOOST_ASSERT<span class="special">(</span><span class="identifier">result1</span> <span class="special">==</span> <span class="identifier">result2</span><span class="special">);</span>
+
+ <span class="identifier">result1</span> <span class="special">=</span> <span class="identifier">emplacer</span><span class="special">(</span><span class="identifier">c1</span><span class="special">,</span> <span class="string">"world!"</span><span class="special">);</span>
+ <span class="identifier">result2</span> <span class="special">=</span> <span class="identifier">emplacer</span><span class="special">(</span><span class="identifier">c2</span><span class="special">,</span> <span class="string">"world!"</span><span class="special">);</span>
+ BOOST_ASSERT<span class="special">(</span><span class="identifier">result1</span> <span class="special">==</span> <span class="identifier">result2</span><span class="special">);</span>
+ BOOST_ASSERT<span class="special">(</span>boost::range::equal<span class="special">(</span><span class="identifier">c1</span><span class="special">,</span> <span class="identifier">c2</span><span class="special">));</span>
+
+ <span class="identifier">emplacer</span><span class="special">[</span><span class="identifier">c3</span><span class="special">](</span><span class="string">"Hello,"</span><span class="special">)(</span><span class="string">"world!"</span><span class="special">);</span>
+ BOOST_ASSERT<span class="special">(</span>boost::range::equal<span class="special">(</span><span class="identifier">c1</span><span class="special">,</span> <span class="identifier">c3</span><span class="special">));</span>
+<span class="special">}</span>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="identifier">example</span><span class="special">&lt;</span><a class="link" href="selectors.html" title="Selectors">boost::vector_selector</a><span class="special">&lt;</span>boost::mpl::true_<span class="special">&gt;</span> <span class="special">&gt;();</span>
+ <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.emplace_function_gen.test"></a><a class="link" href="emplace_function_gen.html#container_gen.reference.emplace_function_gen.test" title="Test">Test</a>
+</h4></div></div></div>
+<p>
+ <test/emplace_function_gen.cpp>
+ </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 1997-2013 Andrew Lumsdaine, Lie-Quan Lee,
+ Thomas Claveirole, Jeremy G. Siek, Cromwell D. Enage<p>
+ 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)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="container_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="emplace_assoc_function_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/has_emplace_mfunc_selector.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/has_emplace_mfunc_selector.html 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,86 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>has_emplace_member_function_selector</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;container_gen 0.6">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="has_stable_iters_selector.html" title="has_stable_iterators_selector">
+<link rel="next" href="../changelog.html" title="Changelog">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="has_stable_iters_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../changelog.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="container_gen.reference.has_emplace_mfunc_selector"></a><a class="link" href="has_emplace_mfunc_selector.html" title="has_emplace_member_function_selector"><code class="computeroutput"><span class="identifier">has_emplace_member_function_selector</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.has_emplace_mfunc_selector.synopsis"></a><a class="link" href="has_emplace_mfunc_selector.html#container_gen.reference.has_emplace_mfunc_selector.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">has_emplace_member_function_selector</span>
+ <span class="special">{</span>
+ <span class="comment">// typedef ... type;</span>
+ <span class="special">};</span>
+<span class="special">}</span> <span class="comment">// namespace boost</span>
+</pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.has_emplace_mfunc_selector.description"></a><a class="link" href="has_emplace_mfunc_selector.html#container_gen.reference.has_emplace_mfunc_selector.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+ Returns boost::mpl::true_ if the type to be returned
+ by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> supports emplacement
+ construction of its elements, boost::mpl::false_ otherwise.
+ </p>
+<p>
+ The current implementation returns boost::mpl::true_ when passed in selectors
+ for which <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> will return a Boost.Container
+ type or a Boost.Unordered
+ container; it will return boost::mpl::false_ for all other types of
+ selectors. Specialize this metafunction to return boost::mpl::true_ for your custom selector
+ if and only if the type to be returned by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> supports emplacement
+ construction of its elements.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.has_emplace_mfunc_selector.definition"></a><a class="link" href="has_emplace_mfunc_selector.html#container_gen.reference.has_emplace_mfunc_selector.definition" title="Where defined">Where
+ defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span>boost/container_gen/has_emplace_mfunc_selector.hpp<span class="special">&gt;</span>
+</pre>
+<p>
+ </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 1997-2013 Andrew Lumsdaine, Lie-Quan Lee,
+ Thomas Claveirole, Jeremy G. Siek, Cromwell D. Enage<p>
+ 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)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="has_stable_iters_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../changelog.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/has_stable_iters_selector.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/has_stable_iters_selector.html 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,87 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>has_stable_iterators_selector</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;container_gen 0.6">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="is_tr1_selector.html" title="is_tr1_selector">
+<link rel="next" href="has_emplace_mfunc_selector.html" title="has_emplace_member_function_selector">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="is_tr1_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="has_emplace_mfunc_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="container_gen.reference.has_stable_iters_selector"></a><a class="link" href="has_stable_iters_selector.html" title="has_stable_iterators_selector"><code class="computeroutput"><span class="identifier">has_stable_iterators_selector</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.has_stable_iters_selector.synopsis"></a><a class="link" href="has_stable_iters_selector.html#container_gen.reference.has_stable_iters_selector.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">has_stable_iterators_selector</span>
+ <span class="special">{</span>
+ <span class="comment">// typedef ... type;</span>
+ <span class="special">};</span>
+<span class="special">}</span> <span class="comment">// namespace boost</span>
+</pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.has_stable_iters_selector.description"></a><a class="link" href="has_stable_iters_selector.html#container_gen.reference.has_stable_iters_selector.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+ Returns boost::mpl::true_ if the type to be returned
+ by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> does not invalidate
+ iterators other than the argument during an <code class="computeroutput"><span class="identifier">erase</span><span class="special">()</span></code> call, or if the <code class="computeroutput"><span class="identifier">erase</span><span class="special">()</span></code> method does not exist, boost::mpl::false_ otherwise.
+ </p>
+<p>
+ The current implementation returns boost::mpl::false_ when passed in selectors
+ for which <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> will return a Hashed Associative Container, a Flat Associative Container, or a Random Access Container other than boost::array
+ or boost::container::stable_vector; it will return
+ boost::mpl::true_
+ for all other types of selectors. Specialize this metafunction to return
+ boost::mpl::false_
+ for your custom selector if and only if the type to be returned by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a>
+ invalidates iterators other than the argument during an <code class="computeroutput"><span class="identifier">erase</span><span class="special">()</span></code> call.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.has_stable_iters_selector.definition"></a><a class="link" href="has_stable_iters_selector.html#container_gen.reference.has_stable_iters_selector.definition" title="Where defined">Where
+ defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span>boost/container_gen/has_stable_iters_selector.hpp<span class="special">&gt;</span>
+</pre>
+<p>
+ </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 1997-2013 Andrew Lumsdaine, Lie-Quan Lee,
+ Thomas Claveirole, Jeremy G. Siek, Cromwell D. Enage<p>
+ 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)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="is_tr1_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="has_emplace_mfunc_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/insert_range_function_gen.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/insert_range_function_gen.html 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,210 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>insert_range_function_gen</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;container_gen 0.6">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="push_range_function_gen.html" title="push_range_function_gen">
+<link rel="next" href="splice_function_gen.html" title="splice_function_gen">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="push_range_function_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="splice_function_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="container_gen.reference.insert_range_function_gen"></a><a class="link" href="insert_range_function_gen.html" title="insert_range_function_gen"><code class="computeroutput"><span class="identifier">insert_range_function_gen</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.insert_range_function_gen.synopsis"></a><a class="link" href="insert_range_function_gen.html#container_gen.reference.insert_range_function_gen.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">insert_range_function_gen</span>
+ <span class="special">{</span>
+ <span class="comment">// typedef ... type;</span>
+ <span class="special">};</span>
+<span class="special">}</span> <span class="comment">// namespace boost</span>
+</pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.insert_range_function_gen.description"></a><a class="link" href="insert_range_function_gen.html#container_gen.reference.insert_range_function_gen.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+ Returns a Default Constructible function object type
+ whose call operator will take in a reference to a container, a valid iterator
+ representing the point of insertion, and either two Input Iterator arguments or a Single Pass Range argument. In practice,
+ the container type must be produced by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> when given the same
+ selector template argument.
+ </p>
+<p>
+ If the container type models the Sequence concept, then the function object
+ will forward the other argument(s) to the container's range insertion method;
+ the call operator's return value will be a Single Pass Range over the elements inserted
+ in the container.
+ </p>
+<p>
+ If the container type models the Associative Container concept, then the
+ function object will forward each element in the specified range to the
+ container's insertion method. If <a class="link" href="has_stable_iters_selector.html" title="has_stable_iterators_selector"><code class="computeroutput"><span class="identifier">has_stable_iterators_selector</span></code></a>
+ evaluates to boost::mpl::true_ for the specified selector,
+ then the call operator's return value will be a Single Pass Range of iterators pointing
+ to each of the elements that were successfully inserted in the container.
+ </p>
+<p>
+ The return type of this metafunction also defines an indexing operator
+ that accepts a reference to a container and returns a proxy object that
+ allows range insertion function calls to be chained together, much like
+ Boost.Assign.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.insert_range_function_gen.definition"></a><a class="link" href="insert_range_function_gen.html#container_gen.reference.insert_range_function_gen.definition" title="Where defined">Where
+ defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span>boost/container_gen/insert_range_function_gen.hpp<span class="special">&gt;</span>
+</pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.insert_range_function_gen.example"></a><a class="link" href="insert_range_function_gen.html#container_gen.reference.insert_range_function_gen.example" title="Example">Example</a>
+</h4></div></div></div>
+<p>
+ Use the boost::range::equal()
+ algorithm to test two ranges for equality. To handle the case where the
+ range returned from a call to the <code class="computeroutput"><span class="identifier">insert_range_function_gen</span></code>
+ return function type is a Single Pass Range of iterators, use boost::adaptors::indirect().
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ResultRange</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AddedContainer</span><span class="special">&gt;</span>
+<span class="keyword">bool</span>
+ <span class="identifier">test_result_range</span><span class="special">(</span>
+ <span class="identifier">ResultRange</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">r</span>
+ <span class="special">,</span> <span class="identifier">AddedContainer</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">c</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span>
+ <span class="special">)</span>
+<span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">range</span><span class="special">::</span><span class="identifier">equal</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">adaptors</span><span class="special">::</span><span class="identifier">indirect</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> <span class="identifier">c</span><span class="special">);</span>
+<span class="special">}</span>
+
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ResultRange</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AddedContainer</span><span class="special">&gt;</span>
+<span class="keyword">bool</span>
+ <span class="identifier">test_result_range</span><span class="special">(</span>
+ <span class="identifier">ResultRange</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">r</span>
+ <span class="special">,</span> <span class="identifier">AddedContainer</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">c</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span>
+ <span class="special">)</span>
+<span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">range</span><span class="special">::</span><span class="identifier">equal</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> <span class="identifier">c</span><span class="special">);</span>
+<span class="special">}</span>
+</pre>
+<p>
+ </p>
+<p>
+ Use the <a class="link" href="emplace_function_gen.html" title="emplace_function_gen"><code class="computeroutput"><span class="identifier">emplace_function_gen</span></code></a> metafunction
+ to construct containers using individual elements, then use this metafunction
+ to append the elements of one container to another in a single step. Use
+ the <a class="link" href="insert_range_result_gen.html" title="insert_range_result_gen"><code class="computeroutput"><span class="identifier">insert_range_result_gen</span></code></a> metafunction
+ to store the result of the operation.
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AddedContainer</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">test_insert_range_function_gen</span><span class="special">(</span><span class="identifier">AddedContainer</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">added_container</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">container_gen</span><span class="special">&lt;</span><span class="identifier">Selector</span><span class="special">,</span><span class="identifier">test_string</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">example_container</span><span class="special">,</span> <span class="identifier">test_container</span><span class="special">,</span> <span class="identifier">input_container</span><span class="special">;</span>
+ <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">emplace_function_gen</span><span class="special">&lt;</span><span class="identifier">Selector</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">emplacer</span><span class="special">;</span>
+ <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">insert_range_function_gen</span><span class="special">&lt;</span><span class="identifier">Selector</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">range_inserter</span><span class="special">;</span>
+
+ <span class="identifier">emplacer</span><span class="special">[</span><span class="identifier">example_container</span><span class="special">]</span>
+ <span class="special">(</span><span class="string">"able"</span><span class="special">)(</span><span class="string">"fox"</span><span class="special">)(</span><span class="string">"easy"</span><span class="special">)</span>
+ <span class="special">(</span><span class="string">"able"</span><span class="special">)(</span><span class="string">"fox"</span><span class="special">)(</span><span class="string">"iota"</span><span class="special">)(</span><span class="string">"hotel"</span><span class="special">)(</span><span class="string">"jupiter"</span><span class="special">)(</span><span class="string">"dog"</span><span class="special">)</span>
+ <span class="special">(</span><span class="string">"baker"</span><span class="special">)(</span><span class="string">"charlie"</span><span class="special">)(</span><span class="string">"dog"</span><span class="special">);</span>
+ <span class="identifier">emplacer</span><span class="special">[</span><span class="identifier">test_container</span><span class="special">]</span>
+ <span class="special">(</span><span class="string">"able"</span><span class="special">)(</span><span class="string">"fox"</span><span class="special">)(</span><span class="string">"easy"</span><span class="special">)(</span><span class="string">"baker"</span><span class="special">)(</span><span class="string">"charlie"</span><span class="special">)(</span><span class="string">"dog"</span><span class="special">);</span>
+ <span class="identifier">emplacer</span><span class="special">[</span><span class="identifier">input_container</span><span class="special">]</span>
+ <span class="special">(</span><span class="string">"able"</span><span class="special">)(</span><span class="string">"fox"</span><span class="special">)(</span><span class="string">"iota"</span><span class="special">)(</span><span class="string">"hotel"</span><span class="special">)(</span><span class="string">"jupiter"</span><span class="special">)(</span><span class="string">"dog"</span><span class="special">);</span>
+
+ <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">insert_range_result_gen</span><span class="special">&lt;</span><span class="identifier">Selector</span><span class="special">,</span><span class="identifier">test_string</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">insert_range_result</span> <span class="special">=</span> <span class="identifier">range_inserter</span><span class="special">(</span>
+ <span class="identifier">test_container</span>
+ <span class="special">,</span> <span class="special">++++++</span><span class="identifier">test_container</span><span class="special">.</span><span class="identifier">begin</span><span class="special">()</span>
+ <span class="special">,</span> <span class="identifier">input_container</span>
+ <span class="special">);</span>
+
+ <span class="identifier">BOOST_CHECK</span><span class="special">(</span>
+ <span class="identifier">test_result_range</span><span class="special">(</span>
+ <span class="identifier">insert_range_result</span>
+ <span class="special">,</span> <span class="identifier">added_container</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">is_associative_selector</span><span class="special">&lt;</span><span class="identifier">Selector</span><span class="special">&gt;()</span>
+ <span class="special">)</span>
+ <span class="special">);</span>
+ <span class="identifier">BOOST_CHECK</span><span class="special">(</span><span class="number">6</span> <span class="special">==</span> <span class="identifier">input_container</span><span class="special">.</span><span class="identifier">size</span><span class="special">());</span>
+ <span class="identifier">BOOST_CHECK</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">range</span><span class="special">::</span><span class="identifier">equal</span><span class="special">(</span><span class="identifier">test_container</span><span class="special">,</span> <span class="identifier">example_container</span><span class="special">));</span>
+<span class="special">}</span>
+</pre>
+<p>
+ </p>
+<p>
+ Test this metafunction across a wide variety of selector types.
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">test_main</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">argc</span><span class="special">,</span> <span class="keyword">char</span><span class="special">**</span> <span class="identifier">argv</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">container_gen</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">dequeS</span><span class="special">,</span><span class="identifier">test_string</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">added_container</span><span class="special">;</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">emplace_function_gen</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">dequeS</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">emplacer</span><span class="special">;</span>
+
+ <span class="identifier">emplacer</span><span class="special">[</span><span class="identifier">added_container</span><span class="special">]</span>
+ <span class="special">(</span><span class="string">"able"</span><span class="special">)(</span><span class="string">"fox"</span><span class="special">)(</span><span class="string">"iota"</span><span class="special">)(</span><span class="string">"hotel"</span><span class="special">)(</span><span class="string">"jupiter"</span><span class="special">)(</span><span class="string">"dog"</span><span class="special">);</span>
+ <span class="identifier">test_insert_range_function_gen</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">vecS</span><span class="special">&gt;(</span><span class="identifier">added_container</span><span class="special">);</span>
+ <span class="identifier">test_insert_range_function_gen</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">dequeS</span><span class="special">&gt;(</span><span class="identifier">added_container</span><span class="special">);</span>
+ <span class="identifier">test_insert_range_function_gen</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">listS</span><span class="special">&gt;(</span><span class="identifier">added_container</span><span class="special">);</span>
+ <span class="comment">// ...</span>
+
+ <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+ </p>
+<p>
+ The complete test program spans the following source files:
+ </p>
+<pre class="programlisting"><span class="special">*</span> <test/result_range.hpp>
+<span class="special">*</span> <test/insert_range_function_gen.cpp>
+</pre>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 1997-2013 Andrew Lumsdaine, Lie-Quan Lee,
+ Thomas Claveirole, Jeremy G. Siek, Cromwell D. Enage<p>
+ 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)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="push_range_function_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="splice_function_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/insert_range_result_gen.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/insert_range_result_gen.html 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,83 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>insert_range_result_gen</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;container_gen 0.6">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="splice_function_gen.html" title="splice_function_gen">
+<link rel="next" href="is_reversible_selector.html" title="is_reversible_selector">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="splice_function_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="is_reversible_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="container_gen.reference.insert_range_result_gen"></a><a class="link" href="insert_range_result_gen.html" title="insert_range_result_gen"><code class="computeroutput"><span class="identifier">insert_range_result_gen</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.insert_range_result_gen.synopsis"></a><a class="link" href="insert_range_result_gen.html#container_gen.reference.insert_range_result_gen.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">insert_range_result_gen</span>
+ <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+<span class="special">}</span> <span class="comment">// namespace boost</span>
+</pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.insert_range_result_gen.description"></a><a class="link" href="insert_range_result_gen.html#container_gen.reference.insert_range_result_gen.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+ Determines the result type of the function object type returned by either
+ <a class="link" href="push_range_function_gen.html" title="push_range_function_gen"><code class="computeroutput"><span class="identifier">push_range_function_gen</span></code></a> or <a class="link" href="insert_range_function_gen.html" title="insert_range_function_gen"><code class="computeroutput"><span class="identifier">insert_range_function_gen</span></code></a>, using
+ the return type of <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> as the function
+ object's container argument type. If the container type models the Sequence
+ concept, then the result type will be a Single Pass Range whose element type is
+ <code class="computeroutput"><span class="identifier">T</span></code>. If the container type
+ models the Associative Container concept, then the
+ result type will be a Single Pass Range whose element type is
+ the container's iterator type.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.insert_range_result_gen.definition"></a><a class="link" href="insert_range_result_gen.html#container_gen.reference.insert_range_result_gen.definition" title="Where defined">Where
+ defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span>boost/container_gen/insert_range_result_gen.hpp<span class="special">&gt;</span>
+</pre>
+<p>
+ </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 1997-2013 Andrew Lumsdaine, Lie-Quan Lee,
+ Thomas Claveirole, Jeremy G. Siek, Cromwell D. Enage<p>
+ 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)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="splice_function_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="is_reversible_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_associative_selector.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_associative_selector.html 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,85 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>is_associative_selector</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;container_gen 0.6">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="is_random_access_selector.html" title="is_random_access_selector">
+<link rel="next" href="is_unique_assoc_selector.html" title="is_unique_associative_selector">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="is_random_access_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="is_unique_assoc_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="container_gen.reference.is_associative_selector"></a><a class="link" href="is_associative_selector.html" title="is_associative_selector"><code class="computeroutput"><span class="identifier">is_associative_selector</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_associative_selector.synopsis"></a><a class="link" href="is_associative_selector.html#container_gen.reference.is_associative_selector.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">is_associative_selector</span>
+ <span class="special">{</span>
+ <span class="comment">// typedef ... type;</span>
+ <span class="special">};</span>
+<span class="special">}</span> <span class="comment">// namespace boost</span>
+</pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_associative_selector.description"></a><a class="link" href="is_associative_selector.html#container_gen.reference.is_associative_selector.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+ Returns boost::mpl::true_ if the type to be returned
+ by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> will model the
+ Associative Container concept, boost::mpl::false_ otherwise.
+ </p>
+<p>
+ If both BOOST_TYPEOF_EMULATION and BOOST_MPL_CFG_NO_HAS_XXX
+ are defined, then you must specialize either the <a class="link" href="is_unique_assoc_selector.html" title="is_unique_associative_selector"><code class="computeroutput"><span class="identifier">is_unique_associative_selector</span></code></a>
+ metafunction or the <a class="link" href="is_multiple_assoc_selector.html" title="is_multiple_associative_selector"><code class="computeroutput"><span class="identifier">is_multiple_associative_selector</span></code></a>
+ metafunction to return boost::mpl::true_ for your custom selector
+ if and only if the <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> return type models
+ the respective concept.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_associative_selector.definition"></a><a class="link" href="is_associative_selector.html#container_gen.reference.is_associative_selector.definition" title="Where defined">Where
+ defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span>boost/container_gen/is_associative_selector.hpp<span class="special">&gt;</span>
+</pre>
+<p>
+ </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 1997-2013 Andrew Lumsdaine, Lie-Quan Lee,
+ Thomas Claveirole, Jeremy G. Siek, Cromwell D. Enage<p>
+ 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)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="is_random_access_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="is_unique_assoc_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_flat_assoc_selector.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_flat_assoc_selector.html 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,84 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>is_flat_associative_selector</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;container_gen 0.6">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="is_multiple_assoc_selector.html" title="is_multiple_associative_selector">
+<link rel="next" href="is_hashed_assoc_selector.html" title="is_hashed_associative_selector">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="is_multiple_assoc_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="is_hashed_assoc_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="container_gen.reference.is_flat_assoc_selector"></a><a class="link" href="is_flat_assoc_selector.html" title="is_flat_associative_selector"><code class="computeroutput"><span class="identifier">is_flat_associative_selector</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_flat_assoc_selector.synopsis"></a><a class="link" href="is_flat_assoc_selector.html#container_gen.reference.is_flat_assoc_selector.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">is_flat_associative_selector</span>
+ <span class="special">{</span>
+ <span class="comment">// typedef ... type;</span>
+ <span class="special">};</span>
+<span class="special">}</span> <span class="comment">// namespace boost</span>
+</pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_flat_assoc_selector.description"></a><a class="link" href="is_flat_assoc_selector.html#container_gen.reference.is_flat_assoc_selector.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+ Returns boost::mpl::true_ if the type to be returned
+ by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> will be a Flat Associative Container -- that is, if
+ it will model the Sorted Associative Container concept and
+ its iterator type will model the Random Access Iterator concept -- boost::mpl::false_
+ otherwise.
+ </p>
+<p>
+ If BOOST_MPL_CFG_NO_HAS_XXX is defined,
+ then you must specialize this metafunction to return boost::mpl::true_ for your custom selector
+ if and only if the type to be returned by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> is a Flat Associative Container.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_flat_assoc_selector.definition"></a><a class="link" href="is_flat_assoc_selector.html#container_gen.reference.is_flat_assoc_selector.definition" title="Where defined">Where
+ defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span>boost/container_gen/is_flat_assoc_selector.hpp<span class="special">&gt;</span>
+</pre>
+<p>
+ </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 1997-2013 Andrew Lumsdaine, Lie-Quan Lee,
+ Thomas Claveirole, Jeremy G. Siek, Cromwell D. Enage<p>
+ 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)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="is_multiple_assoc_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="is_hashed_assoc_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_hashed_assoc_selector.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_hashed_assoc_selector.html 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,83 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>is_hashed_associative_selector</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;container_gen 0.6">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="is_flat_assoc_selector.html" title="is_flat_associative_selector">
+<link rel="next" href="is_ptr_selector.html" title="is_ptr_selector">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="is_flat_assoc_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="is_ptr_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="container_gen.reference.is_hashed_assoc_selector"></a><a class="link" href="is_hashed_assoc_selector.html" title="is_hashed_associative_selector"><code class="computeroutput"><span class="identifier">is_hashed_associative_selector</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_hashed_assoc_selector.synopsis"></a><a class="link" href="is_hashed_assoc_selector.html#container_gen.reference.is_hashed_assoc_selector.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">is_hashed_associative_selector</span>
+ <span class="special">{</span>
+ <span class="comment">// typedef ... type;</span>
+ <span class="special">};</span>
+<span class="special">}</span> <span class="comment">// namespace boost</span>
+</pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_hashed_assoc_selector.description"></a><a class="link" href="is_hashed_assoc_selector.html#container_gen.reference.is_hashed_assoc_selector.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+ Returns boost::mpl::true_ if the type to be returned
+ by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> will model the
+ Hashed Associative Container concept, boost::mpl::false_
+ otherwise.
+ </p>
+<p>
+ If BOOST_MPL_CFG_NO_HAS_XXX is defined,
+ then you must specialize this metafunction to return boost::mpl::true_ for your custom selector
+ if and only if the type to be returned by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> models the Hashed Associative Container concept.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_hashed_assoc_selector.definition"></a><a class="link" href="is_hashed_assoc_selector.html#container_gen.reference.is_hashed_assoc_selector.definition" title="Where defined">Where
+ defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span>boost/container_gen/is_hashed_assoc_selector.hpp<span class="special">&gt;</span>
+</pre>
+<p>
+ </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 1997-2013 Andrew Lumsdaine, Lie-Quan Lee,
+ Thomas Claveirole, Jeremy G. Siek, Cromwell D. Enage<p>
+ 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)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="is_flat_assoc_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="is_ptr_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_multiple_assoc_selector.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_multiple_assoc_selector.html 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,85 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>is_multiple_associative_selector</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;container_gen 0.6">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="is_unique_assoc_selector.html" title="is_unique_associative_selector">
+<link rel="next" href="is_flat_assoc_selector.html" title="is_flat_associative_selector">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="is_unique_assoc_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="is_flat_assoc_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="container_gen.reference.is_multiple_assoc_selector"></a><a class="link" href="is_multiple_assoc_selector.html" title="is_multiple_associative_selector"><code class="computeroutput"><span class="identifier">is_multiple_associative_selector</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_multiple_assoc_selector.synopsis"></a><a class="link" href="is_multiple_assoc_selector.html#container_gen.reference.is_multiple_assoc_selector.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">is_multiple_associative_selector</span>
+ <span class="special">{</span>
+ <span class="comment">// typedef ... type;</span>
+ <span class="special">};</span>
+<span class="special">}</span> <span class="comment">// namespace boost</span>
+</pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_multiple_assoc_selector.description"></a><a class="link" href="is_multiple_assoc_selector.html#container_gen.reference.is_multiple_assoc_selector.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+ Returns boost::mpl::true_ if the type to be returned
+ by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> will model the
+ Multiple Associative Container concept,
+ boost::mpl::false_
+ otherwise.
+ </p>
+<p>
+ If both BOOST_TYPEOF_EMULATION and BOOST_MPL_CFG_NO_HAS_XXX
+ are defined, then you must specialize this metafunction to return boost::mpl::true_
+ for your custom selector if and only if the type to be returned by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a>
+ models the Multiple Associative Container concept.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_multiple_assoc_selector.definition"></a><a class="link" href="is_multiple_assoc_selector.html#container_gen.reference.is_multiple_assoc_selector.definition" title="Where defined">Where
+ defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span>boost/container_gen/is_multiple_assoc_selector.hpp<span class="special">&gt;</span>
+</pre>
+<p>
+ </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 1997-2013 Andrew Lumsdaine, Lie-Quan Lee,
+ Thomas Claveirole, Jeremy G. Siek, Cromwell D. Enage<p>
+ 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)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="is_unique_assoc_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="is_flat_assoc_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_ptr_selector.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_ptr_selector.html 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,76 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>is_ptr_selector</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;container_gen 0.6">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="is_hashed_assoc_selector.html" title="is_hashed_associative_selector">
+<link rel="next" href="is_recursive_selector.html" title="is_recursive_selector">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="is_hashed_assoc_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="is_recursive_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="container_gen.reference.is_ptr_selector"></a><a class="link" href="is_ptr_selector.html" title="is_ptr_selector"><code class="computeroutput"><span class="identifier">is_ptr_selector</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_ptr_selector.synopsis"></a><a class="link" href="is_ptr_selector.html#container_gen.reference.is_ptr_selector.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">is_ptr_selector</span>
+ <span class="special">{</span>
+ <span class="comment">// typedef ... type;</span>
+ <span class="special">};</span>
+<span class="special">}</span> <span class="comment">// namespace boost</span>
+</pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_ptr_selector.description"></a><a class="link" href="is_ptr_selector.html#container_gen.reference.is_ptr_selector.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+ Returns boost::mpl::true_ if the type to be returned
+ by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> is a Boost.PointerContainer, boost::mpl::false_ otherwise.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_ptr_selector.definition"></a><a class="link" href="is_ptr_selector.html#container_gen.reference.is_ptr_selector.definition" title="Where defined">Where
+ defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span>boost/container_gen/is_ptr_selector.hpp<span class="special">&gt;</span>
+</pre>
+<p>
+ </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 1997-2013 Andrew Lumsdaine, Lie-Quan Lee,
+ Thomas Claveirole, Jeremy G. Siek, Cromwell D. Enage<p>
+ 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)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="is_hashed_assoc_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="is_recursive_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_random_access_selector.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_random_access_selector.html 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,87 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>is_random_access_selector</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;container_gen 0.6">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="is_reversible_selector.html" title="is_reversible_selector">
+<link rel="next" href="is_associative_selector.html" title="is_associative_selector">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="is_reversible_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="is_associative_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="container_gen.reference.is_random_access_selector"></a><a class="link" href="is_random_access_selector.html" title="is_random_access_selector"><code class="computeroutput"><span class="identifier">is_random_access_selector</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_random_access_selector.synopsis"></a><a class="link" href="is_random_access_selector.html#container_gen.reference.is_random_access_selector.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">is_random_access_selector</span>
+ <span class="special">{</span>
+ <span class="comment">// typedef ... type;</span>
+ <span class="special">};</span>
+<span class="special">}</span> <span class="comment">// namespace boost</span>
+</pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_random_access_selector.description"></a><a class="link" href="is_random_access_selector.html#container_gen.reference.is_random_access_selector.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+ The boost::adjacency_list class template
+ uses this metafunction to determine whether or not it will provide an internal
+ property map that associates its vertex descriptors with unique indices.
+ Returns boost::mpl::true_ if the type to be returned
+ by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> will model the
+ Random Access Container concept, boost::mpl::false_
+ otherwise.
+ </p>
+<p>
+ If BOOST_MPL_CFG_NO_HAS_XXX is defined,
+ then you must specialize this metafunction to return boost::mpl::true_ for your custom selector
+ if and only if the <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> return type models
+ the Random Access Container concept.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_random_access_selector.definition"></a><a class="link" href="is_random_access_selector.html#container_gen.reference.is_random_access_selector.definition" title="Where defined">Where
+ defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span>boost/container_gen/is_random_access_selector.hpp<span class="special">&gt;</span>
+</pre>
+<p>
+ </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 1997-2013 Andrew Lumsdaine, Lie-Quan Lee,
+ Thomas Claveirole, Jeremy G. Siek, Cromwell D. Enage<p>
+ 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)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="is_reversible_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="is_associative_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_recursive_selector.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_recursive_selector.html 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,85 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>is_recursive_selector</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;container_gen 0.6">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="is_ptr_selector.html" title="is_ptr_selector">
+<link rel="next" href="is_tr1_selector.html" title="is_tr1_selector">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="is_ptr_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="is_tr1_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="container_gen.reference.is_recursive_selector"></a><a class="link" href="is_recursive_selector.html" title="is_recursive_selector"><code class="computeroutput"><span class="identifier">is_recursive_selector</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_recursive_selector.synopsis"></a><a class="link" href="is_recursive_selector.html#container_gen.reference.is_recursive_selector.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">is_recursive_selector</span>
+ <span class="special">{</span>
+ <span class="comment">// typedef ... type;</span>
+ <span class="special">};</span>
+<span class="special">}</span> <span class="comment">// namespace boost</span>
+</pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_recursive_selector.description"></a><a class="link" href="is_recursive_selector.html#container_gen.reference.is_recursive_selector.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+ Returns boost::mpl::true_ if the type to be returned
+ by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> can be used to define
+ a Recursive Container, boost::mpl::false_ otherwise.
+ </p>
+<p>
+ The current implementation returns boost::mpl::true_ when passed in selectors
+ for which <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> will return a Boost.Container
+ type, a Boost.PointerContainer type, or a Boost.Unordered
+ container; it will return boost::mpl::false_ for all other types of
+ selectors. Specialize this metafunction to return boost::mpl::true_ for your custom selector
+ if and only if the type to be returned by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> supports recursive data types.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_recursive_selector.definition"></a><a class="link" href="is_recursive_selector.html#container_gen.reference.is_recursive_selector.definition" title="Where defined">Where
+ defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span>boost/container_gen/is_recursive_selector.hpp<span class="special">&gt;</span>
+</pre>
+<p>
+ </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 1997-2013 Andrew Lumsdaine, Lie-Quan Lee,
+ Thomas Claveirole, Jeremy G. Siek, Cromwell D. Enage<p>
+ 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)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="is_ptr_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="is_tr1_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_reversible_selector.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_reversible_selector.html 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,83 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>is_reversible_selector</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;container_gen 0.6">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="insert_range_result_gen.html" title="insert_range_result_gen">
+<link rel="next" href="is_random_access_selector.html" title="is_random_access_selector">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="insert_range_result_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="is_random_access_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="container_gen.reference.is_reversible_selector"></a><a class="link" href="is_reversible_selector.html" title="is_reversible_selector"><code class="computeroutput"><span class="identifier">is_reversible_selector</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_reversible_selector.synopsis"></a><a class="link" href="is_reversible_selector.html#container_gen.reference.is_reversible_selector.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">is_reversible_selector</span>
+ <span class="special">{</span>
+ <span class="comment">// typedef ... type;</span>
+ <span class="special">};</span>
+<span class="special">}</span> <span class="comment">// namespace boost</span>
+</pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_reversible_selector.description"></a><a class="link" href="is_reversible_selector.html#container_gen.reference.is_reversible_selector.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+ Returns boost::mpl::true_ if the type to be returned
+ by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> will model the
+ Reversible Container concept, boost::mpl::false_ otherwise.
+ </p>
+<p>
+ If BOOST_MPL_CFG_NO_HAS_XXX is defined,
+ then you must specialize this metafunction to return boost::mpl::false_ for your custom selector
+ if and only if the <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> return type does
+ <span class="bold"><strong>not</strong></span> model the Reversible Container concept.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_reversible_selector.definition"></a><a class="link" href="is_reversible_selector.html#container_gen.reference.is_reversible_selector.definition" title="Where defined">Where
+ defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span>boost/container_gen/is_reversible_selector.hpp<span class="special">&gt;</span>
+</pre>
+<p>
+ </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 1997-2013 Andrew Lumsdaine, Lie-Quan Lee,
+ Thomas Claveirole, Jeremy G. Siek, Cromwell D. Enage<p>
+ 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)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="insert_range_result_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="is_random_access_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_tr1_selector.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_tr1_selector.html 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,76 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>is_tr1_selector</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;container_gen 0.6">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="is_recursive_selector.html" title="is_recursive_selector">
+<link rel="next" href="has_stable_iters_selector.html" title="has_stable_iterators_selector">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="is_recursive_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="has_stable_iters_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="container_gen.reference.is_tr1_selector"></a><a class="link" href="is_tr1_selector.html" title="is_tr1_selector"><code class="computeroutput"><span class="identifier">is_tr1_selector</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_tr1_selector.synopsis"></a><a class="link" href="is_tr1_selector.html#container_gen.reference.is_tr1_selector.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">is_tr1_selector</span>
+ <span class="special">{</span>
+ <span class="comment">// typedef ... type;</span>
+ <span class="special">};</span>
+<span class="special">}</span> <span class="comment">// namespace boost</span>
+</pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_tr1_selector.description"></a><a class="link" href="is_tr1_selector.html#container_gen.reference.is_tr1_selector.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+ Returns boost::mpl::true_ if the type to be returned
+ by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> is a std::tr1::array, a std::tr1::unordered_set, a <a href="http://www.boost.org/doc/html/boost_tr1/subject_list.html#boost_tr1.subject_list.unordered_set" target="_top"><code class="computeroutput"><span class="identifier">std</span><span c
lass="special">::</span><span class="identifier">tr1</span><span class="special">::</span><span class="identifier">unordered_multiset</span></code></a>, a std::tr1::unordered_map, or a std::tr1::unordered_multimap; <a href="http://www.boost.org/libs/mpl/doc/refmanual/bool.html" target="_top"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span c
lass="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span></code></a> otherwise.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_tr1_selector.definition"></a><a class="link" href="is_tr1_selector.html#container_gen.reference.is_tr1_selector.definition" title="Where defined">Where
+ defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span>boost/container_gen/is_tr1_selector.hpp<span class="special">&gt;</span>
+</pre>
+<p>
+ </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 1997-2013 Andrew Lumsdaine, Lie-Quan Lee,
+ Thomas Claveirole, Jeremy G. Siek, Cromwell D. Enage<p>
+ 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)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="is_recursive_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="has_stable_iters_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_unique_assoc_selector.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/is_unique_assoc_selector.html 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,88 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>is_unique_associative_selector</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;container_gen 0.6">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="is_associative_selector.html" title="is_associative_selector">
+<link rel="next" href="is_multiple_assoc_selector.html" title="is_multiple_associative_selector">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="is_associative_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="is_multiple_assoc_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="container_gen.reference.is_unique_assoc_selector"></a><a class="link" href="is_unique_assoc_selector.html" title="is_unique_associative_selector"><code class="computeroutput"><span class="identifier">is_unique_associative_selector</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_unique_assoc_selector.synopsis"></a><a class="link" href="is_unique_assoc_selector.html#container_gen.reference.is_unique_assoc_selector.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">is_unique_associative_selector</span>
+ <span class="special">{</span>
+ <span class="comment">// typedef ... type;</span>
+ <span class="special">};</span>
+<span class="special">}</span> <span class="comment">// namespace boost</span>
+</pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_unique_assoc_selector.description"></a><a class="link" href="is_unique_assoc_selector.html#container_gen.reference.is_unique_assoc_selector.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+ The boost::parallel_edge_traits metafunction
+ uses this metafunction to specify whether or not the storage type returned
+ by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> will allow parallel
+ edges--that is, if the storage type will <span class="bold"><strong>not</strong></span>
+ model the Unique Associative Container concept. Returns
+ boost::mpl::true_
+ if the storage type <span class="bold"><strong>will</strong></span> model the Unique Associative Container concept, boost::mpl::false_
+ otherwise.
+ </p>
+<p>
+ If both BOOST_TYPEOF_EMULATION and BOOST_MPL_CFG_NO_HAS_XXX
+ are defined, then you must specialize this metafunction to return boost::mpl::true_
+ for your custom selector if and only if the type to be returned by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a>
+ models the Unique Associative Container concept.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.is_unique_assoc_selector.definition"></a><a class="link" href="is_unique_assoc_selector.html#container_gen.reference.is_unique_assoc_selector.definition" title="Where defined">Where
+ defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span>boost/container_gen/is_unique_assoc_selector.hpp<span class="special">&gt;</span>
+</pre>
+<p>
+ </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 1997-2013 Andrew Lumsdaine, Lie-Quan Lee,
+ Thomas Claveirole, Jeremy G. Siek, Cromwell D. Enage<p>
+ 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)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="is_associative_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="is_multiple_assoc_selector.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/push_range_function_gen.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/push_range_function_gen.html 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,215 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>push_range_function_gen</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;container_gen 0.6">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="emplace_assoc_function_gen.html" title="emplace_associative_function_gen">
+<link rel="next" href="insert_range_function_gen.html" title="insert_range_function_gen">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="emplace_assoc_function_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="insert_range_function_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="container_gen.reference.push_range_function_gen"></a><a class="link" href="push_range_function_gen.html" title="push_range_function_gen"><code class="computeroutput"><span class="identifier">push_range_function_gen</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.push_range_function_gen.synopsis"></a><a class="link" href="push_range_function_gen.html#container_gen.reference.push_range_function_gen.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">push_range_function_gen</span>
+ <span class="special">{</span>
+ <span class="comment">// typedef ... type;</span>
+ <span class="special">};</span>
+<span class="special">}</span> <span class="comment">// namespace boost</span>
+</pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.push_range_function_gen.description"></a><a class="link" href="push_range_function_gen.html#container_gen.reference.push_range_function_gen.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+ Returns a Default Constructible function object type
+ whose call operator will take in a reference to a container and either
+ two Input Iterator arguments or a Single Pass Range argument. In practice,
+ the type of the container must be produced by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> when given the same
+ selector template argument.
+ </p>
+<p>
+ If the container type models the Random Access Container concept, then the
+ function object will append the range specified by the other argument(s)
+ to the back of the container. The call operator's return value will be
+ a Single Pass Range over the elements inserted
+ in the container.
+ </p>
+<p>
+ If the container type models the Sequence concept, then the function object
+ will forward the other argument(s) to the container's range insertion method;
+ furthermore, if the container type models the Front Insertion Sequence concept, then the
+ point of insertion will be before the beginning; otherwise, if the container
+ type models the Back Insertion Sequence concept, then the
+ point of insertion will be the container's past-the-end iterator. The call
+ operator's return value will be a Single Pass Range over the elements inserted
+ in the container.
+ </p>
+<p>
+ If the container type models the Associative Container concept, then the
+ function object will forward each element in the specified range to the
+ container's insertion method. If <a class="link" href="has_stable_iters_selector.html" title="has_stable_iterators_selector"><code class="computeroutput"><span class="identifier">has_stable_iterators_selector</span></code></a>
+ evaluates to boost::mpl::true_ for the specified selector,
+ then the call operator's return value will be a Single Pass Range of iterators pointing
+ to each of the elements that were successfully inserted in the container.
+ </p>
+<p>
+ The return type of this metafunction also defines an indexing operator
+ that accepts a reference to a container and returns a proxy object that
+ allows range insertion function calls to be chained together, much like
+ Boost.Assign.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.push_range_function_gen.definition"></a><a class="link" href="push_range_function_gen.html#container_gen.reference.push_range_function_gen.definition" title="Where defined">Where
+ defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span>boost/container_gen/push_range_function_gen.hpp<span class="special">&gt;</span>
+</pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.push_range_function_gen.example"></a><a class="link" href="push_range_function_gen.html#container_gen.reference.push_range_function_gen.example" title="Example">Example</a>
+</h4></div></div></div>
+<p>
+ Use the boost::range::equal()
+ algorithm to test two ranges for equality. To handle the case where the
+ range returned from a call to the <code class="computeroutput"><span class="identifier">push_range_function_gen</span></code>
+ return function type is a Single Pass Range of iterators, use boost::adaptors::indirect().
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ResultRange</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AddedContainer</span><span class="special">&gt;</span>
+<span class="keyword">bool</span>
+ <span class="identifier">test_result_range</span><span class="special">(</span>
+ <span class="identifier">ResultRange</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">r</span>
+ <span class="special">,</span> <span class="identifier">AddedContainer</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">c</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span>
+ <span class="special">)</span>
+<span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">range</span><span class="special">::</span><span class="identifier">equal</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">adaptors</span><span class="special">::</span><span class="identifier">indirect</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> <span class="identifier">c</span><span class="special">);</span>
+<span class="special">}</span>
+
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ResultRange</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AddedContainer</span><span class="special">&gt;</span>
+<span class="keyword">bool</span>
+ <span class="identifier">test_result_range</span><span class="special">(</span>
+ <span class="identifier">ResultRange</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">r</span>
+ <span class="special">,</span> <span class="identifier">AddedContainer</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">c</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span>
+ <span class="special">)</span>
+<span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">range</span><span class="special">::</span><span class="identifier">equal</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> <span class="identifier">c</span><span class="special">);</span>
+<span class="special">}</span>
+</pre>
+<p>
+ </p>
+<p>
+ Use the <a class="link" href="emplace_function_gen.html" title="emplace_function_gen"><code class="computeroutput"><span class="identifier">emplace_function_gen</span></code></a> metafunction
+ to construct containers using individual elements, then use this metafunction
+ to append the elements of one container to another in a single step. Use
+ the <a class="link" href="insert_range_result_gen.html" title="insert_range_result_gen"><code class="computeroutput"><span class="identifier">insert_range_result_gen</span></code></a> metafunction
+ to store the result of the operation.
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AddedContainer</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">test_push_range_function_gen</span><span class="special">(</span><span class="identifier">AddedContainer</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">added_container</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">container_gen</span><span class="special">&lt;</span><span class="identifier">Selector</span><span class="special">,</span><span class="identifier">test_string</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">example_container</span><span class="special">,</span> <span class="identifier">test_container</span><span class="special">,</span> <span class="identifier">input_container</span><span class="special">;</span>
+ <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">emplace_function_gen</span><span class="special">&lt;</span><span class="identifier">Selector</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">emplacer</span><span class="special">;</span>
+ <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">push_range_function_gen</span><span class="special">&lt;</span><span class="identifier">Selector</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">range_pusher</span><span class="special">;</span>
+
+ <span class="identifier">emplacer</span><span class="special">[</span><span class="identifier">example_container</span><span class="special">]</span>
+ <span class="special">(</span><span class="string">"able"</span><span class="special">)(</span><span class="string">"fox"</span><span class="special">)(</span><span class="string">"easy"</span><span class="special">)(</span><span class="string">"baker"</span><span class="special">)(</span><span class="string">"charlie"</span><span class="special">)(</span><span class="string">"dog"</span><span class="special">);</span>
+ <span class="identifier">test_container</span> <span class="special">=</span> <span class="identifier">example_container</span><span class="special">;</span>
+ <span class="identifier">emplacer</span><span class="special">[</span><span class="identifier">example_container</span><span class="special">]</span>
+ <span class="special">(</span><span class="string">"able"</span><span class="special">)(</span><span class="string">"fox"</span><span class="special">)(</span><span class="string">"iota"</span><span class="special">)(</span><span class="string">"hotel"</span><span class="special">)(</span><span class="string">"jupiter"</span><span class="special">)(</span><span class="string">"dog"</span><span class="special">);</span>
+ <span class="identifier">emplacer</span><span class="special">[</span><span class="identifier">input_container</span><span class="special">]</span>
+ <span class="special">(</span><span class="string">"able"</span><span class="special">)(</span><span class="string">"fox"</span><span class="special">)(</span><span class="string">"iota"</span><span class="special">)(</span><span class="string">"hotel"</span><span class="special">)(</span><span class="string">"jupiter"</span><span class="special">)(</span><span class="string">"dog"</span><span class="special">);</span>
+
+ <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">insert_range_result_gen</span><span class="special">&lt;</span><span class="identifier">Selector</span><span class="special">,</span><span class="identifier">test_string</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">push_range_result</span> <span class="special">=</span> <span class="identifier">range_pusher</span><span class="special">(</span><span class="identifier">test_container</span><span class="special">,</span> <span class="identifier">input_container</span><span class="special">);</span>
+
+ <span class="identifier">BOOST_CHECK</span><span class="special">(</span>
+ <span class="identifier">test_result_range</span><span class="special">(</span>
+ <span class="identifier">push_range_result</span>
+ <span class="special">,</span> <span class="identifier">added_container</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">is_associative_selector</span><span class="special">&lt;</span><span class="identifier">Selector</span><span class="special">&gt;()</span>
+ <span class="special">)</span>
+ <span class="special">);</span>
+ <span class="identifier">BOOST_CHECK</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">range</span><span class="special">::</span><span class="identifier">equal</span><span class="special">(</span><span class="identifier">test_container</span><span class="special">,</span> <span class="identifier">example_container</span><span class="special">));</span>
+<span class="special">}</span>
+</pre>
+<p>
+ </p>
+<p>
+ Test this metafunction across a wide variety of selector types.
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">test_main</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">argc</span><span class="special">,</span> <span class="keyword">char</span><span class="special">**</span> <span class="identifier">argv</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">container_gen</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">dequeS</span><span class="special">,</span><span class="identifier">test_string</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">added_container</span><span class="special">;</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">emplace_function_gen</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">dequeS</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">emplacer</span><span class="special">;</span>
+
+ <span class="identifier">emplacer</span><span class="special">[</span><span class="identifier">added_container</span><span class="special">]</span>
+ <span class="special">(</span><span class="string">"able"</span><span class="special">)(</span><span class="string">"fox"</span><span class="special">)(</span><span class="string">"iota"</span><span class="special">)(</span><span class="string">"hotel"</span><span class="special">)(</span><span class="string">"jupiter"</span><span class="special">)(</span><span class="string">"dog"</span><span class="special">);</span>
+ <span class="identifier">test_push_range_function_gen</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">vecS</span><span class="special">&gt;(</span><span class="identifier">added_container</span><span class="special">);</span>
+ <span class="identifier">test_push_range_function_gen</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">dequeS</span><span class="special">&gt;(</span><span class="identifier">added_container</span><span class="special">);</span>
+ <span class="identifier">test_push_range_function_gen</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">listS</span><span class="special">&gt;(</span><span class="identifier">added_container</span><span class="special">);</span>
+ <span class="comment">// ...</span>
+
+ <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+ </p>
+<p>
+ The complete test program spans the following source files:
+ </p>
+<pre class="programlisting"><span class="special">*</span> <test/result_range.hpp>
+<span class="special">*</span> <test/push_range_function_gen.cpp>
+</pre>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 1997-2013 Andrew Lumsdaine, Lie-Quan Lee,
+ Thomas Claveirole, Jeremy G. Siek, Cromwell D. Enage<p>
+ 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)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="emplace_assoc_function_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="insert_range_function_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/selectors.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/selectors.html 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,778 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Selectors</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;container_gen 0.6">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="../reference.html" title="Reference">
+<link rel="next" href="container_gen.html" title="container_gen">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="container_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="container_gen.reference.selectors"></a><a class="link" href="selectors.html" title="Selectors">Selectors</a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.selectors.synopsis"></a><a class="link" href="selectors.html#container_gen.reference.selectors.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+ This library provides several selector templates, one for each STL Container model, Boost.Container, Boost.Unordered container, and Boost.PointerContainer to which it corresponds.
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ConstantSize</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">IsTR1</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">array_selector</span>
+ <span class="special">{</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">IsBoost</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AllocatorSelector</span> <span class="special">=</span> <span class="identifier">std_allocator_selector</span>
+ <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">vector_selector</span>
+ <span class="special">{</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">AllocatorSelector</span> <span class="special">=</span> <span class="identifier">std_allocator_selector</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">stable_vector_selector</span>
+ <span class="special">{</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">IsBoost</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AllocatorSelector</span> <span class="special">=</span> <span class="identifier">std_allocator_selector</span>
+ <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">deque_selector</span>
+ <span class="special">{</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">IsBoost</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AllocatorSelector</span> <span class="special">=</span> <span class="identifier">std_allocator_selector</span>
+ <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">list_selector</span>
+ <span class="special">{</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">AllocatorSelector</span> <span class="special">=</span> <span class="identifier">std_allocator_selector</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">slist_selector</span>
+ <span class="special">{</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">IsBoost</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CompareSelector</span> <span class="special">=</span> <span class="identifier">default_ordering_selector</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AllocatorSelector</span> <span class="special">=</span> <span class="identifier">std_allocator_selector</span>
+ <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">set_selector</span>
+ <span class="special">{</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">IsBoost</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CompareSelector</span> <span class="special">=</span> <span class="identifier">default_ordering_selector</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AllocatorSelector</span> <span class="special">=</span> <span class="identifier">std_allocator_selector</span>
+ <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">map_selector</span>
+ <span class="special">{</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">IsBoost</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CompareSelector</span> <span class="special">=</span> <span class="identifier">default_ordering_selector</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AllocatorSelector</span> <span class="special">=</span> <span class="identifier">std_allocator_selector</span>
+ <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">multiset_selector</span>
+ <span class="special">{</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">IsBoost</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CompareSelector</span> <span class="special">=</span> <span class="identifier">default_ordering_selector</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AllocatorSelector</span> <span class="special">=</span> <span class="identifier">std_allocator_selector</span>
+ <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">multimap_selector</span>
+ <span class="special">{</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">IsTR1</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">HashSelector</span> <span class="special">=</span> <span class="identifier">boost_hash_selector</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CompareSelector</span> <span class="special">=</span> <span class="identifier">default_equivalence_selector</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AllocatorSelector</span> <span class="special">=</span> <span class="identifier">std_allocator_selector</span>
+ <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">hash_set_selector</span>
+ <span class="special">{</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">IsTR1</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">HashSelector</span> <span class="special">=</span> <span class="identifier">boost_hash_selector</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CompareSelector</span> <span class="special">=</span> <span class="identifier">default_equivalence_selector</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AllocatorSelector</span> <span class="special">=</span> <span class="identifier">std_allocator_selector</span>
+ <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">hash_map_selector</span>
+ <span class="special">{</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">IsTR1</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">HashSelector</span> <span class="special">=</span> <span class="identifier">boost_hash_selector</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CompareSelector</span> <span class="special">=</span> <span class="identifier">default_equivalence_selector</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AllocatorSelector</span> <span class="special">=</span> <span class="identifier">std_allocator_selector</span>
+ <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">hash_multiset_selector</span>
+ <span class="special">{</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">IsTR1</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">HashSelector</span> <span class="special">=</span> <span class="identifier">boost_hash_selector</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CompareSelector</span> <span class="special">=</span> <span class="identifier">default_equivalence_selector</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AllocatorSelector</span> <span class="special">=</span> <span class="identifier">std_allocator_selector</span>
+ <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">hash_multimap_selector</span>
+ <span class="special">{</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">CompareSelector</span> <span class="special">=</span> <span class="identifier">default_ordering_selector</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AllocatorSelector</span> <span class="special">=</span> <span class="identifier">std_flat_allocator_selector</span>
+ <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">flat_set_selector</span>
+ <span class="special">{</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">CompareSelector</span> <span class="special">=</span> <span class="identifier">default_ordering_selector</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AllocatorSelector</span> <span class="special">=</span> <span class="identifier">std_flat_allocator_selector</span>
+ <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">flat_map_selector</span>
+ <span class="special">{</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">CompareSelector</span> <span class="special">=</span> <span class="identifier">default_ordering_selector</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AllocatorSelector</span> <span class="special">=</span> <span class="identifier">std_flat_allocator_selector</span>
+ <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">flat_multiset_selector</span>
+ <span class="special">{</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">CompareSelector</span> <span class="special">=</span> <span class="identifier">default_ordering_selector</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AllocatorSelector</span> <span class="special">=</span> <span class="identifier">std_flat_allocator_selector</span>
+ <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">flat_multimap_selector</span>
+ <span class="special">{</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">ConstantSize</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CloneAllocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">heap_clone_allocator</span>
+ <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">ptr_array_selector</span>
+ <span class="special">{</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">CloneAllocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">heap_clone_allocator</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Allocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special">&lt;</span><span class="keyword">void</span><span class="special">*&gt;</span>
+ <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">ptr_vector_selector</span>
+ <span class="special">{</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">CloneAllocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">heap_clone_allocator</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Allocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special">&lt;</span><span class="keyword">void</span><span class="special">*&gt;</span>
+ <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">ptr_deque_selector</span>
+ <span class="special">{</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">CloneAllocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">heap_clone_allocator</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Allocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special">&lt;</span><span class="keyword">void</span><span class="special">*&gt;</span>
+ <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">ptr_list_selector</span>
+ <span class="special">{</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">CompareSelector</span> <span class="special">=</span> <span class="identifier">default_ordering_selector</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CloneAllocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">heap_clone_allocator</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Allocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special">&lt;</span><span class="keyword">void</span><span class="special">*&gt;</span>
+ <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">ptr_set_selector</span>
+ <span class="special">{</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">CompareSelector</span> <span class="special">=</span> <span class="identifier">default_ordering_selector</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CloneAllocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">heap_clone_allocator</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Allocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special">&lt;</span><span class="keyword">void</span><span class="special">*&gt;</span>
+ <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">ptr_map_selector</span>
+ <span class="special">{</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">CompareSelector</span> <span class="special">=</span> <span class="identifier">default_ordering_selector</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CloneAllocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">heap_clone_allocator</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Allocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special">&lt;</span><span class="keyword">void</span><span class="special">*&gt;</span>
+ <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">ptr_multiset_selector</span>
+ <span class="special">{</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">CompareSelector</span> <span class="special">=</span> <span class="identifier">default_ordering_selector</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CloneAllocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">heap_clone_allocator</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Allocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special">&lt;</span><span class="keyword">void</span><span class="special">*&gt;</span>
+ <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">ptr_multimap_selector</span>
+ <span class="special">{</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">HashSelector</span> <span class="special">=</span> <span class="identifier">boost_hash_selector</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CompareSelector</span> <span class="special">=</span> <span class="identifier">default_equivalence_selector</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CloneAllocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">heap_clone_allocator</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Allocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special">&lt;</span><span class="keyword">void</span><span class="special">*&gt;</span>
+ <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">ptr_hash_set_selector</span>
+ <span class="special">{</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">HashSelector</span> <span class="special">=</span> <span class="identifier">boost_hash_selector</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CompareSelector</span> <span class="special">=</span> <span class="identifier">default_equivalence_selector</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CloneAllocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">heap_clone_allocator</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Allocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special">&lt;</span><span class="keyword">void</span><span class="special">*&gt;</span>
+ <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">ptr_hash_map_selector</span>
+ <span class="special">{</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">HashSelector</span> <span class="special">=</span> <span class="identifier">boost_hash_selector</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CompareSelector</span> <span class="special">=</span> <span class="identifier">default_equivalence_selector</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CloneAllocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">heap_clone_allocator</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Allocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special">&lt;</span><span class="keyword">void</span><span class="special">*&gt;</span>
+ <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">ptr_hash_multiset_selector</span>
+ <span class="special">{</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">HashSelector</span> <span class="special">=</span> <span class="identifier">boost_hash_selector</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CompareSelector</span> <span class="special">=</span> <span class="identifier">default_equivalence_selector</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CloneAllocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">heap_clone_allocator</span>
+ <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Allocator</span> <span class="special">=</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special">&lt;</span><span class="keyword">void</span><span class="special">*&gt;</span>
+ <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">ptr_hash_multimap_selector</span>
+ <span class="special">{</span>
+ <span class="special">};</span>
+<span class="special">}</span> <span class="comment">// namespace boost</span>
+</pre>
+<p>
+ </p>
+<p>
+ In turn, the default arguments of these selector templates are themselves
+ selector types.
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">struct</span> <span class="identifier">default_equivalence_selector</span>
+ <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">apply</span>
+ <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="comment">// implementation_defined</span>
+ <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">};</span>
+
+ <span class="keyword">struct</span> <span class="identifier">default_ordering_selector</span>
+ <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">apply</span>
+ <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="comment">// implementation_defined</span>
+ <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">};</span>
+
+ <span class="keyword">struct</span> <span class="identifier">boost_hash_selector</span>
+ <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">apply</span>
+ <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">hash</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">};</span>
+
+ <span class="keyword">struct</span> <span class="identifier">tr1_hash_selector</span>
+ <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">apply</span>
+ <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">tr1</span><span class="special">::</span><span class="identifier">hash</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">};</span>
+
+ <span class="keyword">struct</span> <span class="identifier">std_allocator_selector</span>
+ <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T2</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">apply</span>
+ <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">if_</span><span class="special">&lt;</span>
+ <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">tr1</span><span class="special">::</span><span class="identifier">is_void</span><span class="special">&lt;</span><span class="identifier">T2</span><span class="special">&gt;</span>
+ <span class="special">,</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special">&lt;</span><span class="identifier">T1</span><span class="special">&gt;</span>
+ <span class="special">,</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special">&lt;</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special">&lt;</span><span class="identifier">T1</span> <span class="keyword">const</span><span class="special">,</span><span class="identifier">T2</span><span class="special">&gt;</span> <span class="special">&gt;</span>
+ <span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">};</span>
+
+ <span class="keyword">struct</span> <span class="identifier">std_flat_allocator_selector</span>
+ <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T2</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">apply</span>
+ <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">if_</span><span class="special">&lt;</span>
+ <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">tr1</span><span class="special">::</span><span class="identifier">is_void</span><span class="special">&lt;</span><span class="identifier">T2</span><span class="special">&gt;</span>
+ <span class="special">,</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special">&lt;</span><span class="identifier">T1</span><span class="special">&gt;</span>
+ <span class="special">,</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special">&lt;</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special">&lt;</span><span class="identifier">T1</span><span class="special">,</span><span class="identifier">T2</span><span class="special">&gt;</span> <span class="special">&gt;</span>
+ <span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">};</span>
+<span class="special">}</span> <span class="comment">// namespace boost</span>
+</pre>
+<p>
+ </p>
+<p>
+ To instantiate a model of Associative Container that stores C-style
+ strings as keys, pass the appropriate one of these types as the <code class="computeroutput"><span class="identifier">CompareSelector</span></code> argument to the corresponding
+ container selector template. The following <a class="link" href="selectors.html#container_gen.reference.selectors.description" title="Description">table</a>
+ describes the <code class="computeroutput"><span class="identifier">CompareSelector</span></code>
+ template argument among others in further detail.
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">struct</span> <span class="identifier">c_str_equivalence_selector</span>
+ <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">apply</span>
+ <span class="special">{</span>
+ <span class="keyword">class</span> <span class="identifier">type</span>
+ <span class="special">{</span>
+ <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keyword">bool</span>
+ <span class="identifier">_evaluate</span><span class="special">(</span>
+ <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">lhs</span>
+ <span class="special">,</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">rhs</span>
+ <span class="special">,</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">tr1</span><span class="special">::</span><span class="identifier">true_type</span>
+ <span class="special">)</span>
+ <span class="special">{</span>
+ <span class="keyword">return</span> <span class="special">!</span><span class="identifier">strcmp</span><span class="special">(</span><span class="identifier">lhs</span><span class="special">,</span> <span class="identifier">rhs</span><span class="special">);</span>
+ <span class="special">}</span>
+
+ <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keyword">bool</span>
+ <span class="identifier">_evaluate</span><span class="special">(</span>
+ <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">lhs</span>
+ <span class="special">,</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">rhs</span>
+ <span class="special">,</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">tr1</span><span class="special">::</span><span class="identifier">false_type</span>
+ <span class="special">)</span>
+ <span class="special">{</span>
+ <span class="keyword">return</span> <span class="special">!</span><span class="identifier">wcscmp</span><span class="special">(</span><span class="identifier">lhs</span><span class="special">,</span> <span class="identifier">rhs</span><span class="special">);</span>
+ <span class="special">}</span>
+
+ <span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">typedef</span> <span class="keyword">bool</span> <span class="identifier">result_type</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">first_argument_type</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">second_argument_type</span><span class="special">;</span>
+
+ <span class="keyword">inline</span> <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">lhs</span><span class="special">,</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">const</span>
+ <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">type</span><span class="special">::</span><span class="identifier">_evaluate</span><span class="special">(</span>
+ <span class="identifier">lhs</span>
+ <span class="special">,</span> <span class="identifier">rhs</span>
+ <span class="special">,</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">tr1</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">tr1</span><span class="special">::</span><span class="identifier">remove_cv</span><span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">tr1</span><span class="special">::</span><span class="identifier">remove_pointer</span><span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">tr1</span><span class="special">::</span><span class="identifier">remove_extent</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="special">,</span> <span class="keyword">char</span>
+ <span class="special">&gt;()</span>
+ <span class="special">);</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="special">};</span>
+ <span class="special">};</span>
+
+ <span class="keyword">struct</span> <span class="identifier">c_str_ordering_selector</span>
+ <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">apply</span>
+ <span class="special">{</span>
+ <span class="keyword">class</span> <span class="identifier">type</span>
+ <span class="special">{</span>
+ <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keyword">bool</span>
+ <span class="identifier">_evaluate</span><span class="special">(</span>
+ <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">lhs</span>
+ <span class="special">,</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">rhs</span>
+ <span class="special">,</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">tr1</span><span class="special">::</span><span class="identifier">true_type</span>
+ <span class="special">)</span>
+ <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">strcmp</span><span class="special">(</span><span class="identifier">lhs</span><span class="special">,</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="special">&lt;</span> <span class="number">0</span><span class="special">;</span>
+ <span class="special">}</span>
+
+ <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keyword">bool</span>
+ <span class="identifier">_evaluate</span><span class="special">(</span>
+ <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">lhs</span>
+ <span class="special">,</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">rhs</span>
+ <span class="special">,</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">tr1</span><span class="special">::</span><span class="identifier">false_type</span>
+ <span class="special">)</span>
+ <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">wcscmp</span><span class="special">(</span><span class="identifier">lhs</span><span class="special">,</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="special">&lt;</span> <span class="number">0</span><span class="special">;</span>
+ <span class="special">}</span>
+
+ <span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">typedef</span> <span class="keyword">bool</span> <span class="identifier">result_type</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">first_argument_type</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">second_argument_type</span><span class="special">;</span>
+
+ <span class="keyword">inline</span> <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">lhs</span><span class="special">,</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">const</span>
+ <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">type</span><span class="special">::</span><span class="identifier">_evaluate</span><span class="special">(</span>
+ <span class="identifier">lhs</span>
+ <span class="special">,</span> <span class="identifier">rhs</span>
+ <span class="special">,</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">tr1</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">tr1</span><span class="special">::</span><span class="identifier">remove_cv</span><span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">tr1</span><span class="special">::</span><span class="identifier">remove_pointer</span><span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="special">::</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">tr1</span><span class="special">::</span><span class="identifier">remove_extent</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="special">,</span> <span class="keyword">char</span>
+ <span class="special">&gt;()</span>
+ <span class="special">);</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="special">};</span>
+ <span class="special">};</span>
+<span class="special">}</span> <span class="comment">// namespace boost</span>
+</pre>
+<p>
+ </p>
+<p>
+ This library also retains the old selector types and, for completeness,
+ provides type definitions of the selector templates with default arguments.
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">typedef</span> <span class="identifier">vector_selector</span><span class="special">&lt;&gt;</span> <span class="identifier">vecS</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">deque_selector</span><span class="special">&lt;&gt;</span> <span class="identifier">dequeS</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">list_selector</span><span class="special">&lt;&gt;</span> <span class="identifier">listS</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">slist_selector</span><span class="special">&lt;&gt;</span> <span class="identifier">slistS</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">set_selector</span><span class="special">&lt;&gt;</span> <span class="identifier">setS</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">map_selector</span><span class="special">&lt;&gt;</span> <span class="identifier">mapS</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">multiset_selector</span><span class="special">&lt;&gt;</span> <span class="identifier">multisetS</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">multimap_selector</span><span class="special">&lt;&gt;</span> <span class="identifier">multimapS</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">hash_set_selector</span><span class="special">&lt;&gt;</span> <span class="identifier">hash_setS</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">hash_map_selector</span><span class="special">&lt;&gt;</span> <span class="identifier">hash_mapS</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">hash_multiset_selector</span><span class="special">&lt;&gt;</span> <span class="identifier">hash_multisetS</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">hash_multimap_selector</span><span class="special">&lt;&gt;</span> <span class="identifier">hash_multimapS</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">ptr_vector_selector</span><span class="special">&lt;&gt;</span> <span class="identifier">ptr_vecS</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">ptr_deque_selector</span><span class="special">&lt;&gt;</span> <span class="identifier">ptr_dequeS</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">ptr_list_selector</span><span class="special">&lt;&gt;</span> <span class="identifier">ptr_listS</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">ptr_set_selector</span><span class="special">&lt;&gt;</span> <span class="identifier">ptr_setS</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">ptr_map_selector</span><span class="special">&lt;&gt;</span> <span class="identifier">ptr_mapS</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">ptr_multiset_selector</span><span class="special">&lt;&gt;</span> <span class="identifier">ptr_multisetS</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">ptr_multimap_selector</span><span class="special">&lt;&gt;</span> <span class="identifier">ptr_multimapS</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">ptr_hash_set_selector</span><span class="special">&lt;&gt;</span> <span class="identifier">ptr_hash_setS</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">ptr_hash_map_selector</span><span class="special">&lt;&gt;</span> <span class="identifier">ptr_hash_mapS</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">ptr_hash_multiset_selector</span><span class="special">&lt;&gt;</span> <span class="identifier">ptr_hash_multisetS</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">ptr_hash_multimap_selector</span><span class="special">&lt;&gt;</span> <span class="identifier">ptr_hash_multimapS</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">stable_vector_selector</span><span class="special">&lt;&gt;</span> <span class="identifier">stable_vecS</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">flat_set_selector</span><span class="special">&lt;&gt;</span> <span class="identifier">flat_setS</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">flat_map_selector</span><span class="special">&lt;&gt;</span> <span class="identifier">flat_mapS</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">flat_multiset_selector</span><span class="special">&lt;&gt;</span> <span class="identifier">flat_multisetS</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">flat_multimap_selector</span><span class="special">&lt;&gt;</span> <span class="identifier">flat_multimapS</span><span class="special">;</span>
+<span class="special">}</span> <span class="comment">// namespace boost</span>
+</pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.selectors.description"></a><a class="link" href="selectors.html#container_gen.reference.selectors.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+ Selector templates determine the return type of the <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> metafunction. Since
+ the container models are not templatized on just their value types, the
+ selector templates must take in analogous arguments in order to provide
+ maximum flexibility. The following example demonstrates how a std::list with a custom allocator
+ type can become the <code class="computeroutput"><span class="identifier">OutEdgeList</span></code>
+ of a boost::adjacency_list.
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">int_allocator_selector</span>
+<span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">apply</span>
+ <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+<span class="special">};</span>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">char</span><span class="special">*[])</span>
+<span class="special">{</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">adjacency_list</span><span class="special">&lt;</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">list_selector</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span><span class="special">,</span><span class="identifier">int_allocator_selector</span><span class="special">&gt;</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dequeS</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">directedS</span>
+ <span class="special">&gt;</span> <span class="identifier">g</span><span class="special">(</span><span class="number">5</span><span class="special">);</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">get</span><span class="special">(</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">get</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">vertex_index</span><span class="special">,</span> <span class="identifier">g</span><span class="special">)</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">vertex</span><span class="special">(</span><span class="number">4</span><span class="special">,</span> <span class="identifier">g</span><span class="special">)</span>
+ <span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+
+ <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+ </p>
+<p>
+ Selector templates evaluate each parameter the same way, so the following
+ table will suffice in documenting the parameters:
+ </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">ConstantSize</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ An Integral Constant that determines
+ the size of the boost::array or std::tr1::array type to be returned
+ by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a>.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">IsBoost</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A Boolean Integral Constant that
+ determines whether <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> will return
+ the appropriate Boost.Container type or the corresponding
+ C++ standard container.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">IsTR1</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A Boolean Integral Constant that
+ determines whether <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> will return
+ the appropriate Boost.TR1 container type or the
+ corresponding Boost container type.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">AllocatorSelector</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A Unary Metafunction Class that
+ takes in the value type and returns an allocator model. The return
+ type will become the container template's <code class="computeroutput"><span class="identifier">Allocator</span></code>
+ argument.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">CompareSelector</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ If the selector template causes <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> to return
+ a Sorted Associative Container model,
+ then a Unary Metafunction Class that
+ takes in the value type and returns a Strict Weak Ordering model. If
+ the selector template causes <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> to return
+ a Hashed Associative Container model,
+ then a Unary Metafunction Class that
+ takes in the value type and returns a Binary Predicate model. The return
+ type will become the container template's <code class="computeroutput"><span class="identifier">Compare</span></code>
+ or <code class="computeroutput"><span class="identifier">Pred</span></code> argument.
+ </p>
+ <p>
+ By way of example, as discussed in the <a class="link" href="selectors.html#container_gen.reference.selectors.synopsis" title="Synopsis">synopsis</a>,
+ the <code class="computeroutput"><span class="identifier">c_str_equivalence_selector</span></code>
+ type can be passed as the <code class="computeroutput"><span class="identifier">CompareSelector</span></code>
+ argument to the <code class="computeroutput"><span class="identifier">hash_set_selector</span></code>
+ template, which in turn can be passed to <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> to return
+ a Hashed Associative Container model
+ that stores C-style strings as keys.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">HashSelector</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A Unary Metafunction Class that
+ takes in the value type and returns a Hash Function model. The return
+ type will become the container template's <code class="computeroutput"><span class="identifier">Hash</span></code>
+ argument.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">CloneAllocator</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A Clone Allocator model that will
+ become the container template's corresponding argument.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">Allocator</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ An allocator model that will become the container template's
+ corresponding argument.
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.selectors.definition"></a><a class="link" href="selectors.html#container_gen.reference.selectors.definition" title="Where defined">Where
+ defined</a>
+</h4></div></div></div>
+<p>
+ C-style string comparator selectors:
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span>boost/container_gen/c_str_cmp_selectors.hpp<span class="special">&gt;</span>
+</pre>
+<p>
+ </p>
+<p>
+ To register them under Boost.Typeof:
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span>boost/typeof/boost/container_gen/c_str_cmp_selectors.hpp<span class="special">&gt;</span>
+</pre>
+<p>
+ </p>
+<p>
+ All other selectors and selector templates:
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span>boost/container_gen/selectors.hpp<span class="special">&gt;</span>
+</pre>
+<p>
+ </p>
+<p>
+ To register them under Boost.Typeof:
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span>boost/typeof/boost/container_gen/selectors.hpp<span class="special">&gt;</span>
+</pre>
+<p>
+ </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 1997-2013 Andrew Lumsdaine, Lie-Quan Lee,
+ Thomas Claveirole, Jeremy G. Siek, Cromwell D. Enage<p>
+ 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)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="container_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/splice_function_gen.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/html/container_gen/reference/splice_function_gen.html 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,241 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>splice_function_gen</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;container_gen 0.6">
+<link rel="up" href="../reference.html" title="Reference">
+<link rel="prev" href="insert_range_function_gen.html" title="insert_range_function_gen">
+<link rel="next" href="insert_range_result_gen.html" title="insert_range_result_gen">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="insert_range_function_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="insert_range_result_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="container_gen.reference.splice_function_gen"></a><a class="link" href="splice_function_gen.html" title="splice_function_gen"><code class="computeroutput"><span class="identifier">splice_function_gen</span></code></a>
+</h3></div></div></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.splice_function_gen.synopsis"></a><a class="link" href="splice_function_gen.html#container_gen.reference.splice_function_gen.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">splice_function_gen</span>
+ <span class="special">{</span>
+ <span class="comment">// typedef ... type;</span>
+ <span class="special">};</span>
+<span class="special">}</span> <span class="comment">// namespace boost</span>
+</pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.splice_function_gen.description"></a><a class="link" href="splice_function_gen.html#container_gen.reference.splice_function_gen.description" title="Description">Description</a>
+</h4></div></div></div>
+<p>
+ Returns a Default Constructible function object type
+ whose call operator will take in a reference to the destination container,
+ a valid iterator representing the point of insertion, a reference to the
+ source container, and one of the following:
+ </p>
+<pre class="programlisting"><span class="special">*</span> <span class="identifier">A</span> <span class="identifier">valid</span> <span class="identifier">iterator</span> <span class="identifier">representing</span> <span class="identifier">the</span> <span class="identifier">point</span> <span class="identifier">of</span> <span class="identifier">erasure</span> <span class="identifier">from</span> <span class="identifier">the</span> <span class="identifier">source</span>
+ <span class="identifier">container</span><span class="special">.</span>
+<span class="special">*</span> <span class="identifier">Two</span> Input Iterator <span class="identifier">arguments</span> <span class="identifier">representing</span> <span class="identifier">the</span> <span class="identifier">source</span> <span class="identifier">container</span> <span class="keyword">or</span> <span class="identifier">a</span>
+ <span class="identifier">subrange</span><span class="special">.</span>
+</pre>
+<p>
+ The container type must model the Sequence concept. In practice, the container
+ type must be produced by <a class="link" href="container_gen.html" title="container_gen"><code class="computeroutput"><span class="identifier">container_gen</span></code></a> when given the same
+ selector template argument.
+ </p>
+<p>
+ The function call operator that takes in a single iterator to the source
+ container will transfer that element to the destination container at the
+ specified point of insertion. The return value will be an iterator pointing
+ to the inserted element.
+ </p>
+<p>
+ The function call operators that take in a subrange of the source container
+ will transfer the elements in the subrange to the destination container
+ at the specified point of insertion. The return value will be a Single Pass Range over the elements inserted
+ in the container.
+ </p>
+<p>
+ The return type of this metafunction also defines an indexing operator
+ that accepts a reference to a container and returns a proxy object that
+ allows splice function calls to be chained together, much like Boost.Assign.
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.splice_function_gen.definition"></a><a class="link" href="splice_function_gen.html#container_gen.reference.splice_function_gen.definition" title="Where defined">Where
+ defined</a>
+</h4></div></div></div>
+<p>
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span>boost/container_gen/splice_function_gen.hpp<span class="special">&gt;</span>
+</pre>
+<p>
+ </p>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="container_gen.reference.splice_function_gen.example"></a><a class="link" href="splice_function_gen.html#container_gen.reference.splice_function_gen.example" title="Example">Example</a>
+</h4></div></div></div>
+<p>
+ Use the boost::range::equal()
+ algorithm to test two ranges for equality.
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ResultRange</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AddedContainer</span><span class="special">&gt;</span>
+<span class="keyword">bool</span>
+ <span class="identifier">test_result_range</span><span class="special">(</span>
+ <span class="identifier">ResultRange</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">r</span>
+ <span class="special">,</span> <span class="identifier">AddedContainer</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">c</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span>
+ <span class="special">)</span>
+<span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">range</span><span class="special">::</span><span class="identifier">equal</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">adaptors</span><span class="special">::</span><span class="identifier">indirect</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> <span class="identifier">c</span><span class="special">);</span>
+<span class="special">}</span>
+
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ResultRange</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AddedContainer</span><span class="special">&gt;</span>
+<span class="keyword">bool</span>
+ <span class="identifier">test_result_range</span><span class="special">(</span>
+ <span class="identifier">ResultRange</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">r</span>
+ <span class="special">,</span> <span class="identifier">AddedContainer</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">c</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span>
+ <span class="special">)</span>
+<span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">range</span><span class="special">::</span><span class="identifier">equal</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> <span class="identifier">c</span><span class="special">);</span>
+<span class="special">}</span>
+</pre>
+<p>
+ </p>
+<p>
+ Use the <a class="link" href="emplace_function_gen.html" title="emplace_function_gen"><code class="computeroutput"><span class="identifier">emplace_function_gen</span></code></a> metafunction
+ to construct containers using individual elements, then use this metafunction
+ to append the elements of one container to another in a single step. Use
+ the <a class="link" href="insert_range_result_gen.html" title="insert_range_result_gen"><code class="computeroutput"><span class="identifier">insert_range_result_gen</span></code></a> metafunction
+ to store the result of the operation.
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Selector</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AddedContainer</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">test_splice_function_gen</span><span class="special">(</span><span class="identifier">AddedContainer</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">added_container</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">container_gen</span><span class="special">&lt;</span><span class="identifier">Selector</span><span class="special">,</span><span class="identifier">test_string</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">C</span><span class="special">;</span>
+
+ <span class="identifier">C</span> <span class="identifier">ex_seq_1</span><span class="special">,</span> <span class="identifier">ex_seq_2</span><span class="special">,</span> <span class="identifier">test_seq_1</span><span class="special">,</span> <span class="identifier">test_seq_2</span><span class="special">,</span> <span class="identifier">input_seq</span><span class="special">;</span>
+ <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">emplace_function_gen</span><span class="special">&lt;</span><span class="identifier">Selector</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">emplacer</span><span class="special">;</span>
+ <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">splice_function_gen</span><span class="special">&lt;</span><span class="identifier">Selector</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">splicer</span><span class="special">;</span>
+
+ <span class="identifier">emplacer</span><span class="special">[</span><span class="identifier">ex_seq_1</span><span class="special">]</span>
+ <span class="special">(</span><span class="string">"able"</span><span class="special">)(</span><span class="string">"fox"</span><span class="special">)(</span><span class="string">"easy"</span><span class="special">)(</span><span class="string">"kilo"</span><span class="special">)(</span><span class="string">"baker"</span><span class="special">)(</span><span class="string">"charlie"</span><span class="special">)(</span><span class="string">"dog"</span><span class="special">);</span>
+ <span class="identifier">emplacer</span><span class="special">[</span><span class="identifier">ex_seq_2</span><span class="special">]</span>
+ <span class="special">(</span><span class="string">"able"</span><span class="special">)(</span><span class="string">"fox"</span><span class="special">)(</span><span class="string">"easy"</span><span class="special">)</span>
+ <span class="special">(</span><span class="string">"able"</span><span class="special">)(</span><span class="string">"fox"</span><span class="special">)(</span><span class="string">"iota"</span><span class="special">)(</span><span class="string">"hotel"</span><span class="special">)(</span><span class="string">"jupiter"</span><span class="special">)(</span><span class="string">"dog"</span><span class="special">)</span>
+ <span class="special">(</span><span class="string">"baker"</span><span class="special">)(</span><span class="string">"charlie"</span><span class="special">)(</span><span class="string">"dog"</span><span class="special">);</span>
+ <span class="identifier">emplacer</span><span class="special">[</span><span class="identifier">test_seq_1</span><span class="special">]</span>
+ <span class="special">(</span><span class="string">"able"</span><span class="special">)(</span><span class="string">"fox"</span><span class="special">)(</span><span class="string">"easy"</span><span class="special">)(</span><span class="string">"baker"</span><span class="special">)(</span><span class="string">"charlie"</span><span class="special">)(</span><span class="string">"dog"</span><span class="special">);</span>
+ <span class="identifier">emplacer</span><span class="special">[</span><span class="identifier">input_seq</span><span class="special">]</span>
+ <span class="special">(</span><span class="string">"able"</span><span class="special">)(</span><span class="string">"fox"</span><span class="special">)(</span><span class="string">"iota"</span><span class="special">)(</span><span class="string">"kilo"</span><span class="special">)(</span><span class="string">"hotel"</span><span class="special">)(</span><span class="string">"jupiter"</span><span class="special">)(</span><span class="string">"dog"</span><span class="special">);</span>
+ <span class="identifier">emplacer</span><span class="special">[</span><span class="identifier">test_seq_2</span><span class="special">]</span>
+ <span class="special">(</span><span class="string">"able"</span><span class="special">)(</span><span class="string">"fox"</span><span class="special">)(</span><span class="string">"iota"</span><span class="special">)(</span><span class="string">"hotel"</span><span class="special">)(</span><span class="string">"jupiter"</span><span class="special">)(</span><span class="string">"dog"</span><span class="special">);</span>
+
+ <span class="identifier">C</span> <span class="identifier">test_seq_3</span><span class="special">(</span><span class="identifier">test_seq_1</span><span class="special">);</span>
+ <span class="keyword">typename</span> <span class="identifier">C</span><span class="special">::</span><span class="identifier">iterator</span> <span class="identifier">itr</span> <span class="special">=</span> <span class="identifier">splicer</span><span class="special">(</span>
+ <span class="identifier">test_seq_1</span>
+ <span class="special">,</span> <span class="special">++++++</span><span class="identifier">test_seq_1</span><span class="special">.</span><span class="identifier">begin</span><span class="special">()</span>
+ <span class="special">,</span> <span class="identifier">input_seq</span>
+ <span class="special">,</span> <span class="special">++++++</span><span class="identifier">input_seq</span><span class="special">.</span><span class="identifier">begin</span><span class="special">()</span>
+ <span class="special">);</span>
+
+ <span class="identifier">BOOST_CHECK</span><span class="special">(*</span><span class="identifier">itr</span> <span class="special">==</span> <span class="identifier">test_string</span><span class="special">(</span><span class="string">"kilo"</span><span class="special">));</span>
+ <span class="identifier">BOOST_CHECK</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">range</span><span class="special">::</span><span class="identifier">equal</span><span class="special">(</span><span class="identifier">test_seq_1</span><span class="special">,</span> <span class="identifier">ex_seq_1</span><span class="special">));</span>
+ <span class="identifier">BOOST_CHECK</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">range</span><span class="special">::</span><span class="identifier">equal</span><span class="special">(</span><span class="identifier">test_seq_2</span><span class="special">,</span> <span class="identifier">input_seq</span><span class="special">));</span>
+
+ <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">insert_range_result_gen</span><span class="special">&lt;</span><span class="identifier">Selector</span><span class="special">,</span><span class="identifier">test_string</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">insert_range_result</span> <span class="special">=</span> <span class="identifier">splicer</span><span class="special">(</span>
+ <span class="identifier">test_seq_3</span>
+ <span class="special">,</span> <span class="special">++++++</span><span class="identifier">test_seq_3</span><span class="special">.</span><span class="identifier">begin</span><span class="special">()</span>
+ <span class="special">,</span> <span class="identifier">input_seq</span>
+ <span class="special">,</span> <span class="identifier">input_seq</span><span class="special">.</span><span class="identifier">begin</span><span class="special">()</span>
+ <span class="special">,</span> <span class="identifier">input_seq</span><span class="special">.</span><span class="identifier">end</span><span class="special">()</span>
+ <span class="special">);</span>
+
+ <span class="identifier">BOOST_CHECK</span><span class="special">(</span>
+ <span class="identifier">test_result_range</span><span class="special">(</span>
+ <span class="identifier">insert_range_result</span>
+ <span class="special">,</span> <span class="identifier">added_container</span>
+ <span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">is_associative_selector</span><span class="special">&lt;</span><span class="identifier">Selector</span><span class="special">&gt;()</span>
+ <span class="special">)</span>
+ <span class="special">);</span>
+ <span class="identifier">BOOST_CHECK</span><span class="special">(</span><span class="identifier">input_seq</span><span class="special">.</span><span class="identifier">empty</span><span class="special">());</span>
+ <span class="identifier">BOOST_CHECK</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">range</span><span class="special">::</span><span class="identifier">equal</span><span class="special">(</span><span class="identifier">test_seq_3</span><span class="special">,</span> <span class="identifier">ex_seq_2</span><span class="special">));</span>
+<span class="special">}</span>
+</pre>
+<p>
+ </p>
+<p>
+ Test this metafunction across a wide variety of selector types.
+ </p>
+<p>
+</p>
+<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">test_main</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">argc</span><span class="special">,</span> <span class="keyword">char</span><span class="special">**</span> <span class="identifier">argv</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">container_gen</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">dequeS</span><span class="special">,</span><span class="identifier">test_string</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">c</span><span class="special">;</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">emplace_function_gen</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">dequeS</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">emplacer</span><span class="special">;</span>
+
+ <span class="identifier">emplacer</span><span class="special">[</span><span class="identifier">c</span><span class="special">](</span><span class="string">"able"</span><span class="special">)(</span><span class="string">"fox"</span><span class="special">)(</span><span class="string">"iota"</span><span class="special">)(</span><span class="string">"hotel"</span><span class="special">)(</span><span class="string">"jupiter"</span><span class="special">)(</span><span class="string">"dog"</span><span class="special">);</span>
+ <span class="identifier">test_splice_function_gen</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">vecS</span><span class="special">&gt;(</span><span class="identifier">c</span><span class="special">);</span>
+ <span class="identifier">test_splice_function_gen</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">dequeS</span><span class="special">&gt;(</span><span class="identifier">c</span><span class="special">);</span>
+ <span class="identifier">test_splice_function_gen</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">listS</span><span class="special">&gt;(</span><span class="identifier">c</span><span class="special">);</span>
+ <span class="identifier">test_splice_function_gen</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">ptr_vecS</span><span class="special">&gt;(</span><span class="identifier">c</span><span class="special">);</span>
+ <span class="identifier">test_splice_function_gen</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">ptr_dequeS</span><span class="special">&gt;(</span><span class="identifier">c</span><span class="special">);</span>
+ <span class="identifier">test_splice_function_gen</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">ptr_listS</span><span class="special">&gt;(</span><span class="identifier">c</span><span class="special">);</span>
+ <span class="identifier">test_splice_function_gen</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">vector_selector</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span><span class="special">&gt;</span> <span class="special">&gt;(</span><span class="identifier">c</span><span class="special">);</span>
+ <span class="identifier">test_splice_function_gen</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">stable_vecS</span><span class="special">&gt;(</span><span class="identifier">c</span><span class="special">);</span>
+ <span class="identifier">test_splice_function_gen</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">deque_selector</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span><span class="special">&gt;</span> <span class="special">&gt;(</span><span class="identifier">c</span><span class="special">);</span>
+ <span class="identifier">test_splice_function_gen</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">list_selector</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span><span class="special">&gt;</span> <span class="special">&gt;(</span><span class="identifier">c</span><span class="special">);</span>
+ <span class="identifier">c</span><span class="special">.</span><span class="identifier">clear</span><span class="special">();</span>
+ <span class="identifier">emplacer</span><span class="special">[</span><span class="identifier">c</span><span class="special">](</span><span class="string">"dog"</span><span class="special">)(</span><span class="string">"jupiter"</span><span class="special">)(</span><span class="string">"hotel"</span><span class="special">)(</span><span class="string">"iota"</span><span class="special">)(</span><span class="string">"fox"</span><span class="special">)(</span><span class="string">"able"</span><span class="special">);</span>
+ <span class="identifier">test_splice_function_gen</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">slistS</span><span class="special">&gt;(</span><span class="identifier">c</span><span class="special">);</span>
+
+ <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+ </p>
+<p>
+ The complete test program spans the following source files:
+ </p>
+<pre class="programlisting"><span class="special">*</span> <test/result_range.hpp>
+<span class="special">*</span> <test/splice_function_gen.cpp>
+</pre>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 1997-2013 Andrew Lumsdaine, Lie-Quan Lee,
+ Thomas Claveirole, Jeremy G. Siek, Cromwell D. Enage<p>
+ 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)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="insert_range_function_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="insert_range_result_gen.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/container_gen/libs/container_gen/doc/html/index.html
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/html/index.html 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,67 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Chapter&#160;1.&#160;container_gen 0.6</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="index.html" title="Chapter&#160;1.&#160;container_gen 0.6">
+<link rel="next" href="container_gen/reference.html" title="Reference">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="C++ Boost" width="277" height="86" src="../../../../boost.png"></td></tr></table>
+<hr>
+<div class="spirit-nav"><a accesskey="n" href="container_gen/reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a></div>
+<div class="chapter">
+<div class="titlepage"><div>
+<div><h2 class="title">
+<a name="container_gen"></a>Chapter&#160;1.&#160;container_gen 0.6</h2></div>
+<div><div class="author"><h3 class="author">
+<span class="firstname">Andrew</span> <span class="surname">Lumsdaine</span>
+</h3></div></div>
+<div><div class="author"><h3 class="author">
+<span class="firstname">Lie-Quan</span> <span class="surname">Lee</span>
+</h3></div></div>
+<div><div class="author"><h3 class="author">
+<span class="firstname">Thomas</span> <span class="surname">Claveirole</span>
+</h3></div></div>
+<div><div class="author"><h3 class="author">
+<span class="firstname">Jeremy G.</span> <span class="surname">Siek</span>
+</h3></div></div>
+<div><div class="author"><h3 class="author">
+<span class="firstname">Cromwell D.</span> <span class="surname">Enage</span>
+</h3></div></div>
+<div><p class="copyright">Copyright &#169; 1997-2013 Andrew Lumsdaine, Lie-Quan Lee,
+ Thomas Claveirole, Jeremy G. Siek, Cromwell D. Enage</p></div>
+<div><div class="legalnotice">
+<a name="container_gen.legal"></a><p>
+ 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)
+ </p>
+</div></div>
+</div></div>
+<div class="toc">
+<p><b>Table of Contents</b></p>
+<dl>
+<dt><span class="section">Reference</span></dt>
+<dt><span class="section">Changelog</span></dt>
+</dl>
+</div>
+<h3>
+<a name="container_gen.h0"></a>
+ <span class="phrase"><a name="container_gen.rationale"></a></span><a class="link" href="index.html#container_gen.rationale">Rationale</a>
+ </h3>
+<p>
+ Significant interest was expressed in moving the <code class="computeroutput"><span class="identifier">container_gen</span></code>
+ metafunction from its current place in the BGL
+ to a more general or first-class residence. The relevant discussion is archived
+ here: http://lists.boost.org/Archives/boost/2011/05/181573.php.
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"><p><small>Last revised: March 10, 2013 at 19:29:42 GMT</small></p></td>
+<td align="right"><div class="copyright-footer"></div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav"><a accesskey="n" href="container_gen/reference.html"><img src="http://www.boost.org/doc/libs/release/doc/src/images/next.png" alt="Next"></a></div>
+</body>
+</html>

Added: sandbox/container_gen/libs/container_gen/doc/ref_container_gen.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/ref_container_gen.qbk 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,75 @@
+[/=============================================================================
+ Copyright (C) 2000-2001 Jeremy G. Siek
+ Copyright (C) 2011-2012 Cromwell D. Enage
+
+ 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])
+=============================================================================/]
+
+[section:container_gen `container_gen`]
+
+[section Synopsis]
+[reference__container_gen]
+[endsect]
+
+[section Description]
+The __graph_adjacency_list__ class template uses this metafunction to map the
+`OutEdgeList` and `VertexList` selectors to the actual container types used
+for the graph storage. You can also use this metafunction to determine the
+appropriate associative container type given the specified selector. The
+example routine below uses the `container_gen` return type to associate each
+distinct string character with the number of times it appears in the string.
+
+[example__output_char_tallies__definition]
+
+This library provides specializations of this metafunction class for each
+selector it provides whose resulting storage type models the __STL_Container__
+concept. Here, two such selectors are passed in calls to the example routine.
+
+[example__output_char_tallies__calls]
+
+The `container_gen` specialization for the `multimap_selector` template is
+shown here.
+
+[reference__container_gen__multimap_specialization]
+
+You can use `container_gen` to easily select an appropriate
+__Boost_Pointer_Container__ type. Pointer containers are ideal for storing
+heterogeneous items with a common base type, e.g. shapes:
+
+[example__output_shape_stats__type_definitions]
+
+Algorithms that work on the standard containers also work on pointer containers
+out of the box.
+
+[example__output_shape_stats__functions]
+
+The `container_gen` metafunction allows you to programmatically swap out
+different pointer container types using type selectors.
+
+[example__output_shape_stats__usage]
+
+It is possible to nest associative containers via `container_gen`, e.g.:
+
+``
+typedef container_gen<
+ mapS
+ , container_gen<setS,char>::type
+ , _std_string_
+ >::type
+ MapOfCharSets2Strings;
+``
+
+Finally, to use some other container of your choice, define a selector
+class and then specialize this metafunction for your selector.
+[endsect] [/ Description]
+
+[section:definition Where defined]
+``
+#include <__boost_container_gen_container_gen_hpp__>
+``
+[endsect]
+
+[endsect] [/ container_gen]
+

Added: sandbox/container_gen/libs/container_gen/doc/ref_emplace_assoc_func_gen.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/ref_emplace_assoc_func_gen.qbk 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,74 @@
+[/=============================================================================
+ Copyright (C) 2012-2013 Cromwell D. Enage
+
+ 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])
+=============================================================================/]
+
+[section:emplace_assoc_function_gen `emplace_associative_function_gen`]
+
+[section Synopsis]
+[reference__emplace_associative_function_gen]
+[endsect]
+
+[section Description]
+Returns a __Default_Constructible__ n-ary function object type whose first
+argument type is a reference to an __Associative_Container__ and whose second
+argument type is convertible to the container's key type. In practice, the
+type of this container must be produced by __container_gen__ when given the
+same selector template argument. The rest of the function object's arguments,
+if any, will be forwarded either to the container's emplacement method (if
+__has_emplace_member_function_selector__ returns __mpl_true__ for the given
+selector) or to the mapped type's matching constructor. The call operator's
+return value is a __std_pair__ whose second element evaluates to `true` upon
+successful insertion and whose first element is an iterator pointing to the
+key-value pair inserted.
+
+The return type of this metafunction also defines an indexing operator that
+accepts a reference to a container and returns a proxy object that allows
+emplacement function calls to be chained together, much like __Boost_Assign__.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_container_gen_emplace_assoc_function_gen_hpp__>
+``
+[endsect]
+
+[section Example]
+``
+template <typename Selector>
+void example()
+{
+ typename _container_gen_<Selector,int,_std_string_>::type c1, c2, c3;
+ typename emplace_associative_function_gen<Selector>::type emplacer;
+
+ _AUTO_TPL_(result1, emplacer(c1, -1, "Hello,"));
+ _AUTO_TPL_(result2, emplacer(c2, -1, "Hello,"));
+ _ASSERT_(result1 == result2);
+
+ result1 = emplacer(c1, 42, "world!");
+ result2 = emplacer(c2, 42, "world!");
+ _ASSERT_(result1 == result2);
+ _ASSERT_(_range_equal_(c1, c2));
+
+ emplacer[c3](-1, "Hello,")(42, "world!");
+ _ASSERT_(_range_equal_(c1, c3));
+}
+
+int main()
+{
+ example<_map_selector_<_mpl_true_> >();
+ return 0;
+}
+``
+[endsect]
+
+[section Test]
+[@../../test/emplace_assoc_function_gen.cpp
+`<test/emplace_assoc_function_gen.cpp>`]
+[endsect]
+
+[endsect] [/ emplace_associative_function_gen]
+

Added: sandbox/container_gen/libs/container_gen/doc/ref_emplace_function_gen.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/ref_emplace_function_gen.qbk 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,72 @@
+[/=============================================================================
+ Copyright (C) 2012-2013 Cromwell D. Enage
+
+ 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])
+=============================================================================/]
+
+[section:emplace_function_gen `emplace_function_gen`]
+
+[section Synopsis]
+[reference__emplace_function_gen]
+[endsect]
+
+[section Description]
+Returns a __Default_Constructible__ n-ary function object type whose first
+argument type is a reference to a container. In practice, the type of this
+container must be produced by __container_gen__ when given the same selector
+template argument. The rest of the function object's arguments, if any,
+will be forwarded either to the container's emplacement method (if
+__has_emplace_member_function_selector__ returns __mpl_true__ for the given
+selector) or to the value type's matching constructor. The call operator's
+return value is a __std_pair__ whose second element evaluates to `true` upon
+successful insertion and whose first element is an iterator pointing to the
+element inserted.
+
+The return type of this metafunction also defines an indexing operator that
+accepts a reference to a container and returns a proxy object that allows
+emplacement function calls to be chained together, much like __Boost_Assign__.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_container_gen_emplace_function_gen_hpp__>
+``
+[endsect]
+
+[section Example]
+``
+template <typename Selector>
+void example()
+{
+ typename _container_gen_<Selector,_std_string_>::type c1, c2, c3;
+ typename emplace_function_gen<Selector>::type emplacer;
+
+ _AUTO_TPL_(result1, emplacer(c1, "Hello,"));
+ _AUTO_TPL_(result2, emplacer(c2, "Hello,"));
+ _ASSERT_(result1 == result2);
+
+ result1 = emplacer(c1, "world!");
+ result2 = emplacer(c2, "world!");
+ _ASSERT_(result1 == result2);
+ _ASSERT_(_range_equal_(c1, c2));
+
+ emplacer[c3]("Hello,")("world!");
+ _ASSERT_(_range_equal_(c1, c3));
+}
+
+int main()
+{
+ example<_vector_selector_<_mpl_true_> >();
+ return 0;
+}
+``
+[endsect]
+
+[section Test]
+[@../../test/emplace_function_gen.cpp `<test/emplace_function_gen.cpp>`]
+[endsect]
+
+[endsect] [/ emplace_function_gen]
+

Added: sandbox/container_gen/libs/container_gen/doc/ref_has_emplace_mfunc_sel.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/ref_has_emplace_mfunc_sel.qbk 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,34 @@
+[/=============================================================================
+ Copyright (C) 2012 Cromwell D. Enage
+
+ 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])
+=============================================================================/]
+
+[section:has_emplace_mfunc_selector `has_emplace_member_function_selector`]
+
+[section Synopsis]
+[reference__has_emplace_member_function_selector]
+[endsect]
+
+[section Description]
+Returns __mpl_true__ if the type to be returned by __container_gen__ supports
+emplacement construction of its elements, __mpl_false__ otherwise.
+
+The current implementation returns __mpl_true__ when passed in selectors
+for which __container_gen__ will return a __Boost_Container__ type or a
+__Boost_Unordered__ container; it will return __mpl_false__ for all other types
+of selectors. Specialize this metafunction to return __mpl_true__ for your
+custom selector if and only if the type to be returned by __container_gen__
+supports emplacement construction of its elements.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_container_gen_has_emplace_mfunc_selector_hpp__>
+``
+[endsect]
+
+[endsect] [/ has_emplace_member_function_selector]
+

Added: sandbox/container_gen/libs/container_gen/doc/ref_has_stable_iters_sel.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/ref_has_stable_iters_sel.qbk 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,37 @@
+[/=============================================================================
+ Copyright (C) 2011-2012 Cromwell D. Enage
+
+ 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])
+=============================================================================/]
+
+[section:has_stable_iters_selector `has_stable_iterators_selector`]
+
+[section Synopsis]
+[reference__has_stable_iterators_selector]
+[endsect]
+
+[section Description]
+Returns __mpl_true__ if the type to be returned by __container_gen__ does not
+invalidate iterators other than the argument during an `erase()` call, or if
+the `erase()` method does not exist, __mpl_false__ otherwise.
+
+The current implementation returns __mpl_false__ when passed in selectors for
+which __container_gen__ will return a __Hashed_Associative_Container__, a
+__Flat_Associative_Container__, or a __Random_Access_Container__ other than
+__array__ or __container_stable_vector__; it will return __mpl_true__ for all
+other types of selectors. Specialize this metafunction to return __mpl_false__
+for your custom selector if and only if the type to be returned by
+__container_gen__ invalidates iterators other than the argument
+during an `erase()` call.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_container_gen_has_stable_iters_selector_hpp__>
+``
+[endsect]
+
+[endsect] [/ has_stable_iterators_selector]
+

Added: sandbox/container_gen/libs/container_gen/doc/ref_ins_range_function_gen.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/ref_ins_range_function_gen.qbk 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,72 @@
+[/=============================================================================
+ Copyright (C) 2013 Cromwell D. Enage
+
+ 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])
+=============================================================================/]
+
+[section:insert_range_function_gen `insert_range_function_gen`]
+
+[section Synopsis]
+[reference__insert_range_function_gen]
+[endsect]
+
+[section Description]
+Returns a __Default_Constructible__ function object type whose call operator
+will take in a reference to a container, a valid iterator representing the
+point of insertion, and either two __Input_Iterator__ arguments or a
+__Single_Pass_Range__ argument. In practice, the container type must be
+produced by __container_gen__ when given the same selector template argument.
+
+If the container type models the __Sequence__ concept, then the function object
+will forward the other argument(s) to the container's range insertion method;
+the call operator's return value will be a __Single_Pass_Range__ over the
+elements inserted in the container.
+
+If the container type models the __Associative_Container__ concept, then the
+function object will forward each element in the specified range to the
+container's insertion method. If __has_stable_iterators_selector__ evaluates
+to __mpl_true__ for the specified selector, then the call operator's return
+value will be a __Single_Pass_Range__ of iterators pointing to each of the
+elements that were successfully inserted in the container.
+
+The return type of this metafunction also defines an indexing operator that
+accepts a reference to a container and returns a proxy object that allows range
+insertion function calls to be chained together, much like __Boost_Assign__.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_container_gen_insert_range_function_gen_hpp__>
+``
+[endsect]
+
+[section Example]
+Use the __range_equal__ algorithm to test two ranges for equality. To handle
+the case where the range returned from a call to the
+`insert_range_function_gen` return function type is a __Single_Pass_Range__ of
+iterators, use __range_adaptors_indirect__.
+
+[test__result_range]
+
+Use the __emplace_function_gen__ metafunction to construct containers using
+individual elements, then use this metafunction to append the elements of
+one container to another in a single step. Use the __insert_range_result_gen__
+metafunction to store the result of the operation.
+
+[test__insert_range_function_gen]
+
+Test this metafunction across a wide variety of selector types.
+
+[test__insert_range_function_gen__main]
+
+The complete test program spans the following source files:
+
+ * __libs_container_gen_test_result_range_hpp__
+ * __libs_container_gen_test_insert_range_function_gen_cpp__
+
+[endsect]
+
+[endsect] [/ insert_range_function_gen]
+

Added: sandbox/container_gen/libs/container_gen/doc/ref_insert_range_result_gen.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/ref_insert_range_result_gen.qbk 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,32 @@
+[/=============================================================================
+ Copyright (C) 2013 Cromwell D. Enage
+
+ 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])
+=============================================================================/]
+
+[section:insert_range_result_gen `insert_range_result_gen`]
+
+[section Synopsis]
+[reference__insert_range_result_gen]
+[endsect]
+
+[section Description]
+Determines the result type of the function object type returned by either
+__push_range_function_gen__ or __insert_range_function_gen__, using the return
+type of __container_gen__ as the function object's container argument type. If
+the container type models the __Sequence__ concept, then the result type will
+be a __Single_Pass_Range__ whose element type is `T`. If the container type
+models the __Associative_Container__ concept, then the result type will be a
+__Single_Pass_Range__ whose element type is the container's iterator type.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_container_gen_insert_range_result_gen_hpp__>
+``
+[endsect]
+
+[endsect] [/ insert_range_result_gen]
+

Added: sandbox/container_gen/libs/container_gen/doc/ref_is_associative_selector.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/ref_is_associative_selector.qbk 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,33 @@
+[/=============================================================================
+ Copyright (C) 2011-2012 Cromwell D. Enage
+
+ 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])
+=============================================================================/]
+
+[section:is_associative_selector `is_associative_selector`]
+
+[section Synopsis]
+[reference__is_associative_selector]
+[endsect]
+
+[section Description]
+Returns __mpl_true__ if the type to be returned by __container_gen__ will model
+the __Associative_Container__ concept, __mpl_false__ otherwise.
+
+If both __TYPEOF_EMULATION__ and __MPL_CFG_NO_HAS_XXX__ are defined, then you
+must specialize either the __is_unique_associative_selector__ metafunction or
+the __is_multiple_associative_selector__ metafunction to return __mpl_true__
+for your custom selector if and only if the __container_gen__ return type
+models the respective concept.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_container_gen_is_associative_selector_hpp__>
+``
+[endsect]
+
+[endsect] [/ is_associative_selector]
+

Added: sandbox/container_gen/libs/container_gen/doc/ref_is_flat_assoc_selector.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/ref_is_flat_assoc_selector.qbk 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,34 @@
+[/=============================================================================
+ Copyright (C) 2011-2012 Cromwell D. Enage
+
+ 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])
+=============================================================================/]
+
+[section:is_flat_assoc_selector `is_flat_associative_selector`]
+
+[section Synopsis]
+[reference__is_flat_associative_selector]
+[endsect]
+
+[section Description]
+Returns __mpl_true__ if the type to be returned by __container_gen__ will be a
+__Flat_Associative_Container__ -- that is, if it will model the
+__Sorted_Associative_Container__ concept and its iterator type will model the
+__Random_Access_Iterator__ concept -- __mpl_false__ otherwise.
+
+If __MPL_CFG_NO_HAS_XXX__ is defined, then you must specialize this
+metafunction to return __mpl_true__ for your custom selector if and
+only if the type to be returned by __container_gen__ is a
+__Flat_Associative_Container__.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_container_gen_is_flat_assoc_selector_hpp__>
+``
+[endsect]
+
+[endsect] [/ is_flat_associative_selector]
+

Added: sandbox/container_gen/libs/container_gen/doc/ref_is_hashed_assoc_sel.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/ref_is_hashed_assoc_sel.qbk 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,32 @@
+[/=============================================================================
+ Copyright (C) 2011-2012 Cromwell D. Enage
+
+ 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])
+=============================================================================/]
+
+[section:is_hashed_assoc_selector `is_hashed_associative_selector`]
+
+[section Synopsis]
+[reference__is_hashed_associative_selector]
+[endsect]
+
+[section Description]
+Returns __mpl_true__ if the type to be returned by __container_gen__ will model
+the __Hashed_Associative_Container__ concept, __mpl_false__ otherwise.
+
+If __MPL_CFG_NO_HAS_XXX__ is defined, then you must specialize this
+metafunction to return __mpl_true__ for your custom selector if and
+only if the type to be returned by __container_gen__ models
+the __Hashed_Associative_Container__ concept.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_container_gen_is_hashed_assoc_selector_hpp__>
+``
+[endsect]
+
+[endsect] [/ is_hashed_associative_selector]
+

Added: sandbox/container_gen/libs/container_gen/doc/ref_is_multiple_assoc_sel.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/ref_is_multiple_assoc_sel.qbk 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,32 @@
+[/=============================================================================
+ Copyright (C) 2011-2012 Cromwell D. Enage
+
+ 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])
+=============================================================================/]
+
+[section:is_multiple_assoc_selector `is_multiple_associative_selector`]
+
+[section Synopsis]
+[reference__is_multiple_associative_selector]
+[endsect]
+
+[section Description]
+Returns __mpl_true__ if the type to be returned by __container_gen__ will model
+the __Multiple_Associative_Container__ concept, __mpl_false__ otherwise.
+
+If both __TYPEOF_EMULATION__ and __MPL_CFG_NO_HAS_XXX__ are defined, then you
+must specialize this metafunction to return __mpl_true__ for your custom
+selector if and only if the type to be returned by __container_gen__ models the
+__Multiple_Associative_Container__ concept.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_container_gen_is_multiple_assoc_selector_hpp__>
+``
+[endsect]
+
+[endsect] [/ is_multiple_associative_selector]
+

Added: sandbox/container_gen/libs/container_gen/doc/ref_is_ptr_selector.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/ref_is_ptr_selector.qbk 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,27 @@
+[/=============================================================================
+ Copyright (C) 2012 Cromwell D. Enage
+
+ 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])
+=============================================================================/]
+
+[section:is_ptr_selector `is_ptr_selector`]
+
+[section Synopsis]
+[reference__is_ptr_selector]
+[endsect]
+
+[section Description]
+Returns __mpl_true__ if the type to be returned by __container_gen__ is a
+__Boost_Pointer_Container__, __mpl_false__ otherwise.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_container_gen_is_ptr_selector_hpp__>
+``
+[endsect]
+
+[endsect] [/ is_ptr_selector]
+

Added: sandbox/container_gen/libs/container_gen/doc/ref_is_rand_access_selector.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/ref_is_rand_access_selector.qbk 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,35 @@
+[/=============================================================================
+ Copyright (C) 2011-2012 Cromwell D. Enage
+
+ 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])
+=============================================================================/]
+
+[section:is_random_access_selector `is_random_access_selector`]
+
+[section Synopsis]
+[reference__is_random_access_selector]
+[endsect]
+
+[section Description]
+The __graph_adjacency_list__ class template uses this metafunction to determine
+whether or not it will provide an internal property map that associates its
+vertex descriptors with unique indices. Returns __mpl_true__ if the type to be
+returned by __container_gen__ will model the __Random_Access_Container__
+concept, __mpl_false__ otherwise.
+
+If __MPL_CFG_NO_HAS_XXX__ is defined, then you must specialize this
+metafunction to return __mpl_true__ for your custom selector if and only if
+the __container_gen__ return type models the __Random_Access_Container__
+concept.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_container_gen_is_random_access_selector_hpp__>
+``
+[endsect]
+
+[endsect] [/ is_random_access_selector]
+

Added: sandbox/container_gen/libs/container_gen/doc/ref_is_recursive_selector.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/ref_is_recursive_selector.qbk 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,34 @@
+[/=============================================================================
+ Copyright (C) 2012 Cromwell D. Enage
+
+ 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])
+=============================================================================/]
+
+[section:is_recursive_selector `is_recursive_selector`]
+
+[section Synopsis]
+[reference__is_recursive_selector]
+[endsect]
+
+[section Description]
+Returns __mpl_true__ if the type to be returned by __container_gen__ can be
+used to define a __Recursive_Container__, __mpl_false__ otherwise.
+
+The current implementation returns __mpl_true__ when passed in selectors
+for which __container_gen__ will return a __Boost_Container__ type, a
+__Boost_Pointer_Container__ type, or a __Boost_Unordered__ container; it will
+return __mpl_false__ for all other types of selectors. Specialize this
+metafunction to return __mpl_true__ for your custom selector if and only if the
+type to be returned by __container_gen__ supports __recursive_data_types__.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_container_gen_is_recursive_selector_hpp__>
+``
+[endsect]
+
+[endsect] [/ is_recursive_selector]
+

Added: sandbox/container_gen/libs/container_gen/doc/ref_is_reversible_selector.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/ref_is_reversible_selector.qbk 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,32 @@
+[/=============================================================================
+ Copyright (C) 2012 Cromwell D. Enage
+
+ 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])
+=============================================================================/]
+
+[section:is_reversible_selector `is_reversible_selector`]
+
+[section Synopsis]
+[reference__is_reversible_selector]
+[endsect]
+
+[section Description]
+Returns __mpl_true__ if the type to be returned by __container_gen__ will model
+the __Reversible_Container__ concept, __mpl_false__ otherwise.
+
+If __MPL_CFG_NO_HAS_XXX__ is defined, then you must specialize this
+metafunction to return __mpl_false__ for your custom selector if and only if
+the __container_gen__ return type does *not* model the __Reversible_Container__
+concept.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_container_gen_is_reversible_selector_hpp__>
+``
+[endsect]
+
+[endsect] [/ is_reversible_selector]
+

Added: sandbox/container_gen/libs/container_gen/doc/ref_is_tr1_selector.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/ref_is_tr1_selector.qbk 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,29 @@
+[/=============================================================================
+ Copyright (C) 2012 Cromwell D. Enage
+
+ 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])
+=============================================================================/]
+
+[section:is_tr1_selector `is_tr1_selector`]
+
+[section Synopsis]
+[reference__is_tr1_selector]
+[endsect]
+
+[section Description]
+Returns __mpl_true__ if the type to be returned by __container_gen__ is a
+__tr1_array__, a __tr1_unordered_set__, a __tr1_unordered_multiset__, a
+__tr1_unordered_map__, or a __tr1_unordered_multimap__; __mpl_false__
+otherwise.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_container_gen_is_tr1_selector_hpp__>
+``
+[endsect]
+
+[endsect] [/ is_tr1_selector]
+

Added: sandbox/container_gen/libs/container_gen/doc/ref_is_unique_assoc_sel.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/ref_is_unique_assoc_sel.qbk 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,36 @@
+[/=============================================================================
+ Copyright (C) 2011-2012 Cromwell D. Enage
+
+ 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])
+=============================================================================/]
+
+[section:is_unique_assoc_selector `is_unique_associative_selector`]
+
+[section Synopsis]
+[reference__is_unique_associative_selector]
+[endsect]
+
+[section Description]
+The __graph_parallel_edge_traits__ metafunction uses this metafunction to
+specify whether or not the storage type returned by __container_gen__ will
+allow parallel edges--that is, if the storage type will *not* model the
+__Unique_Associative_Container__ concept. Returns __mpl_true__ if the storage
+type *will* model the __Unique_Associative_Container__ concept, __mpl_false__
+otherwise.
+
+If both __TYPEOF_EMULATION__ and __MPL_CFG_NO_HAS_XXX__ are defined, then you
+must specialize this metafunction to return __mpl_true__ for your custom
+selector if and only if the type to be returned by __container_gen__ models the
+__Unique_Associative_Container__ concept.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_container_gen_is_unique_assoc_selector_hpp__>
+``
+[endsect]
+
+[endsect] [/ is_unique_associative_selector]
+

Added: sandbox/container_gen/libs/container_gen/doc/ref_push_range_function_gen.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/ref_push_range_function_gen.qbk 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,81 @@
+[/=============================================================================
+ Copyright (C) 2013 Cromwell D. Enage
+
+ 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])
+=============================================================================/]
+
+[section:push_range_function_gen `push_range_function_gen`]
+
+[section Synopsis]
+[reference__push_range_function_gen]
+[endsect]
+
+[section Description]
+Returns a __Default_Constructible__ function object type whose call operator
+will take in a reference to a container and either two __Input_Iterator__
+arguments or a __Single_Pass_Range__ argument. In practice, the type of the
+container must be produced by __container_gen__ when given the same selector
+template argument.
+
+If the container type models the __Random_Access_Container__ concept, then the
+function object will append the range specified by the other argument(s) to the
+back of the container. The call operator's return value will be a
+__Single_Pass_Range__ over the elements inserted in the container.
+
+If the container type models the __Sequence__ concept, then the function object
+will forward the other argument(s) to the container's range insertion method;
+furthermore, if the container type models the __Front_Insertion_Sequence__
+concept, then the point of insertion will be before the beginning; otherwise,
+if the container type models the __Back_Insertion_Sequence__ concept, then the
+point of insertion will be the container's past-the-end iterator. The call
+operator's return value will be a __Single_Pass_Range__ over the elements
+inserted in the container.
+
+If the container type models the __Associative_Container__ concept, then the
+function object will forward each element in the specified range to the
+container's insertion method. If __has_stable_iterators_selector__ evaluates
+to __mpl_true__ for the specified selector, then the call operator's return
+value will be a __Single_Pass_Range__ of iterators pointing to each of the
+elements that were successfully inserted in the container.
+
+The return type of this metafunction also defines an indexing operator that
+accepts a reference to a container and returns a proxy object that allows range
+insertion function calls to be chained together, much like __Boost_Assign__.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_container_gen_push_range_function_gen_hpp__>
+``
+[endsect]
+
+[section Example]
+Use the __range_equal__ algorithm to test two ranges for equality. To handle
+the case where the range returned from a call to the `push_range_function_gen`
+return function type is a __Single_Pass_Range__ of iterators, use
+__range_adaptors_indirect__.
+
+[test__result_range]
+
+Use the __emplace_function_gen__ metafunction to construct containers using
+individual elements, then use this metafunction to append the elements of
+one container to another in a single step. Use the __insert_range_result_gen__
+metafunction to store the result of the operation.
+
+[test__push_range_function_gen]
+
+Test this metafunction across a wide variety of selector types.
+
+[test__push_range_function_gen__main]
+
+The complete test program spans the following source files:
+
+ * __libs_container_gen_test_result_range_hpp__
+ * __libs_container_gen_test_push_range_function_gen_cpp__
+
+[endsect]
+
+[endsect] [/ push_range_function_gen]
+

Added: sandbox/container_gen/libs/container_gen/doc/ref_selectors.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/ref_selectors.qbk 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,156 @@
+[/=============================================================================
+ Copyright (C) 2012 Cromwell D. Enage
+
+ 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])
+=============================================================================/]
+
+[section Selectors]
+
+[section Synopsis]
+This library provides several selector templates, one for each
+__STL_Container__ model, __Boost_Container__, __Boost_Unordered__ container,
+and __Boost_Pointer_Container__ to which it corresponds.
+
+[reference__container_selector_templates]
+
+In turn, the default arguments of these selector templates are themselves
+selector types.
+
+[reference__template_argument_selectors]
+
+To instantiate a model of __Associative_Container__ that stores C-style strings
+as keys, pass the appropriate one of these types as the `CompareSelector`
+argument to the corresponding container selector template. The following
+__Selectors_table__ describes the `CompareSelector` template argument among
+others in further detail.
+
+[reference__c_str_compare_selectors]
+
+This library also retains the old selector types and, for completeness,
+provides type definitions of the selector templates with default arguments.
+
+[reference__container_selector_typedefs]
+[endsect]
+
+[section Description]
+Selector templates determine the return type of the __container_gen__
+metafunction. Since the container models are not templatized on just their
+value types, the selector templates must take in analogous arguments in order
+to provide maximum flexibility. The following example demonstrates how a
+__std_list__ with a custom allocator type can become the `OutEdgeList` of a
+__graph_adjacency_list__.
+
+[example__container_gen__list_with_custom_allocator_selector]
+
+Selector templates evaluate each parameter the same way, so the following table
+will suffice in documenting the parameters:
+
+[table
+ [[Parameter][Description]]
+ [
+ [`ConstantSize`]
+ [
+ An __Integral_Constant__ that determines the size of the __array__
+ or __tr1_array__ type to be returned by __container_gen__.
+ ]
+ ]
+ [
+ [`IsBoost`]
+ [
+ A __Boolean_Integral_Constant__ that determines whether
+ __container_gen__ will return the appropriate __Boost_Container__
+ type or the corresponding C++ standard container.
+ ]
+ ]
+ [
+ [`IsTR1`]
+ [
+ A __Boolean_Integral_Constant__ that determines whether
+ __container_gen__ will return the appropriate __Boost_TR1__
+ container type or the corresponding Boost container type.
+ ]
+ ]
+ [
+ [`AllocatorSelector`]
+ [
+ A __Unary_Metafunction_Class__ that takes in the value type and
+ returns an allocator model. The return type will become the
+ container template's `Allocator` argument.
+ ]
+ ]
+ [
+ [`CompareSelector`]
+ [
+ If the selector template causes __container_gen__ to return a
+ __Sorted_Associative_Container__ model, then a
+ __Unary_Metafunction_Class__ that takes in the value type and
+ returns a __Strict_Weak_Ordering__ model. If the selector template
+ causes __container_gen__ to return a
+ __Hashed_Associative_Container__ model, then a
+ __Unary_Metafunction_Class__ that takes in the value type and
+ returns a __Binary_Predicate__ model. The return type will become
+ the container template's `Compare` or `Pred` argument.
+
+ By way of example, as discussed in the __Selectors_synopsis__,
+ the `c_str_equivalence_selector` type can be passed as the
+ `CompareSelector` argument to the `hash_set_selector` template,
+ which in turn can be passed to __container_gen__ to return a
+ __Hashed_Associative_Container__ model that stores C-style strings
+ as keys.
+ ]
+ ]
+ [
+ [`HashSelector`]
+ [
+ A __Unary_Metafunction_Class__ that takes in the value type and
+ returns a __Hash_Function__ model. The return type will become the
+ container template's `Hash` argument.
+ ]
+ ]
+ [
+ [`CloneAllocator`]
+ [
+ A __Clone_Allocator__ model that will become the container
+ template's corresponding argument.
+ ]
+ ]
+ [
+ [`Allocator`]
+ [
+ An allocator model that will become the container template's
+ corresponding argument.
+ ]
+ ]
+]
+[endsect] [/ Description]
+
+[section:definition Where defined]
+C-style string comparator selectors:
+
+``
+#include <__boost_container_gen_c_str_cmp_selectors_hpp__>
+``
+
+To register them under __Boost_Typeof__:
+
+``
+#include <__boost_typeof_boost_container_gen_c_str_cmp_selectors_hpp__>
+``
+
+All other selectors and selector templates:
+
+``
+#include <__boost_container_gen_selectors_hpp__>
+``
+
+To register them under __Boost_Typeof__:
+
+``
+#include <__boost_typeof_boost_container_gen_selectors_hpp__>
+``
+[endsect]
+
+[endsect] [/ Selectors]
+

Added: sandbox/container_gen/libs/container_gen/doc/ref_splice_function_gen.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/ref_splice_function_gen.qbk 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,75 @@
+[/=============================================================================
+ Copyright (C) 2013 Cromwell D. Enage
+
+ 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])
+=============================================================================/]
+
+[section:splice_function_gen `splice_function_gen`]
+
+[section Synopsis]
+[reference__splice_function_gen]
+[endsect]
+
+[section Description]
+Returns a __Default_Constructible__ function object type whose call operator
+will take in a reference to the destination container, a valid iterator
+representing the point of insertion, a reference to the source container, and
+one of the following:
+
+ * A valid iterator representing the point of erasure from the source
+ container.
+ * Two __Input_Iterator__ arguments representing the source container or a
+ subrange.
+
+The container type must model the __Sequence__ concept. In practice, the
+container type must be produced by __container_gen__ when given the same
+selector template argument.
+
+The function call operator that takes in a single iterator to the source
+container will transfer that element to the destination container at the
+specified point of insertion. The return value will be an iterator pointing
+to the inserted element.
+
+The function call operators that take in a subrange of the source container
+will transfer the elements in the subrange to the destination container at the
+specified point of insertion. The return value will be a __Single_Pass_Range__
+over the elements inserted in the container.
+
+The return type of this metafunction also defines an indexing operator that
+accepts a reference to a container and returns a proxy object that allows
+splice function calls to be chained together, much like __Boost_Assign__.
+[endsect]
+
+[section:definition Where defined]
+``
+#include <__boost_container_gen_splice_function_gen_hpp__>
+``
+[endsect]
+
+[section Example]
+Use the __range_equal__ algorithm to test two ranges for equality.
+
+[test__result_range]
+
+Use the __emplace_function_gen__ metafunction to construct containers using
+individual elements, then use this metafunction to append the elements of
+one container to another in a single step. Use the __insert_range_result_gen__
+metafunction to store the result of the operation.
+
+[test__splice_function_gen]
+
+Test this metafunction across a wide variety of selector types.
+
+[test__splice_function_gen__main]
+
+The complete test program spans the following source files:
+
+ * __libs_container_gen_test_result_range_hpp__
+ * __libs_container_gen_test_splice_function_gen_cpp__
+
+[endsect]
+
+[endsect] [/ splice_function_gen]
+

Added: sandbox/container_gen/libs/container_gen/doc/reference.qbk
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/doc/reference.qbk 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,60 @@
+[/=============================================================================
+ Copyright (C) 2011-2013 Cromwell D. Enage
+
+ 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])
+=============================================================================/]
+
+[section Reference]
+
+[include ref_selectors.qbk]
+[include ref_container_gen.qbk]
+[include ref_emplace_function_gen.qbk]
+[include ref_emplace_assoc_func_gen.qbk]
+[include ref_push_range_function_gen.qbk]
+[include ref_ins_range_function_gen.qbk]
+[include ref_splice_function_gen.qbk]
+[include ref_insert_range_result_gen.qbk]
+[include ref_is_reversible_selector.qbk]
+[include ref_is_rand_access_selector.qbk]
+[include ref_is_associative_selector.qbk]
+[include ref_is_unique_assoc_sel.qbk]
+[include ref_is_multiple_assoc_sel.qbk]
+[include ref_is_flat_assoc_selector.qbk]
+[include ref_is_hashed_assoc_sel.qbk]
+[include ref_is_ptr_selector.qbk]
+[include ref_is_recursive_selector.qbk]
+[include ref_is_tr1_selector.qbk]
+[include ref_has_stable_iters_sel.qbk]
+[include ref_has_emplace_mfunc_sel.qbk]
+
+ * __Selectors__
+
+[heading Type Generation Metafunctions]
+
+ * __container_gen__
+ * __emplace_function_gen__
+ * __emplace_associative_function_gen__
+ * __push_range_function_gen__
+ * __insert_range_function_gen__
+ * __splice_function_gen__
+ * __insert_range_result_gen__
+
+[heading Selector Introspection Metafunctions]
+
+ * __is_reversible_selector__
+ * __is_random_access_selector__
+ * __is_associative_selector__
+ * __is_unique_associative_selector__
+ * __is_multiple_associative_selector__
+ * __is_flat_associative_selector__
+ * __is_hashed_associative_selector__
+ * __is_ptr_selector__
+ * __is_recursive_selector__
+ * __is_tr1_selector__
+ * __has_stable_iterators_selector__
+ * __has_emplace_member_function_selector__
+
+[endsect] [/ Reference]
+

Added: sandbox/container_gen/libs/container_gen/test/insert_range_function_gen.cpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/test/insert_range_function_gen.cpp 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,135 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// 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)
+
+#include <boost/config.hpp>
+
+#if defined BOOST_MSVC
+ #pragma warning (push)
+ #pragma warning (disable : 4996) // fn called w/params that may be unsafe
+#endif
+
+#include <boost/mpl/bool.hpp>
+#include <boost/range/algorithm/equal.hpp>
+#include <boost/container_gen/selectors.hpp>
+#include <boost/container_gen/container_gen.hpp>
+#include <boost/container_gen/is_associative_selector.hpp>
+#include <boost/container_gen/emplace_function_gen.hpp>
+#include <boost/container_gen/insert_range_function_gen.hpp>
+#include <boost/container_gen/insert_range_result_gen.hpp>
+#include "type_definitions.hpp"
+#include "result_range.hpp"
+#include <boost/test/minimal.hpp>
+
+//[test__insert_range_function_gen
+template <typename Selector, typename AddedContainer>
+void test_insert_range_function_gen(AddedContainer const& added_container)
+{
+ typename boost::container_gen<Selector,test_string>::type
+ example_container, test_container, input_container;
+ typename boost::emplace_function_gen<Selector>::type emplacer;
+ typename boost::insert_range_function_gen<Selector>::type range_inserter;
+
+ emplacer[example_container]
+ ("able")("fox")("easy")
+ ("able")("fox")("iota")("hotel")("jupiter")("dog")
+ ("baker")("charlie")("dog");
+ emplacer[test_container]
+ ("able")("fox")("easy")("baker")("charlie")("dog");
+ emplacer[input_container]
+ ("able")("fox")("iota")("hotel")("jupiter")("dog");
+
+ typename boost::insert_range_result_gen<Selector,test_string>::type
+ insert_range_result = range_inserter(
+ test_container
+ , ++++++test_container.begin()
+ , input_container
+ );
+
+ BOOST_CHECK(
+ test_result_range(
+ insert_range_result
+ , added_container
+ , boost::is_associative_selector<Selector>()
+ )
+ );
+ BOOST_CHECK(6 == input_container.size());
+ BOOST_CHECK(boost::range::equal(test_container, example_container));
+}
+//]
+
+#if defined BOOST_MSVC
+ #pragma warning (pop)
+#endif
+
+//[test__insert_range_function_gen__main
+int test_main(int argc, char** argv)
+{
+ boost::container_gen<boost::dequeS,test_string>::type added_container;
+ boost::emplace_function_gen<boost::dequeS>::type emplacer;
+
+ emplacer[added_container]
+ ("able")("fox")("iota")("hotel")("jupiter")("dog");
+ test_insert_range_function_gen<boost::vecS>(added_container);
+ test_insert_range_function_gen<boost::dequeS>(added_container);
+ test_insert_range_function_gen<boost::listS>(added_container);
+ // ...
+ //<-
+ test_insert_range_function_gen<boost::ptr_vecS>(added_container);
+ test_insert_range_function_gen<boost::ptr_dequeS>(added_container);
+ test_insert_range_function_gen<boost::ptr_listS>(added_container);
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ test_insert_range_function_gen<boost::vector_selector<boost::mpl::true_> >(
+ added_container
+ );
+ test_insert_range_function_gen<boost::stable_vecS>(added_container);
+ test_insert_range_function_gen<boost::deque_selector<boost::mpl::true_> >(
+ added_container
+ );
+ test_insert_range_function_gen<boost::list_selector<boost::mpl::true_> >(
+ added_container
+ );
+#endif // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ added_container.clear();
+ emplacer[added_container]
+ ("able")("dog")("fox")("hotel")("iota")("jupiter");
+ test_insert_range_function_gen<boost::multisetS>(added_container);
+ test_insert_range_function_gen<boost::multimapS>(added_container);
+ test_insert_range_function_gen<boost::ptr_multisetS>(added_container);
+ test_insert_range_function_gen<boost::ptr_multimapS>(added_container);
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ test_insert_range_function_gen<
+ boost::multiset_selector<boost::mpl::true_>
+ >(added_container);
+ test_insert_range_function_gen<
+ boost::multimap_selector<boost::mpl::true_>
+ >(added_container);
+#endif // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION \
+ || !defined BOOST_NO_SLIST
+ added_container.clear();
+ emplacer[added_container]
+ ("dog")("jupiter")("hotel")("iota")("fox")("able");
+ test_insert_range_function_gen<boost::slistS>(added_container);
+#endif
+ added_container.clear();
+ emplacer[added_container]("hotel")("iota")("jupiter");
+ test_insert_range_function_gen<boost::setS>(added_container);
+ test_insert_range_function_gen<boost::mapS>(added_container);
+ test_insert_range_function_gen<boost::ptr_setS>(added_container);
+ test_insert_range_function_gen<boost::ptr_mapS>(added_container);
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ test_insert_range_function_gen<boost::set_selector<boost::mpl::true_> >(
+ added_container
+ );
+ test_insert_range_function_gen<boost::map_selector<boost::mpl::true_> >(
+ added_container
+ );
+#endif // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ //->
+
+ return 0;
+}
+//]
+

Added: sandbox/container_gen/libs/container_gen/test/splice_function_gen.cpp
==============================================================================
--- (empty file)
+++ sandbox/container_gen/libs/container_gen/test/splice_function_gen.cpp 2013-03-10 15:43:01 EDT (Sun, 10 Mar 2013)
@@ -0,0 +1,109 @@
+// Copyright (C) 2013 Cromwell D. Enage
+// 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)
+
+#include <boost/config.hpp>
+
+#if defined BOOST_MSVC
+ #pragma warning (push)
+ #pragma warning (disable : 4996) // fn called w/params that may be unsafe
+#endif
+
+#include <boost/mpl/bool.hpp>
+#include <boost/range/algorithm/equal.hpp>
+#include <boost/container_gen/selectors.hpp>
+#include <boost/container_gen/container_gen.hpp>
+#include <boost/container_gen/is_associative_selector.hpp>
+#include <boost/container_gen/emplace_function_gen.hpp>
+#include <boost/container_gen/splice_function_gen.hpp>
+#include <boost/container_gen/insert_range_result_gen.hpp>
+#include "type_definitions.hpp"
+#include "result_range.hpp"
+#include <boost/test/minimal.hpp>
+
+//[test__splice_function_gen
+template <typename Selector, typename AddedContainer>
+void test_splice_function_gen(AddedContainer const& added_container)
+{
+ typedef typename boost::container_gen<Selector,test_string>::type C;
+
+ C ex_seq_1, ex_seq_2, test_seq_1, test_seq_2, input_seq;
+ typename boost::emplace_function_gen<Selector>::type emplacer;
+ typename boost::splice_function_gen<Selector>::type splicer;
+
+ emplacer[ex_seq_1]
+ ("able")("fox")("easy")("kilo")("baker")("charlie")("dog");
+ emplacer[ex_seq_2]
+ ("able")("fox")("easy")
+ ("able")("fox")("iota")("hotel")("jupiter")("dog")
+ ("baker")("charlie")("dog");
+ emplacer[test_seq_1]
+ ("able")("fox")("easy")("baker")("charlie")("dog");
+ emplacer[input_seq]
+ ("able")("fox")("iota")("kilo")("hotel")("jupiter")("dog");
+ emplacer[test_seq_2]
+ ("able")("fox")("iota")("hotel")("jupiter")("dog");
+
+ C test_seq_3(test_seq_1);
+ typename C::iterator itr = splicer(
+ test_seq_1
+ , ++++++test_seq_1.begin()
+ , input_seq
+ , ++++++input_seq.begin()
+ );
+
+ BOOST_CHECK(*itr == test_string("kilo"));
+ BOOST_CHECK(boost::range::equal(test_seq_1, ex_seq_1));
+ BOOST_CHECK(boost::range::equal(test_seq_2, input_seq));
+
+ typename boost::insert_range_result_gen<Selector,test_string>::type
+ insert_range_result = splicer(
+ test_seq_3
+ , ++++++test_seq_3.begin()
+ , input_seq
+ , input_seq.begin()
+ , input_seq.end()
+ );
+
+ BOOST_CHECK(
+ test_result_range(
+ insert_range_result
+ , added_container
+ , boost::is_associative_selector<Selector>()
+ )
+ );
+ BOOST_CHECK(input_seq.empty());
+ BOOST_CHECK(boost::range::equal(test_seq_3, ex_seq_2));
+}
+//]
+
+#if defined BOOST_MSVC
+ #pragma warning (pop)
+#endif
+
+//[test__splice_function_gen__main
+int test_main(int argc, char** argv)
+{
+ boost::container_gen<boost::dequeS,test_string>::type c;
+ boost::emplace_function_gen<boost::dequeS>::type emplacer;
+
+ emplacer[c]("able")("fox")("iota")("hotel")("jupiter")("dog");
+ test_splice_function_gen<boost::vecS>(c);
+ test_splice_function_gen<boost::dequeS>(c);
+ test_splice_function_gen<boost::listS>(c);
+ test_splice_function_gen<boost::ptr_vecS>(c);
+ test_splice_function_gen<boost::ptr_dequeS>(c);
+ test_splice_function_gen<boost::ptr_listS>(c);
+ test_splice_function_gen<boost::vector_selector<boost::mpl::true_> >(c);
+ test_splice_function_gen<boost::stable_vecS>(c);
+ test_splice_function_gen<boost::deque_selector<boost::mpl::true_> >(c);
+ test_splice_function_gen<boost::list_selector<boost::mpl::true_> >(c);
+ c.clear();
+ emplacer[c]("dog")("jupiter")("hotel")("iota")("fox")("able");
+ test_splice_function_gen<boost::slistS>(c);
+
+ return 0;
+}
+//]
+


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk