ossrv_pub/boost_apis/boost/signal.hpp
changeset 0 e4d67989cc36
equal deleted inserted replaced
-1:000000000000 0:e4d67989cc36
       
     1 // Boost.Signals library
       
     2 
       
     3 // Copyright Douglas Gregor 2001-2006. Use, modification and
       
     4 // distribution is subject to the Boost Software License, Version
       
     5 // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
       
     6 // http://www.boost.org/LICENSE_1_0.txt)
       
     7 
       
     8 // For more information, see http://www.boost.org/libs/signals
       
     9 
       
    10 #ifndef BOOST_SIGNAL_HPP
       
    11 #define BOOST_SIGNAL_HPP
       
    12 
       
    13 #ifndef BOOST_SIGNALS_MAX_ARGS
       
    14 #  define BOOST_SIGNALS_MAX_ARGS 10
       
    15 #endif
       
    16 
       
    17 #include <boost/config.hpp>
       
    18 #include <boost/type_traits/function_traits.hpp>
       
    19 #include <boost/signals/signal0.hpp>
       
    20 #include <boost/signals/signal1.hpp>
       
    21 #include <boost/signals/signal2.hpp>
       
    22 #include <boost/signals/signal3.hpp>
       
    23 #include <boost/signals/signal4.hpp>
       
    24 #include <boost/signals/signal5.hpp>
       
    25 #include <boost/signals/signal6.hpp>
       
    26 #include <boost/signals/signal7.hpp>
       
    27 #include <boost/signals/signal8.hpp>
       
    28 #include <boost/signals/signal9.hpp>
       
    29 #include <boost/signals/signal10.hpp>
       
    30 #include <boost/function.hpp>
       
    31 
       
    32 #ifdef BOOST_HAS_ABI_HEADERS
       
    33 #  include BOOST_ABI_PREFIX
       
    34 #endif
       
    35 
       
    36 namespace boost {
       
    37 #ifndef BOOST_FUNCTION_NO_FUNCTION_TYPE_SYNTAX
       
    38   namespace BOOST_SIGNALS_NAMESPACE {
       
    39     namespace detail {
       
    40       template<int Arity,
       
    41                typename Signature,
       
    42                typename Combiner,
       
    43                typename Group,
       
    44                typename GroupCompare,
       
    45                typename SlotFunction>
       
    46       class real_get_signal_impl;
       
    47 
       
    48       template<typename Signature,
       
    49                typename Combiner,
       
    50                typename Group,
       
    51                typename GroupCompare,
       
    52                typename SlotFunction>
       
    53       class real_get_signal_impl<0, Signature, Combiner, Group, GroupCompare,
       
    54                                  SlotFunction>
       
    55       {
       
    56         typedef function_traits<Signature> traits;
       
    57 
       
    58       public:
       
    59         typedef signal0<typename traits::result_type,
       
    60                         Combiner,
       
    61                         Group,
       
    62                         GroupCompare,
       
    63                         SlotFunction> type;
       
    64       };
       
    65 
       
    66       template<typename Signature,
       
    67                typename Combiner,
       
    68                typename Group,
       
    69                typename GroupCompare,
       
    70                typename SlotFunction>
       
    71       class real_get_signal_impl<1, Signature, Combiner, Group, GroupCompare,
       
    72                                  SlotFunction>
       
    73       {
       
    74         typedef function_traits<Signature> traits;
       
    75 
       
    76       public:
       
    77         typedef signal1<typename traits::result_type,
       
    78                         typename traits::arg1_type,
       
    79                         Combiner,
       
    80                         Group,
       
    81                         GroupCompare,
       
    82                         SlotFunction> type;
       
    83       };
       
    84 
       
    85       template<typename Signature,
       
    86                typename Combiner,
       
    87                typename Group,
       
    88                typename GroupCompare,
       
    89                typename SlotFunction>
       
    90       class real_get_signal_impl<2, Signature, Combiner, Group, GroupCompare,
       
    91                                  SlotFunction>
       
    92       {
       
    93         typedef function_traits<Signature> traits;
       
    94 
       
    95       public:
       
    96         typedef signal2<typename traits::result_type,
       
    97                         typename traits::arg1_type,
       
    98                         typename traits::arg2_type,
       
    99                         Combiner,
       
   100                         Group,
       
   101                         GroupCompare,
       
   102                         SlotFunction> type;
       
   103       };
       
   104 
       
   105       template<typename Signature,
       
   106                typename Combiner,
       
   107                typename Group,
       
   108                typename GroupCompare,
       
   109                typename SlotFunction>
       
   110       class real_get_signal_impl<3, Signature, Combiner, Group, GroupCompare,
       
   111                                  SlotFunction>
       
   112       {
       
   113         typedef function_traits<Signature> traits;
       
   114 
       
   115       public:
       
   116         typedef signal3<typename traits::result_type,
       
   117                         typename traits::arg1_type,
       
   118                         typename traits::arg2_type,
       
   119                         typename traits::arg3_type,
       
   120                         Combiner,
       
   121                         Group,
       
   122                         GroupCompare,
       
   123                         SlotFunction> type;
       
   124       };
       
   125 
       
   126       template<typename Signature,
       
   127                typename Combiner,
       
   128                typename Group,
       
   129                typename GroupCompare,
       
   130                typename SlotFunction>
       
   131       class real_get_signal_impl<4, Signature, Combiner, Group, GroupCompare,
       
   132                                  SlotFunction>
       
   133       {
       
   134         typedef function_traits<Signature> traits;
       
   135 
       
   136       public:
       
   137         typedef signal4<typename traits::result_type,
       
   138                         typename traits::arg1_type,
       
   139                         typename traits::arg2_type,
       
   140                         typename traits::arg3_type,
       
   141                         typename traits::arg4_type,
       
   142                         Combiner,
       
   143                         Group,
       
   144                         GroupCompare,
       
   145                         SlotFunction> type;
       
   146       };
       
   147 
       
   148       template<typename Signature,
       
   149                typename Combiner,
       
   150                typename Group,
       
   151                typename GroupCompare,
       
   152                typename SlotFunction>
       
   153       class real_get_signal_impl<5, Signature, Combiner, Group, GroupCompare,
       
   154                                  SlotFunction>
       
   155       {
       
   156         typedef function_traits<Signature> traits;
       
   157 
       
   158       public:
       
   159         typedef signal5<typename traits::result_type,
       
   160                         typename traits::arg1_type,
       
   161                         typename traits::arg2_type,
       
   162                         typename traits::arg3_type,
       
   163                         typename traits::arg4_type,
       
   164                         typename traits::arg5_type,
       
   165                         Combiner,
       
   166                         Group,
       
   167                         GroupCompare,
       
   168                         SlotFunction> type;
       
   169       };
       
   170 
       
   171       template<typename Signature,
       
   172                typename Combiner,
       
   173                typename Group,
       
   174                typename GroupCompare,
       
   175                typename SlotFunction>
       
   176       class real_get_signal_impl<6, Signature, Combiner, Group, GroupCompare,
       
   177                                  SlotFunction>
       
   178       {
       
   179         typedef function_traits<Signature> traits;
       
   180 
       
   181       public:
       
   182         typedef signal6<typename traits::result_type,
       
   183                         typename traits::arg1_type,
       
   184                         typename traits::arg2_type,
       
   185                         typename traits::arg3_type,
       
   186                         typename traits::arg4_type,
       
   187                         typename traits::arg5_type,
       
   188                         typename traits::arg6_type,
       
   189                         Combiner,
       
   190                         Group,
       
   191                         GroupCompare,
       
   192                         SlotFunction> type;
       
   193       };
       
   194 
       
   195       template<typename Signature,
       
   196                typename Combiner,
       
   197                typename Group,
       
   198                typename GroupCompare,
       
   199                typename SlotFunction>
       
   200       class real_get_signal_impl<7, Signature, Combiner, Group, GroupCompare,
       
   201                                  SlotFunction>
       
   202       {
       
   203         typedef function_traits<Signature> traits;
       
   204 
       
   205       public:
       
   206         typedef signal7<typename traits::result_type,
       
   207                         typename traits::arg1_type,
       
   208                         typename traits::arg2_type,
       
   209                         typename traits::arg3_type,
       
   210                         typename traits::arg4_type,
       
   211                         typename traits::arg5_type,
       
   212                         typename traits::arg6_type,
       
   213                         typename traits::arg7_type,
       
   214                         Combiner,
       
   215                         Group,
       
   216                         GroupCompare,
       
   217                         SlotFunction> type;
       
   218       };
       
   219 
       
   220       template<typename Signature,
       
   221                typename Combiner,
       
   222                typename Group,
       
   223                typename GroupCompare,
       
   224                typename SlotFunction>
       
   225       class real_get_signal_impl<8, Signature, Combiner, Group, GroupCompare,
       
   226                                  SlotFunction>
       
   227       {
       
   228         typedef function_traits<Signature> traits;
       
   229 
       
   230       public:
       
   231         typedef signal8<typename traits::result_type,
       
   232                         typename traits::arg1_type,
       
   233                         typename traits::arg2_type,
       
   234                         typename traits::arg3_type,
       
   235                         typename traits::arg4_type,
       
   236                         typename traits::arg5_type,
       
   237                         typename traits::arg6_type,
       
   238                         typename traits::arg7_type,
       
   239                         typename traits::arg8_type,
       
   240                         Combiner,
       
   241                         Group,
       
   242                         GroupCompare,
       
   243                         SlotFunction> type;
       
   244       };
       
   245 
       
   246       template<typename Signature,
       
   247                typename Combiner,
       
   248                typename Group,
       
   249                typename GroupCompare,
       
   250                typename SlotFunction>
       
   251       class real_get_signal_impl<9, Signature, Combiner, Group, GroupCompare,
       
   252                                  SlotFunction>
       
   253       {
       
   254         typedef function_traits<Signature> traits;
       
   255 
       
   256       public:
       
   257         typedef signal9<typename traits::result_type,
       
   258                         typename traits::arg1_type,
       
   259                         typename traits::arg2_type,
       
   260                         typename traits::arg3_type,
       
   261                         typename traits::arg4_type,
       
   262                         typename traits::arg5_type,
       
   263                         typename traits::arg6_type,
       
   264                         typename traits::arg7_type,
       
   265                         typename traits::arg8_type,
       
   266                         typename traits::arg9_type,
       
   267                         Combiner,
       
   268                         Group,
       
   269                         GroupCompare,
       
   270                         SlotFunction> type;
       
   271       };
       
   272 
       
   273       template<typename Signature,
       
   274                typename Combiner,
       
   275                typename Group,
       
   276                typename GroupCompare,
       
   277                typename SlotFunction>
       
   278       class real_get_signal_impl<10, Signature, Combiner, Group, GroupCompare,
       
   279                                  SlotFunction>
       
   280       {
       
   281         typedef function_traits<Signature> traits;
       
   282 
       
   283       public:
       
   284         typedef signal10<typename traits::result_type,
       
   285                          typename traits::arg1_type,
       
   286                          typename traits::arg2_type,
       
   287                          typename traits::arg3_type,
       
   288                          typename traits::arg4_type,
       
   289                          typename traits::arg5_type,
       
   290                          typename traits::arg6_type,
       
   291                          typename traits::arg7_type,
       
   292                          typename traits::arg8_type,
       
   293                          typename traits::arg9_type,
       
   294                          typename traits::arg10_type,
       
   295                          Combiner,
       
   296                          Group,
       
   297                          GroupCompare,
       
   298                          SlotFunction> type;
       
   299       };
       
   300 
       
   301       template<typename Signature,
       
   302                typename Combiner,
       
   303                typename Group,
       
   304                typename GroupCompare,
       
   305                typename SlotFunction>
       
   306       struct get_signal_impl :
       
   307         public real_get_signal_impl<(function_traits<Signature>::arity),
       
   308                                     Signature,
       
   309                                     Combiner,
       
   310                                     Group,
       
   311                                     GroupCompare,
       
   312                                     SlotFunction>
       
   313       {
       
   314       };
       
   315 
       
   316     } // end namespace detail
       
   317   } // end namespace BOOST_SIGNALS_NAMESPACE
       
   318 
       
   319   // Very lightweight wrapper around the signalN classes that allows signals to
       
   320   // be created where the number of arguments does not need to be part of the
       
   321   // class name.
       
   322   template<
       
   323     typename Signature, // function type R (T1, T2, ..., TN)
       
   324     typename Combiner = last_value<typename function_traits<Signature>::result_type>,
       
   325     typename Group = int,
       
   326     typename GroupCompare = std::less<Group>,
       
   327     typename SlotFunction = function<Signature>
       
   328   >
       
   329   class signal :
       
   330     public BOOST_SIGNALS_NAMESPACE::detail::get_signal_impl<Signature,
       
   331                                                             Combiner,
       
   332                                                             Group,
       
   333                                                             GroupCompare,
       
   334                                                             SlotFunction>::type
       
   335   {
       
   336     typedef typename BOOST_SIGNALS_NAMESPACE::detail::get_signal_impl<
       
   337                        Signature,
       
   338                        Combiner,
       
   339                        Group,
       
   340                        GroupCompare,
       
   341                        SlotFunction>::type base_type;
       
   342 
       
   343   public:
       
   344     explicit signal(const Combiner& combiner = Combiner(),
       
   345                     const GroupCompare& group_compare = GroupCompare()) :
       
   346       base_type(combiner, group_compare)
       
   347     {
       
   348     }
       
   349   };
       
   350 #endif // ndef BOOST_FUNCTION_NO_FUNCTION_TYPE_SYNTAX
       
   351 
       
   352 } // end namespace boost
       
   353 
       
   354 #ifdef BOOST_HAS_ABI_HEADERS
       
   355 #  include BOOST_ABI_SUFFIX
       
   356 #endif
       
   357 
       
   358 #endif // BOOST_SIGNAL_HPP