mpl_iterator_category.hpp 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. /*=============================================================================
  2. Copyright (c) 2001-2011 Joel de Guzman
  3. Distributed under the Boost Software License, Version 1.0. (See accompanying
  4. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  5. ==============================================================================*/
  6. #if !defined(FUSION_MPL_ITERATOR_CATEGORY_07212005_0923)
  7. #define FUSION_MPL_ITERATOR_CATEGORY_07212005_0923
  8. namespace boost { namespace mpl
  9. {
  10. struct forward_iterator_tag;
  11. struct bidirectional_iterator_tag;
  12. struct random_access_iterator_tag;
  13. }}
  14. namespace boost { namespace fusion
  15. {
  16. struct forward_traversal_tag;
  17. struct bidirectional_traversal_tag;
  18. struct random_access_traversal_tag;
  19. }}
  20. namespace boost { namespace fusion { namespace detail
  21. {
  22. template <typename Category>
  23. struct mpl_iterator_category;
  24. template <>
  25. struct mpl_iterator_category<mpl::forward_iterator_tag>
  26. {
  27. typedef forward_traversal_tag type;
  28. };
  29. template <>
  30. struct mpl_iterator_category<mpl::bidirectional_iterator_tag>
  31. {
  32. typedef bidirectional_traversal_tag type;
  33. };
  34. template <>
  35. struct mpl_iterator_category<mpl::random_access_iterator_tag>
  36. {
  37. typedef random_access_traversal_tag type;
  38. };
  39. template <>
  40. struct mpl_iterator_category<forward_traversal_tag>
  41. {
  42. typedef forward_traversal_tag type;
  43. };
  44. template <>
  45. struct mpl_iterator_category<bidirectional_traversal_tag>
  46. {
  47. typedef bidirectional_traversal_tag type;
  48. };
  49. template <>
  50. struct mpl_iterator_category<random_access_traversal_tag>
  51. {
  52. typedef random_access_traversal_tag type;
  53. };
  54. }}}
  55. #endif