epoc32/include/stdapis/boost/mpl/aux_/preprocessed/plain/times.hpp
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
parent 3 e1b950c65cb4
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
     1 
     2 // Copyright Aleksey Gurtovoy 2000-2004
     3 //
     4 // Distributed under the Boost Software License, Version 1.0. 
     5 // (See accompanying file LICENSE_1_0.txt or copy at 
     6 // http://www.boost.org/LICENSE_1_0.txt)
     7 //
     8 
     9 // Preprocessed version of "boost/mpl/times.hpp" header
    10 // -- DO NOT modify by hand!
    11 
    12 namespace boost { namespace mpl {
    13 
    14 template<
    15       typename Tag1
    16     , typename Tag2
    17     >
    18 struct times_impl
    19     : if_c<
    20           ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
    21               > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
    22             )
    23 
    24         , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 >
    25         , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 >
    26         >::type
    27 {
    28 };
    29 
    30 /// for Digital Mars C++/compilers with no CTPS/TTP support
    31 template<> struct times_impl< na,na >
    32 {
    33     template< typename U1, typename U2 > struct apply
    34     {
    35         typedef apply type;
    36         BOOST_STATIC_CONSTANT(int, value  = 0);
    37     };
    38 };
    39 
    40 template< typename Tag > struct times_impl< na,Tag >
    41 {
    42     template< typename U1, typename U2 > struct apply
    43     {
    44         typedef apply type;
    45         BOOST_STATIC_CONSTANT(int, value  = 0);
    46     };
    47 };
    48 
    49 template< typename Tag > struct times_impl< Tag,na >
    50 {
    51     template< typename U1, typename U2 > struct apply
    52     {
    53         typedef apply type;
    54         BOOST_STATIC_CONSTANT(int, value  = 0);
    55     };
    56 };
    57 
    58 template< typename T > struct times_tag
    59 {
    60     typedef typename T::tag type;
    61 };
    62 
    63 template<
    64       typename BOOST_MPL_AUX_NA_PARAM(N1)
    65     , typename BOOST_MPL_AUX_NA_PARAM(N2)
    66     , typename N3 = na, typename N4 = na, typename N5 = na
    67     >
    68 struct times
    69     : times< times< times< times< N1,N2 >, N3>, N4>, N5>
    70 {
    71 };
    72 
    73 template<
    74       typename N1, typename N2, typename N3, typename N4
    75     >
    76 struct times< N1,N2,N3,N4,na >
    77 
    78     : times< times< times< N1,N2 >, N3>, N4>
    79 {
    80     BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
    81           5
    82         , times
    83         , ( N1, N2, N3, N4, na )
    84         )
    85 };
    86 
    87 template<
    88       typename N1, typename N2, typename N3
    89     >
    90 struct times< N1,N2,N3,na,na >
    91 
    92     : times< times< N1,N2 >, N3>
    93 {
    94     BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
    95           5
    96         , times
    97         , ( N1, N2, N3, na, na )
    98         )
    99 };
   100 
   101 template<
   102       typename N1, typename N2
   103     >
   104 struct times< N1,N2,na,na,na >
   105     : times_impl<
   106           typename times_tag<N1>::type
   107         , typename times_tag<N2>::type
   108         >::template apply< N1,N2 >::type
   109 {
   110     BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
   111           5
   112         , times
   113         , ( N1, N2, na, na, na )
   114         )
   115 
   116 };
   117 
   118 BOOST_MPL_AUX_NA_SPEC2(2, 5, times)
   119 
   120 }}
   121 
   122 namespace boost { namespace mpl {
   123 template<>
   124 struct times_impl< integral_c_tag,integral_c_tag >
   125 {
   126     template< typename N1, typename N2 > struct apply
   127 
   128         : integral_c<
   129               typename aux::largest_int<
   130                   typename N1::value_type
   131                 , typename N2::value_type
   132                 >::type
   133             , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
   134                   * BOOST_MPL_AUX_VALUE_WKND(N2)::value
   135                 )
   136             >
   137     {
   138     };
   139 };
   140 
   141 }}