ptr_vector.hpp 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. //
  2. // Boost.Pointer Container
  3. //
  4. // Copyright Thorsten Ottosen 2003-2005. Use, modification and
  5. // distribution is subject to the Boost Software License, Version
  6. // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
  7. // http://www.boost.org/LICENSE_1_0.txt)
  8. //
  9. // For more information, see http://www.boost.org/libs/ptr_container/
  10. //
  11. #ifndef BOOST_PTR_CONTAINER_PTR_VECTOR_HPP
  12. #define BOOST_PTR_CONTAINER_PTR_VECTOR_HPP
  13. #if defined(_MSC_VER) && (_MSC_VER >= 1200)
  14. # pragma once
  15. #endif
  16. #include <vector>
  17. #include <boost/ptr_container/ptr_sequence_adapter.hpp>
  18. #include <boost/ptr_container/detail/ptr_container_disable_deprecated.hpp>
  19. #if defined(BOOST_PTR_CONTAINER_DISABLE_DEPRECATED)
  20. #pragma GCC diagnostic push
  21. #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
  22. #endif
  23. namespace boost
  24. {
  25. template
  26. <
  27. class T,
  28. class CloneAllocator = heap_clone_allocator,
  29. class Allocator = std::allocator<typename ptr_container_detail::void_ptr<T>::type>
  30. >
  31. class ptr_vector : public
  32. ptr_sequence_adapter< T, std::vector<
  33. typename ptr_container_detail::void_ptr<T>::type,Allocator>,
  34. CloneAllocator >
  35. {
  36. typedef ptr_sequence_adapter< T, std::vector<
  37. typename ptr_container_detail::void_ptr<T>::type,Allocator>,
  38. CloneAllocator >
  39. base_class;
  40. typedef ptr_vector<T,CloneAllocator,Allocator> this_type;
  41. public:
  42. BOOST_PTR_CONTAINER_DEFINE_SEQEUENCE_MEMBERS( ptr_vector,
  43. base_class,
  44. this_type )
  45. explicit ptr_vector( size_type n,
  46. const allocator_type& alloc = allocator_type() )
  47. : base_class(alloc)
  48. {
  49. this->base().reserve( n );
  50. }
  51. };
  52. //////////////////////////////////////////////////////////////////////////////
  53. // clonability
  54. template< typename T, typename CA, typename A >
  55. inline ptr_vector<T,CA,A>* new_clone( const ptr_vector<T,CA,A>& r )
  56. {
  57. return r.clone().release();
  58. }
  59. /////////////////////////////////////////////////////////////////////////
  60. // swap
  61. template< typename T, typename CA, typename A >
  62. inline void swap( ptr_vector<T,CA,A>& l, ptr_vector<T,CA,A>& r )
  63. {
  64. l.swap(r);
  65. }
  66. }
  67. #if defined(BOOST_PTR_CONTAINER_DISABLE_DEPRECATED)
  68. #pragma GCC diagnostic pop
  69. #endif
  70. #endif