item.hpp 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #ifndef BOOST_MPL_SET_AUX_ITEM_HPP_INCLUDED
  2. #define BOOST_MPL_SET_AUX_ITEM_HPP_INCLUDED
  3. // Copyright Aleksey Gurtovoy 2003-2007
  4. // Copyright David Abrahams 2003-2004
  5. //
  6. // Distributed under the Boost Software License, Version 1.0.
  7. // (See accompanying file LICENSE_1_0.txt or copy at
  8. // http://www.boost.org/LICENSE_1_0.txt)
  9. //
  10. // See http://www.boost.org/libs/mpl for documentation.
  11. // $Id: item.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
  12. // $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
  13. // $Revision: 49267 $
  14. #include <boost/mpl/long.hpp>
  15. #include <boost/mpl/void.hpp>
  16. #include <boost/mpl/next.hpp>
  17. #include <boost/mpl/prior.hpp>
  18. #include <boost/mpl/set/aux_/set0.hpp>
  19. #include <boost/mpl/aux_/type_wrapper.hpp>
  20. #include <boost/mpl/aux_/config/arrays.hpp>
  21. namespace boost { namespace mpl {
  22. template< typename T, typename Base >
  23. struct s_item
  24. : Base
  25. {
  26. typedef s_item<T,Base> item_;
  27. typedef void_ last_masked_;
  28. typedef T item_type_;
  29. typedef Base base;
  30. typedef typename next< typename Base::size >::type size;
  31. typedef typename next< typename Base::order >::type order;
  32. #if defined(BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES)
  33. typedef typename aux::weighted_tag<BOOST_MPL_AUX_MSVC_VALUE_WKND(order)::value>::type order_tag_;
  34. #else
  35. typedef char (&order_tag_)[BOOST_MPL_AUX_MSVC_VALUE_WKND(order)::value];
  36. #endif
  37. BOOST_MPL_AUX_SET_OVERLOAD( order_tag_, ORDER_BY_KEY, s_item, aux::type_wrapper<T>* );
  38. BOOST_MPL_AUX_SET_OVERLOAD( aux::no_tag, IS_MASKED, s_item, aux::type_wrapper<T>* );
  39. };
  40. template< typename T, typename Base >
  41. struct s_mask
  42. : Base
  43. {
  44. typedef s_mask<T,Base> item_;
  45. typedef T last_masked_;
  46. typedef void_ item_type_;
  47. typedef Base base;
  48. typedef typename prior< typename Base::size >::type size;
  49. BOOST_MPL_AUX_SET_OVERLOAD( aux::yes_tag, IS_MASKED, s_mask, aux::type_wrapper<T>* );
  50. };
  51. template< typename T, typename Base >
  52. struct s_unmask
  53. : Base
  54. {
  55. typedef s_unmask<T,Base> item_;
  56. typedef void_ last_masked_;
  57. typedef T item_type_;
  58. typedef Base base;
  59. typedef typename next< typename Base::size >::type size;
  60. BOOST_MPL_AUX_SET_OVERLOAD( aux::no_tag, IS_MASKED, s_unmask, aux::type_wrapper<T>* );
  61. };
  62. }}
  63. #endif // BOOST_MPL_SET_AUX_ITEM_HPP_INCLUDED