ossrv_pub/boost_apis/boost/ptr_container/ptr_vector.hpp
changeset 0 e4d67989cc36
equal deleted inserted replaced
-1:000000000000 0:e4d67989cc36
       
     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 
       
    12 #ifndef BOOST_PTR_CONTAINER_PTR_VECTOR_HPP
       
    13 #define BOOST_PTR_CONTAINER_PTR_VECTOR_HPP
       
    14 
       
    15 #if defined(_MSC_VER) && (_MSC_VER >= 1200)
       
    16 # pragma once
       
    17 #endif
       
    18 
       
    19 #include <vector>
       
    20 #include <boost/ptr_container/ptr_sequence_adapter.hpp>
       
    21 
       
    22 namespace boost
       
    23 {
       
    24 
       
    25     template
       
    26     < 
       
    27         class T, 
       
    28         class CloneAllocator = heap_clone_allocator,
       
    29         class Allocator      = std::allocator<void*>
       
    30     >
       
    31     class ptr_vector : public 
       
    32         ptr_sequence_adapter< T, 
       
    33                               std::vector<void*,Allocator>, 
       
    34                               CloneAllocator >
       
    35     {  
       
    36         typedef ptr_sequence_adapter< T, 
       
    37                                       std::vector<void*,Allocator>, 
       
    38                                       CloneAllocator > 
       
    39             base_class;
       
    40 
       
    41         typedef ptr_vector<T,CloneAllocator,Allocator> this_type;
       
    42         
       
    43     public:
       
    44 
       
    45         BOOST_PTR_CONTAINER_DEFINE_NON_INHERITED_MEMBERS( ptr_vector, 
       
    46                                                           base_class,
       
    47                                                           this_type );
       
    48 
       
    49         ptr_vector( size_type n,
       
    50                     const allocator_type& alloc = allocator_type() )
       
    51           : base_class(alloc)
       
    52         {
       
    53             this->c_private().reserve( n );
       
    54         }
       
    55 
       
    56     public: // serialization
       
    57 
       
    58         template< class Archive >
       
    59         void load( Archive& ar, unsigned )
       
    60         {
       
    61             size_type n;
       
    62             ar & n;
       
    63             
       
    64             this->reserve( n );
       
    65             this->load_helper( ar, n );
       
    66         }
       
    67   
       
    68         BOOST_SERIALIZATION_SPLIT_MEMBER()
       
    69         
       
    70     };
       
    71 
       
    72     //////////////////////////////////////////////////////////////////////////////
       
    73     // clonability
       
    74 
       
    75     template< typename T, typename CA, typename A >
       
    76     inline ptr_vector<T,CA,A>* new_clone( const ptr_vector<T,CA,A>& r )
       
    77     {
       
    78         return r.clone().release();
       
    79     }
       
    80 
       
    81     /////////////////////////////////////////////////////////////////////////
       
    82     // swap
       
    83 
       
    84     template< typename T, typename CA, typename A >
       
    85     inline void swap( ptr_vector<T,CA,A>& l, ptr_vector<T,CA,A>& r )
       
    86     {
       
    87         l.swap(r);
       
    88     }
       
    89     
       
    90 }
       
    91 
       
    92 #endif