epoc32/include/stdapis/boost/mpl/vector/aux_/item.hpp
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100 (2010-03-31)
branchSymbian3
changeset 4 837f303aceeb
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 #ifndef BOOST_MPL_VECTOR_AUX_ITEM_HPP_INCLUDED
     3 #define BOOST_MPL_VECTOR_AUX_ITEM_HPP_INCLUDED
     4 
     5 // Copyright Aleksey Gurtovoy 2000-2004
     6 //
     7 // Distributed under the Boost Software License, Version 1.0. 
     8 // (See accompanying file LICENSE_1_0.txt or copy at 
     9 // http://www.boost.org/LICENSE_1_0.txt)
    10 //
    11 // See http://www.boost.org/libs/mpl for documentation.
    12 
    13 // $Source: /cvsroot/boost/boost/boost/mpl/vector/aux_/item.hpp,v $
    14 // $Date: 2005/05/15 00:39:04 $
    15 // $Revision: 1.8 $
    16 
    17 #include <boost/mpl/long.hpp>
    18 #include <boost/mpl/void.hpp>
    19 #include <boost/mpl/next_prior.hpp>
    20 #include <boost/mpl/aux_/type_wrapper.hpp>
    21 #include <boost/mpl/aux_/config/typeof.hpp>
    22 #include <boost/mpl/aux_/config/ctps.hpp>
    23 
    24 namespace boost { namespace mpl {
    25 
    26 #if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
    27 
    28 template< 
    29       typename T
    30     , typename Base
    31     , int at_front = 0
    32     >
    33 struct v_item
    34     : Base
    35 {
    36     typedef typename Base::upper_bound_ index_;
    37     typedef typename next<index_>::type upper_bound_;
    38     typedef typename next<typename Base::size>::type size;
    39     typedef Base base;
    40     typedef v_item type;
    41 
    42     // agurt 10/sep/04: MWCW <= 9.3 workaround here and below; the compiler
    43     // breaks if using declaration comes _before_ the new overload
    44     static aux::type_wrapper<T> item_(index_);
    45     using Base::item_;
    46 };
    47 
    48 template<
    49       typename T
    50     , typename Base
    51     >
    52 struct v_item<T,Base,1>
    53     : Base
    54 {
    55     typedef typename prior<typename Base::lower_bound_>::type index_;
    56     typedef index_ lower_bound_;
    57     typedef typename next<typename Base::size>::type size;
    58     typedef Base base;
    59     typedef v_item type;
    60 
    61     static aux::type_wrapper<T> item_(index_);
    62     using Base::item_;
    63 };
    64 
    65 // "erasure" item
    66 template< 
    67       typename Base
    68     , int at_front
    69     >
    70 struct v_mask
    71     : Base
    72 {
    73     typedef typename prior<typename Base::upper_bound_>::type index_;
    74     typedef index_ upper_bound_;
    75     typedef typename prior<typename Base::size>::type size;
    76     typedef Base base;
    77     typedef v_mask type;
    78 
    79     static aux::type_wrapper<void_> item_(index_);
    80     using Base::item_;
    81 };
    82 
    83 template< 
    84       typename Base
    85     >
    86 struct v_mask<Base,1>
    87     : Base
    88 {
    89     typedef typename Base::lower_bound_ index_;
    90     typedef typename next<index_>::type lower_bound_;
    91     typedef typename prior<typename Base::size>::type size;
    92     typedef Base base;
    93     typedef v_mask type;
    94 
    95     static aux::type_wrapper<void_> item_(index_);
    96     using Base::item_;
    97 };
    98 
    99 #endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES
   100 
   101 }}
   102 
   103 #endif // BOOST_MPL_VECTOR_AUX_ITEM_HPP_INCLUDED