annotate DEPENDENCIES/generic/include/boost/assign/ptr_list_inserter.hpp @ 125:34e428693f5d vext

Vext -> Repoint
author Chris Cannam
date Thu, 14 Jun 2018 11:15:39 +0100
parents c530137014c0
children
rev   line source
Chris@16 1 // Boost.Assign library
Chris@16 2 //
Chris@16 3 // Copyright Thorsten Ottosen 2003-2005. Use, modification and
Chris@16 4 // distribution is subject to the Boost Software License, Version
Chris@16 5 // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
Chris@16 6 // http://www.boost.org/LICENSE_1_0.txt)
Chris@16 7 //
Chris@16 8 // For more information, see http://www.boost.org/libs/assign/
Chris@16 9 //
Chris@16 10
Chris@16 11 #ifndef BOOST_ASSIGN_PTR_LIST_INSERTER_HPP
Chris@16 12 #define BOOST_ASSIGN_PTR_LIST_INSERTER_HPP
Chris@16 13
Chris@101 14 #if defined(_MSC_VER)
Chris@16 15 # pragma once
Chris@16 16 #endif
Chris@16 17
Chris@16 18 #include <boost/assign/list_inserter.hpp>
Chris@16 19 #include <boost/type_traits/remove_reference.hpp>
Chris@16 20 #include <boost/type_traits/remove_pointer.hpp>
Chris@16 21
Chris@16 22 namespace boost
Chris@16 23 {
Chris@16 24
Chris@16 25 namespace assign
Chris@16 26 {
Chris@16 27 template< class Function, class Obj >
Chris@16 28 class ptr_list_inserter
Chris@16 29 {
Chris@16 30 typedef BOOST_DEDUCED_TYPENAME
Chris@16 31 remove_pointer< BOOST_DEDUCED_TYPENAME
Chris@16 32 remove_reference<Obj>::type >::type
Chris@16 33 obj_type;
Chris@16 34 public:
Chris@16 35
Chris@16 36 ptr_list_inserter( Function fun ) : insert_( fun )
Chris@16 37 {}
Chris@16 38
Chris@16 39 template< class Function2, class Obj2 >
Chris@16 40 ptr_list_inserter( const ptr_list_inserter<Function2,Obj2>& r )
Chris@16 41 : insert_( r.fun_private() )
Chris@16 42 {}
Chris@16 43
Chris@16 44 ptr_list_inserter( const ptr_list_inserter& r ) : insert_( r.insert_ )
Chris@16 45 {}
Chris@16 46
Chris@16 47 ptr_list_inserter& operator()()
Chris@16 48 {
Chris@16 49 insert_( new obj_type() );
Chris@16 50 return *this;
Chris@16 51 }
Chris@16 52
Chris@16 53 template< class T >
Chris@16 54 ptr_list_inserter& operator()( const T& t )
Chris@16 55 {
Chris@16 56 insert_( new obj_type(t) );
Chris@16 57 return *this;
Chris@16 58 }
Chris@16 59
Chris@16 60 #ifndef BOOST_ASSIGN_MAX_PARAMS // use user's value
Chris@16 61 #define BOOST_ASSIGN_MAX_PARAMS 5
Chris@16 62 #endif
Chris@16 63 #define BOOST_ASSIGN_MAX_PARAMETERS (BOOST_ASSIGN_MAX_PARAMS - 1)
Chris@16 64 #define BOOST_ASSIGN_PARAMS1(n) BOOST_PP_ENUM_PARAMS(n, class T)
Chris@16 65 #define BOOST_ASSIGN_PARAMS2(n) BOOST_PP_ENUM_BINARY_PARAMS(n, T, const& t)
Chris@16 66 #define BOOST_ASSIGN_PARAMS3(n) BOOST_PP_ENUM_PARAMS(n, t)
Chris@16 67
Chris@16 68 #define BOOST_PP_LOCAL_LIMITS (1, BOOST_ASSIGN_MAX_PARAMETERS)
Chris@16 69 #define BOOST_PP_LOCAL_MACRO(n) \
Chris@16 70 template< class T, BOOST_ASSIGN_PARAMS1(n) > \
Chris@16 71 ptr_list_inserter& operator()( const T& t, BOOST_ASSIGN_PARAMS2(n) ) \
Chris@16 72 { \
Chris@16 73 insert_( new obj_type(t, BOOST_ASSIGN_PARAMS3(n) )); \
Chris@16 74 return *this; \
Chris@16 75 } \
Chris@16 76 /**/
Chris@16 77
Chris@16 78 #include BOOST_PP_LOCAL_ITERATE()
Chris@16 79
Chris@16 80 private:
Chris@16 81
Chris@16 82 ptr_list_inserter& operator=( const ptr_list_inserter& );
Chris@16 83 Function insert_;
Chris@16 84 };
Chris@16 85
Chris@16 86 template< class Obj, class Function >
Chris@16 87 inline ptr_list_inserter< Function, Obj >
Chris@16 88 make_ptr_list_inserter( Function fun )
Chris@16 89 {
Chris@16 90 return ptr_list_inserter< Function, Obj >( fun );
Chris@16 91 }
Chris@16 92
Chris@16 93 template< class C >
Chris@16 94 inline ptr_list_inserter< assign_detail::call_push_back<C>,
Chris@16 95 BOOST_DEDUCED_TYPENAME C::reference >
Chris@16 96 ptr_push_back( C& c )
Chris@16 97 {
Chris@16 98 return make_ptr_list_inserter<BOOST_DEDUCED_TYPENAME C::reference>
Chris@16 99 ( assign_detail::call_push_back<C>( c ) );
Chris@16 100 }
Chris@16 101
Chris@16 102 #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
Chris@16 103
Chris@16 104 template< class T, class C >
Chris@16 105 inline ptr_list_inserter< assign_detail::call_push_back<C>, T >
Chris@16 106 ptr_push_back( C& c )
Chris@16 107 {
Chris@16 108 return make_ptr_list_inserter<T>(
Chris@16 109 assign_detail::call_push_back<C>( c ) );
Chris@16 110 }
Chris@16 111
Chris@16 112 #endif
Chris@16 113
Chris@16 114 template< class C >
Chris@16 115 inline ptr_list_inserter< assign_detail::call_push_front<C>,
Chris@16 116 BOOST_DEDUCED_TYPENAME C::reference >
Chris@16 117 ptr_push_front( C& c )
Chris@16 118 {
Chris@16 119 return make_ptr_list_inserter<BOOST_DEDUCED_TYPENAME C::reference>
Chris@16 120 ( assign_detail::call_push_front<C>( c ) );
Chris@16 121 }
Chris@16 122
Chris@16 123 #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
Chris@16 124
Chris@16 125 template< class T, class C >
Chris@16 126 inline ptr_list_inserter< assign_detail::call_push_front<C>, T >
Chris@16 127 ptr_push_front( C& c )
Chris@16 128 {
Chris@16 129 return make_ptr_list_inserter<T>(
Chris@16 130 assign_detail::call_push_front<C>( c ) );
Chris@16 131 }
Chris@16 132
Chris@16 133 #endif
Chris@16 134
Chris@16 135 template< class C >
Chris@16 136 inline ptr_list_inserter< assign_detail::call_insert<C>,
Chris@16 137 BOOST_DEDUCED_TYPENAME C::reference>
Chris@16 138 ptr_insert( C& c )
Chris@16 139 {
Chris@16 140 return make_ptr_list_inserter<BOOST_DEDUCED_TYPENAME C::reference>
Chris@16 141 ( assign_detail::call_insert<C>( c ) );
Chris@16 142 }
Chris@16 143
Chris@16 144 #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
Chris@16 145
Chris@16 146 template< class T, class C >
Chris@16 147 inline ptr_list_inserter< assign_detail::call_insert<C>, T >
Chris@16 148 ptr_insert( C& c )
Chris@16 149 {
Chris@16 150 return make_ptr_list_inserter<T>( assign_detail::call_insert<C>( c ) );
Chris@16 151 }
Chris@16 152
Chris@16 153 #endif
Chris@16 154
Chris@16 155
Chris@16 156 } // namespace 'assign'
Chris@16 157 } // namespace 'boost'
Chris@16 158
Chris@16 159 #undef BOOST_ASSIGN_PARAMS1
Chris@16 160 #undef BOOST_ASSIGN_PARAMS2
Chris@16 161 #undef BOOST_ASSIGN_PARAMS3
Chris@16 162 #undef BOOST_ASSIGN_MAX_PARAMETERS
Chris@16 163
Chris@16 164 #endif