item.hpp 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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$
  12. // $Date$
  13. // $Revision$
  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 typename Base::item_ base;
  30. typedef s_item type;
  31. typedef typename next< typename Base::size >::type size;
  32. typedef typename next< typename Base::order >::type order;
  33. #if defined(BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES)
  34. typedef typename aux::weighted_tag<BOOST_MPL_AUX_MSVC_VALUE_WKND(order)::value>::type order_tag_;
  35. #else
  36. typedef char (&order_tag_)[BOOST_MPL_AUX_MSVC_VALUE_WKND(order)::value];
  37. #endif
  38. BOOST_MPL_AUX_SET_OVERLOAD( order_tag_, ORDER_BY_KEY, s_item, aux::type_wrapper<T>* );
  39. BOOST_MPL_AUX_SET_OVERLOAD( aux::no_tag, IS_MASKED, s_item, aux::type_wrapper<T>* );
  40. };
  41. template< typename T, typename Base >
  42. struct s_mask
  43. : Base
  44. {
  45. typedef s_mask<T,Base> item_;
  46. typedef T last_masked_;
  47. typedef void_ item_type_;
  48. typedef typename Base::item_ base;
  49. typedef typename prior< typename Base::size >::type size;
  50. typedef s_mask type;
  51. BOOST_MPL_AUX_SET_OVERLOAD( aux::yes_tag, IS_MASKED, s_mask, aux::type_wrapper<T>* );
  52. };
  53. template< typename T, typename Base >
  54. struct s_unmask
  55. : Base
  56. {
  57. typedef s_unmask<T,Base> item_;
  58. typedef void_ last_masked_;
  59. typedef T item_type_;
  60. typedef typename Base::item_ base;
  61. typedef typename next< typename Base::size >::type size;
  62. BOOST_MPL_AUX_SET_OVERLOAD( aux::no_tag, IS_MASKED, s_unmask, aux::type_wrapper<T>* );
  63. };
  64. }}
  65. #endif // BOOST_MPL_SET_AUX_ITEM_HPP_INCLUDED