Browse Source

Add two missing boost headers as seen on Solaris10 build
system (which doesn't have boost installed).


git-svn-id: svn://bind10.isc.org/svn/bind10/trunk@786 e5f2f494-b856-4b98-b285-d166d9295462

Jeremy C. Reed 15 years ago
parent
commit
eb27d3af6c
3 changed files with 440 additions and 0 deletions
  1. 400 0
      ext/boost/assign/list_inserter.hpp
  2. 37 0
      ext/boost/assign/std/vector.hpp
  3. 3 0
      tools/import_boost.sh

+ 400 - 0
ext/boost/assign/list_inserter.hpp

@@ -0,0 +1,400 @@
+// Boost.Assign library
+//
+//  Copyright Thorsten Ottosen 2003-2004. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/assign/
+//
+
+#ifndef BOOST_ASSIGN_LIST_INSERTER_HPP
+#define BOOST_ASSIGN_LIST_INSERTER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/detail/workaround.hpp>
+
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/config.hpp>
+#include <cstddef>
+
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/iteration/local.hpp>
+#include <boost/preprocessor/arithmetic/inc.hpp>
+
+namespace boost
+{
+namespace assign_detail
+{
+    template< class T >
+    struct repeater
+    {
+        std::size_t  sz;
+        T            val;
+
+        repeater( std::size_t sz, T r ) : sz( sz ), val( r )
+        { }
+    };
+    
+    template< class Fun >
+    struct fun_repeater
+    {
+        std::size_t  sz;
+        Fun          val;
+        
+        fun_repeater( std::size_t sz, Fun r ) : sz( sz ), val( r )
+        { }
+    };
+    
+    template< class C >
+    class call_push_back
+    {
+        C& c_;
+    public:
+        call_push_back( C& c ) : c_( c )
+        { }
+        
+        template< class T >
+        void operator()( T r ) 
+        {
+            c_.push_back( r );
+        }
+    };
+    
+    template< class C >
+    class call_push_front
+    {
+        C& c_;
+    public:
+        call_push_front( C& c ) : c_( c )
+        { }
+        
+        template< class T >
+        void operator()( T r ) 
+        {
+            c_.push_front( r );
+        }
+    };
+    
+    template< class C >
+    class call_push
+    {
+        C& c_;
+    public:
+        call_push( C& c ) : c_( c )
+        { }
+    
+        template< class T >
+        void operator()( T r ) 
+        {
+            c_.push( r );
+        }
+    };
+    
+    template< class C >
+    class call_insert
+    {
+        C& c_;
+    public:
+        call_insert( C& c ) : c_( c )
+        { }
+    
+        template< class T >
+        void operator()( T r ) 
+        {
+            c_.insert( r );
+        }
+    };
+
+    template< class C >
+    class call_add_edge
+    {
+        C& c_;
+    public:
+        call_add_edge( C& c ) : c_(c)
+        { }
+
+        template< class T >
+        void operator()( T l, T r )
+        {
+            add_edge( l, r, c_ );
+        }
+
+        template< class T, class EP >
+        void operator()( T l, T r, const EP& ep )
+        {
+            add_edge( l, r, ep, c_ );
+        }
+
+    };
+    
+    struct forward_n_arguments {};
+    
+} // namespace 'assign_detail'
+
+namespace assign
+{
+
+    template< class T >
+    inline assign_detail::repeater<T>
+    repeat( std::size_t sz, T r )
+    {
+        return assign_detail::repeater<T>( sz, r );
+    }
+    
+    template< class Function >
+    inline assign_detail::fun_repeater<Function>
+    repeat_fun( std::size_t sz, Function r )
+    {
+        return assign_detail::fun_repeater<Function>( sz, r );
+    }
+    
+
+    template< class Function, class Argument = assign_detail::forward_n_arguments > 
+    class list_inserter
+    {
+        struct single_arg_type {};
+        struct n_arg_type      {};
+
+        typedef BOOST_DEDUCED_TYPENAME mpl::if_c< is_same<Argument,assign_detail::forward_n_arguments>::value,
+                                                  n_arg_type,
+                                                  single_arg_type >::type arg_type;  
+            
+    public:
+        
+        list_inserter( Function fun ) : insert_( fun )
+        {}
+        
+        template< class Function2, class Arg >
+        list_inserter( const list_inserter<Function2,Arg>& r ) 
+        : insert_( r.fun_private() ) 
+        {}
+
+        list_inserter( const list_inserter& r ) : insert_( r.insert_ )
+        {}
+
+        list_inserter& operator()()
+        {
+            insert_( Argument() );
+            return *this;
+        }
+        
+        template< class T >
+        list_inserter& operator=( const T& r )
+        {
+            insert_( r );
+            return *this;
+        }
+        
+        template< class T >
+        list_inserter& operator=( assign_detail::repeater<T> r )
+        {
+            return operator,( r );
+        }
+        
+        template< class Nullary_function >
+        list_inserter& operator=( const assign_detail::fun_repeater<Nullary_function>& r )
+        {
+            return operator,( r );
+        }
+        
+        template< class T >
+        list_inserter& operator,( const T& r )
+        {
+            insert_( r  );
+            return *this;
+        }
+
+#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3205))
+        template< class T >
+        list_inserter& operator,( const assign_detail::repeater<T> & r )
+        {
+            return repeat( r.sz, r.val ); 
+        }
+#else
+        template< class T >
+        list_inserter& operator,( assign_detail::repeater<T> r )
+        {
+            return repeat( r.sz, r.val ); 
+        }
+#endif
+        
+        template< class Nullary_function >
+        list_inserter& operator,( const assign_detail::fun_repeater<Nullary_function>& r )
+        {
+            return repeat_fun( r.sz, r.val ); 
+        }
+
+        template< class T >
+        list_inserter& repeat( std::size_t sz, T r )
+        {
+            std::size_t i = 0;
+            while( i++ != sz )
+                insert_( r );
+            return *this;
+        }
+        
+        template< class Nullary_function >
+        list_inserter& repeat_fun( std::size_t sz, Nullary_function fun )
+        {
+            std::size_t i = 0;
+            while( i++ != sz )
+                insert_( fun() );
+            return *this;
+        }
+
+        template< class SinglePassIterator >
+        list_inserter& range( SinglePassIterator first, 
+                              SinglePassIterator last )
+        {
+            for( ; first != last; ++first )
+                insert_( *first );
+            return *this;
+        }
+        
+        template< class SinglePassRange >
+        list_inserter& range( const SinglePassRange& r )
+        {
+            return range( boost::begin(r), boost::end(r) );
+        }
+        
+        template< class T >
+        list_inserter& operator()( const T& t )
+        {
+            insert_( t );
+            return *this;
+        }
+
+#ifndef BOOST_ASSIGN_MAX_PARAMS // use user's value
+#define BOOST_ASSIGN_MAX_PARAMS 5        
+#endif
+#define BOOST_ASSIGN_MAX_PARAMETERS (BOOST_ASSIGN_MAX_PARAMS - 1)
+#define BOOST_ASSIGN_PARAMS1(n) BOOST_PP_ENUM_PARAMS(n, class T)
+#define BOOST_ASSIGN_PARAMS2(n) BOOST_PP_ENUM_BINARY_PARAMS(n, T, const& t)
+#define BOOST_ASSIGN_PARAMS3(n) BOOST_PP_ENUM_PARAMS(n, t)
+        
+#define BOOST_PP_LOCAL_LIMITS (1, BOOST_ASSIGN_MAX_PARAMETERS)
+#define BOOST_PP_LOCAL_MACRO(n) \
+    template< class T, BOOST_ASSIGN_PARAMS1(n) > \
+    list_inserter& operator()(T t, BOOST_ASSIGN_PARAMS2(n) ) \
+        { \
+            BOOST_PP_CAT(insert, BOOST_PP_INC(n))(t, BOOST_ASSIGN_PARAMS3(n), arg_type()); \
+            return *this; \
+        } \
+        /**/
+
+#include BOOST_PP_LOCAL_ITERATE()
+        
+
+#define BOOST_PP_LOCAL_LIMITS (1, BOOST_ASSIGN_MAX_PARAMETERS)
+#define BOOST_PP_LOCAL_MACRO(n) \
+    template< class T, BOOST_ASSIGN_PARAMS1(n) > \
+    void BOOST_PP_CAT(insert, BOOST_PP_INC(n))(T const& t, BOOST_ASSIGN_PARAMS2(n), single_arg_type) \
+    { \
+        insert_( Argument(t, BOOST_ASSIGN_PARAMS3(n) )); \
+    } \
+    /**/
+        
+#include BOOST_PP_LOCAL_ITERATE()
+
+#define BOOST_PP_LOCAL_LIMITS (1, BOOST_ASSIGN_MAX_PARAMETERS)
+#define BOOST_PP_LOCAL_MACRO(n) \
+    template< class T, BOOST_ASSIGN_PARAMS1(n) > \
+    void BOOST_PP_CAT(insert, BOOST_PP_INC(n))(T const& t, BOOST_ASSIGN_PARAMS2(n), n_arg_type) \
+    { \
+        insert_(t, BOOST_ASSIGN_PARAMS3(n) ); \
+    } \
+    /**/
+        
+#include BOOST_PP_LOCAL_ITERATE()
+
+        
+        Function fun_private() const
+        {
+            return insert_;
+        }
+
+    private:
+        
+        list_inserter& operator=( const list_inserter& );
+        Function insert_;
+    };
+    
+    template< class Function >
+    inline list_inserter< Function >
+    make_list_inserter( Function fun )
+    {
+        return list_inserter< Function >( fun );
+    }
+    
+    template< class Function, class Argument >
+    inline list_inserter<Function,Argument>
+    make_list_inserter( Function fun, Argument* )
+    {
+        return list_inserter<Function,Argument>( fun );
+    }
+
+    template< class C >
+    inline list_inserter< assign_detail::call_push_back<C>, 
+                          BOOST_DEDUCED_TYPENAME C::value_type >
+    push_back( C& c )
+    {
+        static BOOST_DEDUCED_TYPENAME C::value_type* p = 0;
+        return make_list_inserter( assign_detail::call_push_back<C>( c ), 
+                                   p );
+    }
+    
+    template< class C >
+    inline list_inserter< assign_detail::call_push_front<C>,
+                          BOOST_DEDUCED_TYPENAME C::value_type >
+    push_front( C& c )
+    {
+        static BOOST_DEDUCED_TYPENAME C::value_type* p = 0;
+        return make_list_inserter( assign_detail::call_push_front<C>( c ),
+                                   p );
+    }
+
+    template< class C >
+    inline list_inserter< assign_detail::call_insert<C>, 
+                          BOOST_DEDUCED_TYPENAME C::value_type >
+    insert( C& c )
+    {
+        static BOOST_DEDUCED_TYPENAME C::value_type* p = 0;
+        return make_list_inserter( assign_detail::call_insert<C>( c ),
+                                   p );
+    }
+
+    template< class C >
+    inline list_inserter< assign_detail::call_push<C>, 
+                          BOOST_DEDUCED_TYPENAME C::value_type >
+    push( C& c )
+    {
+        static BOOST_DEDUCED_TYPENAME C::value_type* p = 0;
+        return make_list_inserter( assign_detail::call_push<C>( c ),
+                                   p );
+    }
+
+    template< class C >
+    inline list_inserter< assign_detail::call_add_edge<C> >
+    add_edge( C& c )   
+    {
+        return make_list_inserter( assign_detail::call_add_edge<C>( c ) );
+    }
+    
+} // namespace 'assign'
+} // namespace 'boost'
+
+#undef BOOST_ASSIGN_PARAMS1
+#undef BOOST_ASSIGN_PARAMS2
+#undef BOOST_ASSIGN_PARAMS3
+#undef BOOST_ASSIGN_MAX_PARAMETERS
+
+#endif

+ 37 - 0
ext/boost/assign/std/vector.hpp

@@ -0,0 +1,37 @@
+// Boost.Assign library
+//
+//  Copyright Thorsten Ottosen 2003-2004. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/assign/
+//
+
+#ifndef BOOST_ASSIGN_STD_VECTOR_HPP
+#define BOOST_ASSIGN_STD_VECTOR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/assign/list_inserter.hpp>
+#include <boost/config.hpp>
+#include <vector>
+
+namespace boost
+{
+namespace assign
+{
+
+    template< class V, class A, class V2 >
+    inline list_inserter< assign_detail::call_push_back< std::vector<V,A> >, V > 
+    operator+=( std::vector<V,A>& c, V2 v )
+    {
+        return push_back( c )( v );
+    }
+    
+}
+}
+
+#endif

+ 3 - 0
tools/import_boost.sh

@@ -13,11 +13,14 @@
 # svn commit
 
 # need new boost stuff?
+# TODO: LICENSE_1_0.txt
 # add files to list 'ere
 FILES="
 boost/*.hpp
 boost/algorithm
 boost/asio
+boost/assign/list_inserter.hpp
+boost/assign/std/vector.hpp
 boost/bind
 boost/config
 boost/concept