container_fwd.hpp 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. //////////////////////////////////////////////////////////////////////////////
  2. //
  3. // (C) Copyright Ion Gaztanaga 2005-2012. Distributed under the Boost
  4. // Software License, Version 1.0. (See accompanying file
  5. // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  6. //
  7. // See http://www.boost.org/libs/container for documentation.
  8. //
  9. //////////////////////////////////////////////////////////////////////////////
  10. #ifndef BOOST_CONTAINER_CONTAINER_FWD_HPP
  11. #define BOOST_CONTAINER_CONTAINER_FWD_HPP
  12. #if defined(_MSC_VER)
  13. # pragma once
  14. #endif
  15. //////////////////////////////////////////////////////////////////////////////
  16. // Standard predeclarations
  17. //////////////////////////////////////////////////////////////////////////////
  18. /// @cond
  19. namespace boost{
  20. namespace intrusive{
  21. //Create namespace to avoid compilation errors
  22. }}
  23. namespace boost{ namespace container{ namespace container_detail{
  24. namespace bi = boost::intrusive;
  25. }}}
  26. #include <utility>
  27. #include <memory>
  28. #include <functional>
  29. #include <iosfwd>
  30. #include <string>
  31. /// @endcond
  32. //////////////////////////////////////////////////////////////////////////////
  33. // Containers
  34. //////////////////////////////////////////////////////////////////////////////
  35. namespace boost {
  36. namespace container {
  37. //vector class
  38. template <class T
  39. ,class Allocator = std::allocator<T> >
  40. class vector;
  41. //vector class
  42. template <class T
  43. ,class Allocator = std::allocator<T> >
  44. class stable_vector;
  45. //vector class
  46. template <class T
  47. ,class Allocator = std::allocator<T> >
  48. class deque;
  49. //list class
  50. template <class T
  51. ,class Allocator = std::allocator<T> >
  52. class list;
  53. //slist class
  54. template <class T
  55. ,class Allocator = std::allocator<T> >
  56. class slist;
  57. //set class
  58. template <class Key
  59. ,class Compare = std::less<Key>
  60. ,class Allocator = std::allocator<Key> >
  61. class set;
  62. //multiset class
  63. template <class Key
  64. ,class Compare = std::less<Key>
  65. ,class Allocator = std::allocator<Key> >
  66. class multiset;
  67. //map class
  68. template <class Key
  69. ,class T
  70. ,class Compare = std::less<Key>
  71. ,class Allocator = std::allocator<std::pair<const Key, T> > >
  72. class map;
  73. //multimap class
  74. template <class Key
  75. ,class T
  76. ,class Compare = std::less<Key>
  77. ,class Allocator = std::allocator<std::pair<const Key, T> > >
  78. class multimap;
  79. //flat_set class
  80. template <class Key
  81. ,class Compare = std::less<Key>
  82. ,class Allocator = std::allocator<Key> >
  83. class flat_set;
  84. //flat_multiset class
  85. template <class Key
  86. ,class Compare = std::less<Key>
  87. ,class Allocator = std::allocator<Key> >
  88. class flat_multiset;
  89. //flat_map class
  90. template <class Key
  91. ,class T
  92. ,class Compare = std::less<Key>
  93. ,class Allocator = std::allocator<std::pair<Key, T> > >
  94. class flat_map;
  95. //flat_multimap class
  96. template <class Key
  97. ,class T
  98. ,class Compare = std::less<Key>
  99. ,class Allocator = std::allocator<std::pair<Key, T> > >
  100. class flat_multimap;
  101. //basic_string class
  102. template <class CharT
  103. ,class Traits = std::char_traits<CharT>
  104. ,class Allocator = std::allocator<CharT> >
  105. class basic_string;
  106. //! Type used to tag that the input range is
  107. //! guaranteed to be ordered
  108. struct ordered_range_t
  109. {};
  110. //! Value used to tag that the input range is
  111. //! guaranteed to be ordered
  112. static const ordered_range_t ordered_range = ordered_range_t();
  113. //! Type used to tag that the input range is
  114. //! guaranteed to be ordered and unique
  115. struct ordered_unique_range_t
  116. : public ordered_range_t
  117. {};
  118. //! Value used to tag that the input range is
  119. //! guaranteed to be ordered and unique
  120. static const ordered_unique_range_t ordered_unique_range = ordered_unique_range_t();
  121. //! Type used to tag that the input range is
  122. //! guaranteed to be ordered and unique
  123. struct default_init_t
  124. {};
  125. //! Value used to tag that the input range is
  126. //! guaranteed to be ordered and unique
  127. static const default_init_t default_init = default_init_t();
  128. /// @cond
  129. namespace detail_really_deep_namespace {
  130. //Otherwise, gcc issues a warning of previously defined
  131. //anonymous_instance and unique_instance
  132. struct dummy
  133. {
  134. dummy()
  135. {
  136. (void)ordered_range;
  137. (void)ordered_unique_range;
  138. (void)default_init;
  139. }
  140. };
  141. } //detail_really_deep_namespace {
  142. /// @endcond
  143. }} //namespace boost { namespace container {
  144. #endif //#ifndef BOOST_CONTAINER_CONTAINER_FWD_HPP