os/ossrv/ossrv_pub/boost_apis/boost/bind/protect.hpp
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
     1 #ifndef BOOST_BIND_PROTECT_HPP_INCLUDED
     2 #define BOOST_BIND_PROTECT_HPP_INCLUDED
     3 
     4 //
     5 //  protect.hpp
     6 //
     7 //  Copyright (c) 2002 Peter Dimov and Multi Media Ltd.
     8 //
     9 // Distributed under the Boost Software License, Version 1.0. (See
    10 // accompanying file LICENSE_1_0.txt or copy at
    11 // http://www.boost.org/LICENSE_1_0.txt)
    12 //
    13 
    14 namespace boost
    15 {
    16 
    17 namespace _bi
    18 {
    19 
    20 template<class F> class protected_bind_t
    21 {
    22 public:
    23 
    24     typedef typename F::result_type result_type;
    25 
    26     explicit protected_bind_t(F f): f_(f)
    27     {
    28     }
    29 
    30     result_type operator()()
    31     {
    32         return f_();
    33     }
    34 
    35     result_type operator()() const
    36     {
    37         return f_();
    38     }
    39 
    40     template<class A1> result_type operator()(A1 & a1)
    41     {
    42         return f_(a1);
    43     }
    44 
    45     template<class A1> result_type operator()(A1 & a1) const
    46     {
    47         return f_(a1);
    48     }
    49 
    50     template<class A1, class A2> result_type operator()(A1 & a1, A2 & a2)
    51     {
    52         return f_(a1, a2);
    53     }
    54 
    55     template<class A1, class A2> result_type operator()(A1 & a1, A2 & a2) const
    56     {
    57         return f_(a1, a2);
    58     }
    59 
    60     template<class A1, class A2, class A3> result_type operator()(A1 & a1, A2 & a2, A3 & a3)
    61     {
    62         return f_(a1, a2, a3);
    63     }
    64 
    65     template<class A1, class A2, class A3> result_type operator()(A1 & a1, A2 & a2, A3 & a3) const
    66     {
    67         return f_(a1, a2, a3);
    68     }
    69 
    70     template<class A1, class A2, class A3, class A4> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4)
    71     {
    72         return f_(a1, a2, a3, a4);
    73     }
    74 
    75     template<class A1, class A2, class A3, class A4> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4) const
    76     {
    77         return f_(a1, a2, a3, a4);
    78     }
    79 
    80     template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5)
    81     {
    82         return f_(a1, a2, a3, a4, a5);
    83     }
    84 
    85     template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5) const
    86     {
    87         return f_(a1, a2, a3, a4, a5);
    88     }
    89 
    90     template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6)
    91     {
    92         return f_(a1, a2, a3, a4, a5, a6);
    93     }
    94 
    95     template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6) const
    96     {
    97         return f_(a1, a2, a3, a4, a5, a6);
    98     }
    99 
   100     template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7)
   101     {
   102         return f_(a1, a2, a3, a4, a5, a6, a7);
   103     }
   104 
   105     template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7) const
   106     {
   107         return f_(a1, a2, a3, a4, a5, a6, a7);
   108     }
   109 
   110     template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8)
   111     {
   112         return f_(a1, a2, a3, a4, a5, a6, a7, a8);
   113     }
   114 
   115     template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8) const
   116     {
   117         return f_(a1, a2, a3, a4, a5, a6, a7, a8);
   118     }
   119 
   120     template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9)
   121     {
   122         return f_(a1, a2, a3, a4, a5, a6, a7, a8, a9);
   123     }
   124 
   125     template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9) const
   126     {
   127         return f_(a1, a2, a3, a4, a5, a6, a7, a8, a9);
   128     }
   129 
   130 private:
   131 
   132     F f_;
   133 };
   134 
   135 } // namespace _bi
   136 
   137 template<class F> _bi::protected_bind_t<F> protect(F f)
   138 {
   139     return _bi::protected_bind_t<F>(f);
   140 }
   141 
   142 } // namespace boost
   143 
   144 #endif // #ifndef BOOST_BIND_PROTECT_HPP_INCLUDED