Chris@16: Chris@16: #ifndef BOOST_MPL_VECTOR_AUX_ITEM_HPP_INCLUDED Chris@16: #define BOOST_MPL_VECTOR_AUX_ITEM_HPP_INCLUDED Chris@16: Chris@16: // Copyright Aleksey Gurtovoy 2000-2004 Chris@16: // Chris@16: // Distributed under the Boost Software License, Version 1.0. Chris@16: // (See accompanying file LICENSE_1_0.txt or copy at Chris@16: // http://www.boost.org/LICENSE_1_0.txt) Chris@16: // Chris@16: // See http://www.boost.org/libs/mpl for documentation. Chris@16: Chris@101: // $Id$ Chris@101: // $Date$ Chris@101: // $Revision$ Chris@16: Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: namespace boost { namespace mpl { Chris@16: Chris@16: #if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES) Chris@16: Chris@16: template< Chris@16: typename T Chris@16: , typename Base Chris@16: , int at_front = 0 Chris@16: > Chris@16: struct v_item Chris@16: : Base Chris@16: { Chris@16: typedef typename Base::upper_bound_ index_; Chris@16: typedef typename next::type upper_bound_; Chris@16: typedef typename next::type size; Chris@16: typedef Base base; Chris@16: typedef v_item type; Chris@16: Chris@16: // agurt 10/sep/04: MWCW <= 9.3 workaround here and below; the compiler Chris@16: // breaks if using declaration comes _before_ the new overload Chris@16: static aux::type_wrapper item_(index_); Chris@16: using Base::item_; Chris@16: }; Chris@16: Chris@16: template< Chris@16: typename T Chris@16: , typename Base Chris@16: > Chris@16: struct v_item Chris@16: : Base Chris@16: { Chris@16: typedef typename prior::type index_; Chris@16: typedef index_ lower_bound_; Chris@16: typedef typename next::type size; Chris@16: typedef Base base; Chris@16: typedef v_item type; Chris@16: Chris@16: static aux::type_wrapper item_(index_); Chris@16: using Base::item_; Chris@16: }; Chris@16: Chris@16: // "erasure" item Chris@16: template< Chris@16: typename Base Chris@16: , int at_front Chris@16: > Chris@16: struct v_mask Chris@16: : Base Chris@16: { Chris@16: typedef typename prior::type index_; Chris@16: typedef index_ upper_bound_; Chris@16: typedef typename prior::type size; Chris@16: typedef Base base; Chris@16: typedef v_mask type; Chris@16: Chris@16: static aux::type_wrapper item_(index_); Chris@16: using Base::item_; Chris@16: }; Chris@16: Chris@16: template< Chris@16: typename Base Chris@16: > Chris@16: struct v_mask Chris@16: : Base Chris@16: { Chris@16: typedef typename Base::lower_bound_ index_; Chris@16: typedef typename next::type lower_bound_; Chris@16: typedef typename prior::type size; Chris@16: typedef Base base; Chris@16: typedef v_mask type; Chris@16: Chris@16: static aux::type_wrapper item_(index_); Chris@16: using Base::item_; Chris@16: }; Chris@16: Chris@16: #endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES Chris@16: Chris@16: }} Chris@16: Chris@16: #endif // BOOST_MPL_VECTOR_AUX_ITEM_HPP_INCLUDED