X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=boost%2Fboost%2Fbind.hpp;h=fd3421ea5ab41109a0650f919a04946bd8f99168;hb=c48091f33a773732fa6c789927e5833e44108d9d;hp=5480d1f2f8f9aa613c9b97afffa5474ea0619482;hpb=69862d12f457dd5dbf509c4d46a0399d4b16cfc7;p=lyx.git diff --git a/boost/boost/bind.hpp b/boost/boost/bind.hpp index 5480d1f2f8..fd3421ea5a 100644 --- a/boost/boost/bind.hpp +++ b/boost/boost/bind.hpp @@ -1,1428 +1,24 @@ #ifndef BOOST_BIND_HPP_INCLUDED #define BOOST_BIND_HPP_INCLUDED -#if _MSC_VER >= 1020 -#pragma once +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once #endif // // bind.hpp - binds function objects to arguments // -// Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd. -// Copyright (c) 2001 David Abrahams +// Copyright (c) 2009 Peter Dimov // -// Permission to copy, use, modify, sell and distribute this software -// is granted provided this copyright notice appears in all copies. -// This software is provided "as is" without express or implied -// warranty, and with no claim as to its suitability for any purpose. +// 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 // // See http://www.boost.org/libs/bind/bind.html for documentation. // -#include -#include -#include -#include - -// Borland-specific bug, visit_each() silently fails to produce code - -#if defined(__BORLANDC__) -# define BOOST_BIND_VISIT_EACH boost::visit_each -#else -# define BOOST_BIND_VISIT_EACH visit_each -#endif - -#ifdef BOOST_MSVC -# pragma warning(push) -# pragma warning(disable: 4512) // assignment operator could not be generated -#endif - -namespace boost -{ - -namespace _bi // implementation details -{ - -// result_traits - -template struct result_traits -{ - typedef R type; -}; - -#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) - -struct unspecified {}; - -template struct result_traits -{ - typedef typename F::result_type type; -}; - -template struct result_traits< unspecified, reference_wrapper > -{ - typedef typename F::result_type type; -}; - -#endif - -// bind_t forward declaration for listN - -template class bind_t; - -// value - -template class value -{ -public: - - value(T const & t): t_(t) {} - - T & get() { return t_; } - T const & get() const { return t_; } - -private: - - T t_; -}; - -// type - -template class type {}; - -// unwrap - -template inline F & unwrap(F & f, long) -{ - return f; -} - -template inline F & unwrap(reference_wrapper & f, int) -{ - return f; -} - -template inline F & unwrap(reference_wrapper const & f, int) -{ - return f; -} - -// listN - -#ifdef BOOST_NO_VOID_RETURNS - -template struct evaluator0; -template struct evaluator1; -template struct evaluator2; -template struct evaluator3; -template struct evaluator4; -template struct evaluator5; -template struct evaluator6; -template struct evaluator7; -template struct evaluator8; -template struct evaluator9; - -#endif - -class list0 -{ -public: - - list0() {} - - template T & operator[] (value & v) const { return v.get(); } - - template T const & operator[] (value const & v) const { return v.get(); } - - template T & operator[] (reference_wrapper const & v) const { return v.get(); } - - template typename result_traits::type operator[] (bind_t & b) const { return b.eval(*this); } - - template typename result_traits::type operator[] (bind_t const & b) const { return b.eval(*this); } - - template R operator()(type, F f, A &) const - { - return unwrap(f, 0)(); - } - - template void accept(V &) const - { - } - -#ifdef BOOST_NO_VOID_RETURNS - - template struct evaluator - { - typedef evaluator0 type; - }; - -#endif - -}; - -template class list1 -{ -public: - - explicit list1(A1 a1): a1_(a1) {} - - A1 operator[] (arg<1>) const { return a1_; } - - A1 operator[] (arg<1> (*) ()) const { return a1_; } - - template T & operator[] (value & v) const { return v.get(); } - - template T const & operator[] (value const & v) const { return v.get(); } - - template T & operator[] (reference_wrapper const & v) const { return v.get(); } - - template typename result_traits::type operator[] (bind_t & b) const { return b.eval(*this); } - - template typename result_traits::type operator[] (bind_t const & b) const { return b.eval(*this); } - - template R operator()(type, F f, A & a) const - { - return unwrap(f, 0)(a[a1_]); - } - - template void accept(V & v) const - { - BOOST_BIND_VISIT_EACH(v, a1_, 0); - } - -#ifdef BOOST_NO_VOID_RETURNS - - template struct evaluator - { - typedef evaluator1 type; - }; - -#else - -private: - -#endif - - A1 a1_; -}; - -template class list2 -{ -public: - - list2(A1 a1, A2 a2): a1_(a1), a2_(a2) {} - - A1 operator[] (arg<1>) const { return a1_; } - A2 operator[] (arg<2>) const { return a2_; } - - A1 operator[] (arg<1> (*) ()) const { return a1_; } - A2 operator[] (arg<2> (*) ()) const { return a2_; } - - template T & operator[] (value & v) const { return v.get(); } - - template T const & operator[] (value const & v) const { return v.get(); } - - template T & operator[] (reference_wrapper const & v) const { return v.get(); } - - template typename result_traits::type operator[] (bind_t & b) const { return b.eval(*this); } - - template typename result_traits::type operator[] (bind_t const & b) const { return b.eval(*this); } - - template R operator()(type, F f, A & a) const - { - return unwrap(f, 0)(a[a1_], a[a2_]); - } - - template void accept(V & v) const - { - BOOST_BIND_VISIT_EACH(v, a1_, 0); - BOOST_BIND_VISIT_EACH(v, a2_, 0); - } - -#ifdef BOOST_NO_VOID_RETURNS - - template struct evaluator - { - typedef evaluator2 type; - }; - -#else - -private: - -#endif - - A1 a1_; - A2 a2_; -}; - -template class list3 -{ -public: - - list3(A1 a1, A2 a2, A3 a3): a1_(a1), a2_(a2), a3_(a3) {} - - A1 operator[] (arg<1>) const { return a1_; } - A2 operator[] (arg<2>) const { return a2_; } - A3 operator[] (arg<3>) const { return a3_; } - - A1 operator[] (arg<1> (*) ()) const { return a1_; } - A2 operator[] (arg<2> (*) ()) const { return a2_; } - A3 operator[] (arg<3> (*) ()) const { return a3_; } - - template T & operator[] (value & v) const { return v.get(); } - - template T const & operator[] (value const & v) const { return v.get(); } - - template T & operator[] (reference_wrapper const & v) const { return v.get(); } - - template typename result_traits::type operator[] (bind_t & b) const { return b.eval(*this); } - - template typename result_traits::type operator[] (bind_t const & b) const { return b.eval(*this); } - - template R operator()(type, F f, A & a) const - { - return unwrap(f, 0)(a[a1_], a[a2_], a[a3_]); - } - - template void accept(V & v) const - { - BOOST_BIND_VISIT_EACH(v, a1_, 0); - BOOST_BIND_VISIT_EACH(v, a2_, 0); - BOOST_BIND_VISIT_EACH(v, a3_, 0); - } - -#ifdef BOOST_NO_VOID_RETURNS - - template struct evaluator - { - typedef evaluator3 type; - }; - -#else - -private: - -#endif - - A1 a1_; - A2 a2_; - A3 a3_; -}; - -template class list4 -{ -public: - - list4(A1 a1, A2 a2, A3 a3, A4 a4): a1_(a1), a2_(a2), a3_(a3), a4_(a4) {} - - A1 operator[] (arg<1>) const { return a1_; } - A2 operator[] (arg<2>) const { return a2_; } - A3 operator[] (arg<3>) const { return a3_; } - A4 operator[] (arg<4>) const { return a4_; } - - A1 operator[] (arg<1> (*) ()) const { return a1_; } - A2 operator[] (arg<2> (*) ()) const { return a2_; } - A3 operator[] (arg<3> (*) ()) const { return a3_; } - A4 operator[] (arg<4> (*) ()) const { return a4_; } - - template T & operator[] (value & v) const { return v.get(); } - - template T const & operator[] (value const & v) const { return v.get(); } - - template T & operator[] (reference_wrapper const & v) const { return v.get(); } - - template typename result_traits::type operator[] (bind_t & b) const { return b.eval(*this); } - - template typename result_traits::type operator[] (bind_t const & b) const { return b.eval(*this); } - - template R operator()(type, F f, A & a) const - { - return unwrap(f, 0)(a[a1_], a[a2_], a[a3_], a[a4_]); - } - - template void accept(V & v) const - { - BOOST_BIND_VISIT_EACH(v, a1_, 0); - BOOST_BIND_VISIT_EACH(v, a2_, 0); - BOOST_BIND_VISIT_EACH(v, a3_, 0); - BOOST_BIND_VISIT_EACH(v, a4_, 0); - } - -#ifdef BOOST_NO_VOID_RETURNS - - template struct evaluator - { - typedef evaluator4 type; - }; - -#else - -private: - -#endif - - A1 a1_; - A2 a2_; - A3 a3_; - A4 a4_; -}; - -template class list5 -{ -public: - - list5(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5): a1_(a1), a2_(a2), a3_(a3), a4_(a4), a5_(a5) {} - - A1 operator[] (arg<1>) const { return a1_; } - A2 operator[] (arg<2>) const { return a2_; } - A3 operator[] (arg<3>) const { return a3_; } - A4 operator[] (arg<4>) const { return a4_; } - A5 operator[] (arg<5>) const { return a5_; } - - A1 operator[] (arg<1> (*) ()) const { return a1_; } - A2 operator[] (arg<2> (*) ()) const { return a2_; } - A3 operator[] (arg<3> (*) ()) const { return a3_; } - A4 operator[] (arg<4> (*) ()) const { return a4_; } - A5 operator[] (arg<5> (*) ()) const { return a5_; } - - template T & operator[] (value & v) const { return v.get(); } - - template T const & operator[] (value const & v) const { return v.get(); } - - template T & operator[] (reference_wrapper const & v) const { return v.get(); } - - template typename result_traits::type operator[] (bind_t & b) const { return b.eval(*this); } - - template typename result_traits::type operator[] (bind_t const & b) const { return b.eval(*this); } - - template R operator()(type, F f, A & a) const - { - return unwrap(f, 0)(a[a1_], a[a2_], a[a3_], a[a4_], a[a5_]); - } - - template void accept(V & v) const - { - BOOST_BIND_VISIT_EACH(v, a1_, 0); - BOOST_BIND_VISIT_EACH(v, a2_, 0); - BOOST_BIND_VISIT_EACH(v, a3_, 0); - BOOST_BIND_VISIT_EACH(v, a4_, 0); - BOOST_BIND_VISIT_EACH(v, a5_, 0); - } - -#ifdef BOOST_NO_VOID_RETURNS - - template struct evaluator - { - typedef evaluator5 type; - }; - -#else - -private: - -#endif - - A1 a1_; - A2 a2_; - A3 a3_; - A4 a4_; - A5 a5_; -}; - -template class list6 -{ -public: - - list6(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6): a1_(a1), a2_(a2), a3_(a3), a4_(a4), a5_(a5), a6_(a6) {} - - A1 operator[] (arg<1>) const { return a1_; } - A2 operator[] (arg<2>) const { return a2_; } - A3 operator[] (arg<3>) const { return a3_; } - A4 operator[] (arg<4>) const { return a4_; } - A5 operator[] (arg<5>) const { return a5_; } - A6 operator[] (arg<6>) const { return a6_; } - - A1 operator[] (arg<1> (*) ()) const { return a1_; } - A2 operator[] (arg<2> (*) ()) const { return a2_; } - A3 operator[] (arg<3> (*) ()) const { return a3_; } - A4 operator[] (arg<4> (*) ()) const { return a4_; } - A5 operator[] (arg<5> (*) ()) const { return a5_; } - A6 operator[] (arg<6> (*) ()) const { return a6_; } - - template T & operator[] (value & v) const { return v.get(); } - - template T const & operator[] (value const & v) const { return v.get(); } - - template T & operator[] (reference_wrapper const & v) const { return v.get(); } - - template typename result_traits::type operator[] (bind_t & b) const { return b.eval(*this); } - - template typename result_traits::type operator[] (bind_t const & b) const { return b.eval(*this); } - - template R operator()(type, F f, A & a) const - { - return unwrap(f, 0)(a[a1_], a[a2_], a[a3_], a[a4_], a[a5_], a[a6_]); - } - - template void accept(V & v) const - { - BOOST_BIND_VISIT_EACH(v, a1_, 0); - BOOST_BIND_VISIT_EACH(v, a2_, 0); - BOOST_BIND_VISIT_EACH(v, a3_, 0); - BOOST_BIND_VISIT_EACH(v, a4_, 0); - BOOST_BIND_VISIT_EACH(v, a5_, 0); - BOOST_BIND_VISIT_EACH(v, a6_, 0); - } - -#ifdef BOOST_NO_VOID_RETURNS - - template struct evaluator - { - typedef evaluator6 type; - }; - -#else - -private: - -#endif - - A1 a1_; - A2 a2_; - A3 a3_; - A4 a4_; - A5 a5_; - A6 a6_; -}; - -template class list7 -{ -public: - - list7(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7): a1_(a1), a2_(a2), a3_(a3), a4_(a4), a5_(a5), a6_(a6), a7_(a7) {} - - A1 operator[] (arg<1>) const { return a1_; } - A2 operator[] (arg<2>) const { return a2_; } - A3 operator[] (arg<3>) const { return a3_; } - A4 operator[] (arg<4>) const { return a4_; } - A5 operator[] (arg<5>) const { return a5_; } - A6 operator[] (arg<6>) const { return a6_; } - A7 operator[] (arg<7>) const { return a7_; } - - A1 operator[] (arg<1> (*) ()) const { return a1_; } - A2 operator[] (arg<2> (*) ()) const { return a2_; } - A3 operator[] (arg<3> (*) ()) const { return a3_; } - A4 operator[] (arg<4> (*) ()) const { return a4_; } - A5 operator[] (arg<5> (*) ()) const { return a5_; } - A6 operator[] (arg<6> (*) ()) const { return a6_; } - A7 operator[] (arg<7> (*) ()) const { return a7_; } - - template T & operator[] (value & v) const { return v.get(); } - - template T const & operator[] (value const & v) const { return v.get(); } - - template T & operator[] (reference_wrapper const & v) const { return v.get(); } - - template typename result_traits::type operator[] (bind_t & b) const { return b.eval(*this); } - - template typename result_traits::type operator[] (bind_t const & b) const { return b.eval(*this); } - - template R operator()(type, F f, A & a) const - { - return unwrap(f, 0)(a[a1_], a[a2_], a[a3_], a[a4_], a[a5_], a[a6_], a[a7_]); - } - - template void accept(V & v) const - { - BOOST_BIND_VISIT_EACH(v, a1_, 0); - BOOST_BIND_VISIT_EACH(v, a2_, 0); - BOOST_BIND_VISIT_EACH(v, a3_, 0); - BOOST_BIND_VISIT_EACH(v, a4_, 0); - BOOST_BIND_VISIT_EACH(v, a5_, 0); - BOOST_BIND_VISIT_EACH(v, a6_, 0); - BOOST_BIND_VISIT_EACH(v, a7_, 0); - } - -#ifdef BOOST_NO_VOID_RETURNS - - template struct evaluator - { - typedef evaluator7 type; - }; - -#else - -private: - -#endif - - A1 a1_; - A2 a2_; - A3 a3_; - A4 a4_; - A5 a5_; - A6 a6_; - A7 a7_; -}; - -template class list8 -{ -public: - - list8(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8): a1_(a1), a2_(a2), a3_(a3), a4_(a4), a5_(a5), a6_(a6), a7_(a7), a8_(a8) {} - - A1 operator[] (arg<1>) const { return a1_; } - A2 operator[] (arg<2>) const { return a2_; } - A3 operator[] (arg<3>) const { return a3_; } - A4 operator[] (arg<4>) const { return a4_; } - A5 operator[] (arg<5>) const { return a5_; } - A6 operator[] (arg<6>) const { return a6_; } - A7 operator[] (arg<7>) const { return a7_; } - A8 operator[] (arg<8>) const { return a8_; } - - A1 operator[] (arg<1> (*) ()) const { return a1_; } - A2 operator[] (arg<2> (*) ()) const { return a2_; } - A3 operator[] (arg<3> (*) ()) const { return a3_; } - A4 operator[] (arg<4> (*) ()) const { return a4_; } - A5 operator[] (arg<5> (*) ()) const { return a5_; } - A6 operator[] (arg<6> (*) ()) const { return a6_; } - A7 operator[] (arg<7> (*) ()) const { return a7_; } - A8 operator[] (arg<8> (*) ()) const { return a8_; } - - template T & operator[] (value & v) const { return v.get(); } - - template T const & operator[] (value const & v) const { return v.get(); } - - template T & operator[] (reference_wrapper const & v) const { return v.get(); } - - template typename result_traits::type operator[] (bind_t & b) const { return b.eval(*this); } - - template typename result_traits::type operator[] (bind_t const & b) const { return b.eval(*this); } - - template R operator()(type, F f, A & a) const - { - return unwrap(f, 0)(a[a1_], a[a2_], a[a3_], a[a4_], a[a5_], a[a6_], a[a7_], a[a8_]); - } - - template void accept(V & v) const - { - BOOST_BIND_VISIT_EACH(v, a1_, 0); - BOOST_BIND_VISIT_EACH(v, a2_, 0); - BOOST_BIND_VISIT_EACH(v, a3_, 0); - BOOST_BIND_VISIT_EACH(v, a4_, 0); - BOOST_BIND_VISIT_EACH(v, a5_, 0); - BOOST_BIND_VISIT_EACH(v, a6_, 0); - BOOST_BIND_VISIT_EACH(v, a7_, 0); - BOOST_BIND_VISIT_EACH(v, a8_, 0); - } - -#ifdef BOOST_NO_VOID_RETURNS - - template struct evaluator - { - typedef evaluator8 type; - }; - -#else - -private: - -#endif - - A1 a1_; - A2 a2_; - A3 a3_; - A4 a4_; - A5 a5_; - A6 a6_; - A7 a7_; - A8 a8_; -}; - -template class list9 -{ -public: - - list9(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9): a1_(a1), a2_(a2), a3_(a3), a4_(a4), a5_(a5), a6_(a6), a7_(a7), a8_(a8), a9_(a9) {} - - A1 operator[] (arg<1>) const { return a1_; } - A2 operator[] (arg<2>) const { return a2_; } - A3 operator[] (arg<3>) const { return a3_; } - A4 operator[] (arg<4>) const { return a4_; } - A5 operator[] (arg<5>) const { return a5_; } - A6 operator[] (arg<6>) const { return a6_; } - A7 operator[] (arg<7>) const { return a7_; } - A8 operator[] (arg<8>) const { return a8_; } - A9 operator[] (arg<9>) const { return a9_; } - - A1 operator[] (arg<1> (*) ()) const { return a1_; } - A2 operator[] (arg<2> (*) ()) const { return a2_; } - A3 operator[] (arg<3> (*) ()) const { return a3_; } - A4 operator[] (arg<4> (*) ()) const { return a4_; } - A5 operator[] (arg<5> (*) ()) const { return a5_; } - A6 operator[] (arg<6> (*) ()) const { return a6_; } - A7 operator[] (arg<7> (*) ()) const { return a7_; } - A8 operator[] (arg<8> (*) ()) const { return a8_; } - A9 operator[] (arg<9> (*) ()) const { return a9_; } - - template T & operator[] (value & v) const { return v.get(); } - - template T const & operator[] (value const & v) const { return v.get(); } - - template T & operator[] (reference_wrapper const & v) const { return v.get(); } - - template typename result_traits::type operator[] (bind_t & b) const { return b.eval(*this); } - - template typename result_traits::type operator[] (bind_t const & b) const { return b.eval(*this); } - - template R operator()(type, F f, A & a) const - { - return unwrap(f, 0)(a[a1_], a[a2_], a[a3_], a[a4_], a[a5_], a[a6_], a[a7_], a[a8_], a[a9_]); - } - - template void accept(V & v) const - { - BOOST_BIND_VISIT_EACH(v, a1_, 0); - BOOST_BIND_VISIT_EACH(v, a2_, 0); - BOOST_BIND_VISIT_EACH(v, a3_, 0); - BOOST_BIND_VISIT_EACH(v, a4_, 0); - BOOST_BIND_VISIT_EACH(v, a5_, 0); - BOOST_BIND_VISIT_EACH(v, a6_, 0); - BOOST_BIND_VISIT_EACH(v, a7_, 0); - BOOST_BIND_VISIT_EACH(v, a8_, 0); - BOOST_BIND_VISIT_EACH(v, a9_, 0); - } - -#ifdef BOOST_NO_VOID_RETURNS - - template struct evaluator - { - typedef evaluator9 type; - }; - -#else - -private: - -#endif - - A1 a1_; - A2 a2_; - A3 a3_; - A4 a4_; - A5 a5_; - A6 a6_; - A7 a7_; - A8 a8_; - A9 a9_; -}; - -#ifdef BOOST_NO_VOID_RETURNS - -template struct evaluator0 -{ - template - static R eval(L const&, F f, A &) - { - return unwrap(f, 0)(); - } -}; - -template <> struct evaluator0 -{ - template - static void eval(L const&, F f, A &) - { - unwrap(f, 0)(); - } -}; - -template struct evaluator1 -{ - template - static R eval(L const& l, F f, A & a) - { - return unwrap(f, 0)(a[l.a1_]); - } -}; - -template <> struct evaluator1 -{ - template - static void eval(L const& l, F f, A & a) - { - unwrap(f, 0)(a[l.a1_]); - } -}; - -template struct evaluator2 -{ - template - static R eval(L const& l, F f, A & a) - { - return unwrap(f, 0)(a[l.a1_], a[l.a2_]); - } -}; - -template <> struct evaluator2 -{ - template - static void eval(L const& l, F f, A & a) - { - unwrap(f, 0)(a[l.a1_], a[l.a2_]); - } -}; - -template struct evaluator3 -{ - template - static R eval(L const& l, F f, A & a) - { - return unwrap(f, 0)(a[l.a1_], a[l.a2_], a[l.a3_]); - } -}; - -template <> struct evaluator3 -{ - template - static void eval(L const& l, F f, A & a) - { - unwrap(f, 0)(a[l.a1_], a[l.a2_], a[l.a3_]); - } -}; - -template struct evaluator4 -{ - template - static R eval(L const& l, F f, A & a) - { - return unwrap(f, 0)(a[l.a1_], a[l.a2_], a[l.a3_], a[l.a4_]); - } -}; - -template <> struct evaluator4 -{ - template - static void eval(L const& l, F f, A & a) - { - unwrap(f, 0)(a[l.a1_], a[l.a2_], a[l.a3_], a[l.a4_]); - } -}; - -template struct evaluator5 -{ - template - static R eval(L const& l, F f, A & a) - { - return unwrap(f, 0)(a[l.a1_], a[l.a2_], a[l.a3_], a[l.a4_], a[l.a5_]); - } -}; - -template <> struct evaluator5 -{ - template - static void eval(L const& l, F f, A & a) - { - unwrap(f, 0)(a[l.a1_], a[l.a2_], a[l.a3_], a[l.a4_], a[l.a5_]); - } -}; - -template struct evaluator6 -{ - template - static R eval(L const& l, F f, A & a) - { - return unwrap(f, 0)(a[l.a1_], a[l.a2_], a[l.a3_], a[l.a4_], a[l.a5_], a[l.a6_]); - } -}; - -template <> struct evaluator6 -{ - template - static void eval(L const& l, F f, A & a) - { - unwrap(f, 0)(a[l.a1_], a[l.a2_], a[l.a3_], a[l.a4_], a[l.a5_], a[l.a6_]); - } -}; - -template struct evaluator7 -{ - template - static R eval(L const& l, F f, A & a) - { - return unwrap(f, 0)(a[l.a1_], a[l.a2_], a[l.a3_], a[l.a4_], a[l.a5_], a[l.a6_], a[l.a7_]); - } -}; - -template <> struct evaluator7 -{ - template - static void eval(L const& l, F f, A & a) - { - unwrap(f, 0)(a[l.a1_], a[l.a2_], a[l.a3_], a[l.a4_], a[l.a5_], a[l.a6_], a[l.a7_]); - } -}; - -template struct evaluator8 -{ - template - static R eval(L const& l, F f, A & a) - { - return unwrap(f, 0)(a[l.a1_], a[l.a2_], a[l.a3_], a[l.a4_], a[l.a5_], a[l.a6_], a[l.a7_], a[l.a8_]); - } -}; - -template <> struct evaluator8 -{ - template - static void eval(L const& l, F f, A & a) - { - unwrap(f, 0)(a[l.a1_], a[l.a2_], a[l.a3_], a[l.a4_], a[l.a5_], a[l.a6_], a[l.a7_], a[l.a8_]); - } -}; - -template struct evaluator9 -{ - template - static R eval(L const& l, F f, A & a) - { - return unwrap(f, 0)(a[l.a1_], a[l.a2_], a[l.a3_], a[l.a4_], a[l.a5_], a[l.a6_], a[l.a7_], a[l.a8_], a[l.a9_]); - } -}; - -template <> struct evaluator9 -{ - template - static void eval(L const& l, F f, A & a) - { - unwrap(f, 0)(a[l.a1_], a[l.a2_], a[l.a3_], a[l.a4_], a[l.a5_], a[l.a6_], a[l.a7_], a[l.a8_], a[l.a9_]); - } -}; - -#endif - -// bind_t - -#ifndef BOOST_NO_VOID_RETURNS - -template class bind_t -{ -public: - - bind_t(F f, L const & l): f_(f), l_(l) {} - -#define BOOST_BIND_EVALUATE return l_(type(), f_, a) -#include -#undef BOOST_BIND_EVALUATE - -}; - -#else - -template struct bind_t_generator -{ - -template class implementation -{ -public: - - implementation(F f, L const & l): f_(f), l_(l) {} - -#define BOOST_BIND_EVALUATE return L::BOOST_NESTED_TEMPLATE evaluator::type::eval(l_, f_, a); -#include -#undef BOOST_BIND_EVALUATE - -}; - -}; - -template<> struct bind_t_generator -{ - -template class implementation -{ -private: - - typedef void R; - -public: - - implementation(F f, L const & l): f_(f), l_(l) {} - -#define BOOST_BIND_EVALUATE L::BOOST_NESTED_TEMPLATE evaluator::type::eval(l_, f_, a); -#include -#undef BOOST_BIND_EVALUATE - -}; - -}; - -template class bind_t: public bind_t_generator::BOOST_NESTED_TEMPLATE implementation -{ -public: - - bind_t(F f, L const & l): bind_t_generator::BOOST_NESTED_TEMPLATE implementation(f, l) {} - -}; - -#endif - -// add_value - -#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) || (__SUNPRO_CC >= 0x530) - -template struct add_value -{ - typedef value type; -}; - -template struct add_value< value > -{ - typedef value type; -}; - -template struct add_value< reference_wrapper > -{ - typedef reference_wrapper type; -}; - -template struct add_value< arg > -{ - typedef arg type; -}; - -template struct add_value< arg (*) () > -{ - typedef arg (*type) (); -}; - -template struct add_value< bind_t > -{ - typedef bind_t type; -}; - -#else - -template struct _avt_0; - -template<> struct _avt_0<1> -{ - template struct inner - { - typedef T type; - }; -}; - -template<> struct _avt_0<2> -{ - template struct inner - { - typedef value type; - }; -}; - -typedef char (&_avt_r1) [1]; -typedef char (&_avt_r2) [2]; - -template _avt_r1 _avt_f(value); -template _avt_r1 _avt_f(reference_wrapper); -template _avt_r1 _avt_f(arg); -template _avt_r1 _avt_f(arg (*) ()); -template _avt_r1 _avt_f(bind_t); - -_avt_r2 _avt_f(...); - -template struct add_value -{ - static T t(); - typedef typename _avt_0::template inner::type type; -}; - -#endif - -// list_av_N - -template struct list_av_1 -{ - typedef typename add_value::type B1; - typedef list1 type; -}; - -template struct list_av_2 -{ - typedef typename add_value::type B1; - typedef typename add_value::type B2; - typedef list2 type; -}; - -template struct list_av_3 -{ - typedef typename add_value::type B1; - typedef typename add_value::type B2; - typedef typename add_value::type B3; - typedef list3 type; -}; - -template struct list_av_4 -{ - typedef typename add_value::type B1; - typedef typename add_value::type B2; - typedef typename add_value::type B3; - typedef typename add_value::type B4; - typedef list4 type; -}; - -template struct list_av_5 -{ - typedef typename add_value::type B1; - typedef typename add_value::type B2; - typedef typename add_value::type B3; - typedef typename add_value::type B4; - typedef typename add_value::type B5; - typedef list5 type; -}; - -template struct list_av_6 -{ - typedef typename add_value::type B1; - typedef typename add_value::type B2; - typedef typename add_value::type B3; - typedef typename add_value::type B4; - typedef typename add_value::type B5; - typedef typename add_value::type B6; - typedef list6 type; -}; - -template struct list_av_7 -{ - typedef typename add_value::type B1; - typedef typename add_value::type B2; - typedef typename add_value::type B3; - typedef typename add_value::type B4; - typedef typename add_value::type B5; - typedef typename add_value::type B6; - typedef typename add_value::type B7; - typedef list7 type; -}; - -template struct list_av_8 -{ - typedef typename add_value::type B1; - typedef typename add_value::type B2; - typedef typename add_value::type B3; - typedef typename add_value::type B4; - typedef typename add_value::type B5; - typedef typename add_value::type B6; - typedef typename add_value::type B7; - typedef typename add_value::type B8; - typedef list8 type; -}; - -template struct list_av_9 -{ - typedef typename add_value::type B1; - typedef typename add_value::type B2; - typedef typename add_value::type B3; - typedef typename add_value::type B4; - typedef typename add_value::type B5; - typedef typename add_value::type B6; - typedef typename add_value::type B7; - typedef typename add_value::type B8; - typedef typename add_value::type B9; - typedef list9 type; -}; - -} // namespace _bi - -// visit_each - -template void visit_each(V & v, _bi::value const & t, int) -{ - BOOST_BIND_VISIT_EACH(v, t.get(), 0); -} - -template void visit_each(V & v, _bi::bind_t const & t, int) -{ - t.accept(v); -} - -// bind - -#ifndef BOOST_BIND -#define BOOST_BIND bind -#endif - -// generic function objects - -template - _bi::bind_t - BOOST_BIND(F f) -{ - typedef _bi::list0 list_type; - return _bi::bind_t (f, list_type()); -} - -template - _bi::bind_t::type> - BOOST_BIND(F f, A1 a1) -{ - typedef typename _bi::list_av_1::type list_type; - return _bi::bind_t (f, list_type(a1)); -} - -template - _bi::bind_t::type> - BOOST_BIND(F f, A1 a1, A2 a2) -{ - typedef typename _bi::list_av_2::type list_type; - return _bi::bind_t (f, list_type(a1, a2)); -} - -template - _bi::bind_t::type> - BOOST_BIND(F f, A1 a1, A2 a2, A3 a3) -{ - typedef typename _bi::list_av_3::type list_type; - return _bi::bind_t(f, list_type(a1, a2, a3)); -} - -template - _bi::bind_t::type> - BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4) -{ - typedef typename _bi::list_av_4::type list_type; - return _bi::bind_t(f, list_type(a1, a2, a3, a4)); -} - -template - _bi::bind_t::type> - BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) -{ - typedef typename _bi::list_av_5::type list_type; - return _bi::bind_t(f, list_type(a1, a2, a3, a4, a5)); -} - -template - _bi::bind_t::type> - BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) -{ - typedef typename _bi::list_av_6::type list_type; - return _bi::bind_t(f, list_type(a1, a2, a3, a4, a5, a6)); -} - -template - _bi::bind_t::type> - BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) -{ - typedef typename _bi::list_av_7::type list_type; - return _bi::bind_t(f, list_type(a1, a2, a3, a4, a5, a6, a7)); -} - -template - _bi::bind_t::type> - BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) -{ - typedef typename _bi::list_av_8::type list_type; - return _bi::bind_t(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8)); -} - -template - _bi::bind_t::type> - BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) -{ - typedef typename _bi::list_av_9::type list_type; - return _bi::bind_t(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9)); -} - -#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) - -// adaptable function objects - -template - _bi::bind_t<_bi::unspecified, F, _bi::list0> - BOOST_BIND(F f) -{ - typedef _bi::list0 list_type; - return _bi::bind_t<_bi::unspecified, F, list_type> (f, list_type()); -} - -template - _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_1::type> - BOOST_BIND(F f, A1 a1) -{ - typedef typename _bi::list_av_1::type list_type; - return _bi::bind_t<_bi::unspecified, F, list_type> (f, list_type(a1)); -} - -template - _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_2::type> - BOOST_BIND(F f, A1 a1, A2 a2) -{ - typedef typename _bi::list_av_2::type list_type; - return _bi::bind_t<_bi::unspecified, F, list_type> (f, list_type(a1, a2)); -} - -template - _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_3::type> - BOOST_BIND(F f, A1 a1, A2 a2, A3 a3) -{ - typedef typename _bi::list_av_3::type list_type; - return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3)); -} - -template - _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_4::type> - BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4) -{ - typedef typename _bi::list_av_4::type list_type; - return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4)); -} - -template - _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_5::type> - BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) -{ - typedef typename _bi::list_av_5::type list_type; - return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5)); -} - -template - _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_6::type> - BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) -{ - typedef typename _bi::list_av_6::type list_type; - return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6)); -} - -template - _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_7::type> - BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) -{ - typedef typename _bi::list_av_7::type list_type; - return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7)); -} - -template - _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_8::type> - BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) -{ - typedef typename _bi::list_av_8::type list_type; - return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8)); -} - -template - _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_9::type> - BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) -{ - typedef typename _bi::list_av_9::type list_type; - return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9)); -} - -#endif // !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) - -// function pointers - -#define BOOST_BIND_CC -#define BOOST_BIND_ST - -#include - -#undef BOOST_BIND_CC -#undef BOOST_BIND_ST - -#ifdef BOOST_BIND_ENABLE_STDCALL - -#define BOOST_BIND_CC __stdcall -#define BOOST_BIND_ST - -#include - -#undef BOOST_BIND_CC -#undef BOOST_BIND_ST - -#endif - -#ifdef BOOST_BIND_ENABLE_FASTCALL - -#define BOOST_BIND_CC __fastcall -#define BOOST_BIND_ST - -#include - -#undef BOOST_BIND_CC -#undef BOOST_BIND_ST - -#endif - -#ifdef BOOST_BIND_ENABLE_PASCAL - -#define BOOST_BIND_ST pascal -#define BOOST_BIND_CC - -#include - -#undef BOOST_BIND_ST -#undef BOOST_BIND_CC - -#endif - -// member function pointers - -#define BOOST_BIND_MF_NAME(X) X -#define BOOST_BIND_MF_CC - -#include - -#undef BOOST_BIND_MF_NAME -#undef BOOST_BIND_MF_CC - -#ifdef BOOST_MEM_FN_ENABLE_STDCALL - -#define BOOST_BIND_MF_NAME(X) X##_stdcall -#define BOOST_BIND_MF_CC __stdcall - -#include - -#undef BOOST_BIND_MF_NAME -#undef BOOST_BIND_MF_CC - -#endif - -#ifdef BOOST_MEM_FN_ENABLE_FASTCALL - -#define BOOST_BIND_MF_NAME(X) X##_fastcall -#define BOOST_BIND_MF_CC __fastcall - -#include - -#undef BOOST_BIND_MF_NAME -#undef BOOST_BIND_MF_CC - -#endif - -// data member pointers - -template - _bi::bind_t< R, _mfi::dm, typename _bi::list_av_1::type > - BOOST_BIND(R T::*f, A1 a1) -{ - typedef _mfi::dm F; - typedef typename _bi::list_av_1::type list_type; - return _bi::bind_t(F(f), list_type(a1)); -} - -} // namespace boost - -#ifndef BOOST_BIND_NO_PLACEHOLDERS - -# include - -#endif - -#ifdef BOOST_MSVC -# pragma warning(default: 4512) // assignment operator could not be generated -# pragma warning(pop) -#endif +#include #endif // #ifndef BOOST_BIND_HPP_INCLUDED