protect.hpp

Go to the documentation of this file.
00001 #ifndef BOOST_BIND_PROTECT_HPP_INCLUDED
00002 #define BOOST_BIND_PROTECT_HPP_INCLUDED
00003 
00004 //
00005 //  protect.hpp
00006 //
00007 //  Copyright (c) 2002 Peter Dimov and Multi Media Ltd.
00008 //
00009 // Distributed under the Boost Software License, Version 1.0. (See
00010 // accompanying file LICENSE_1_0.txt or copy at
00011 // http://www.boost.org/LICENSE_1_0.txt)
00012 //
00013 
00014 namespace boost
00015 {
00016 
00017 namespace _bi
00018 {
00019 
00020 template<class F> class protected_bind_t
00021 {
00022 public:
00023 
00024     typedef typename F::result_type result_type;
00025 
00026     explicit protected_bind_t(F f): f_(f)
00027     {
00028     }
00029 
00030     result_type operator()()
00031     {
00032         return f_();
00033     }
00034 
00035     result_type operator()() const
00036     {
00037         return f_();
00038     }
00039 
00040     template<class A1> result_type operator()(A1 & a1)
00041     {
00042         return f_(a1);
00043     }
00044 
00045     template<class A1> result_type operator()(A1 & a1) const
00046     {
00047         return f_(a1);
00048     }
00049 
00050     template<class A1, class A2> result_type operator()(A1 & a1, A2 & a2)
00051     {
00052         return f_(a1, a2);
00053     }
00054 
00055     template<class A1, class A2> result_type operator()(A1 & a1, A2 & a2) const
00056     {
00057         return f_(a1, a2);
00058     }
00059 
00060     template<class A1, class A2, class A3> result_type operator()(A1 & a1, A2 & a2, A3 & a3)
00061     {
00062         return f_(a1, a2, a3);
00063     }
00064 
00065     template<class A1, class A2, class A3> result_type operator()(A1 & a1, A2 & a2, A3 & a3) const
00066     {
00067         return f_(a1, a2, a3);
00068     }
00069 
00070     template<class A1, class A2, class A3, class A4> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4)
00071     {
00072         return f_(a1, a2, a3, a4);
00073     }
00074 
00075     template<class A1, class A2, class A3, class A4> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4) const
00076     {
00077         return f_(a1, a2, a3, a4);
00078     }
00079 
00080     template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5)
00081     {
00082         return f_(a1, a2, a3, a4, a5);
00083     }
00084 
00085     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
00086     {
00087         return f_(a1, a2, a3, a4, a5);
00088     }
00089 
00090     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)
00091     {
00092         return f_(a1, a2, a3, a4, a5, a6);
00093     }
00094 
00095     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
00096     {
00097         return f_(a1, a2, a3, a4, a5, a6);
00098     }
00099 
00100     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)
00101     {
00102         return f_(a1, a2, a3, a4, a5, a6, a7);
00103     }
00104 
00105     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
00106     {
00107         return f_(a1, a2, a3, a4, a5, a6, a7);
00108     }
00109 
00110     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)
00111     {
00112         return f_(a1, a2, a3, a4, a5, a6, a7, a8);
00113     }
00114 
00115     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
00116     {
00117         return f_(a1, a2, a3, a4, a5, a6, a7, a8);
00118     }
00119 
00120     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)
00121     {
00122         return f_(a1, a2, a3, a4, a5, a6, a7, a8, a9);
00123     }
00124 
00125     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
00126     {
00127         return f_(a1, a2, a3, a4, a5, a6, a7, a8, a9);
00128     }
00129 
00130 private:
00131 
00132     F f_;
00133 };
00134 
00135 } // namespace _bi
00136 
00137 template<class F> _bi::protected_bind_t<F> protect(F f)
00138 {
00139     return _bi::protected_bind_t<F>(f);
00140 }
00141 
00142 } // namespace boost
00143 
00144 #endif // #ifndef BOOST_BIND_PROTECT_HPP_INCLUDED

Generated on Wed Jan 21 15:32:09 2009 for SystemC by  doxygen 1.5.5