PageRenderTime 31ms CodeModel.GetById 19ms app.highlight 10ms RepoModel.GetById 1ms app.codeStats 0ms

/src/contrib/boost/mpl/vector/aux_/item.hpp

http://pythonocc.googlecode.com/
C++ Header | 103 lines | 73 code | 17 blank | 13 comment | 0 complexity | cf8cd15b122ee96141fd74a4e36d0bf6 MD5 | raw file
  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// $Id: item.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
 14// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
 15// $Revision: 49267 $
 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
 24namespace boost { namespace mpl {
 25
 26#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
 27
 28template< 
 29      typename T
 30    , typename Base
 31    , int at_front = 0
 32    >
 33struct 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
 48template<
 49      typename T
 50    , typename Base
 51    >
 52struct 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
 66template< 
 67      typename Base
 68    , int at_front
 69    >
 70struct 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
 83template< 
 84      typename Base
 85    >
 86struct 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