epoc32/include/stdapis/boost/ptr_container/ptr_vector.hpp
author William Roberts <williamr@symbian.org>
Tue, 16 Mar 2010 16:12:26 +0000
branchSymbian2
changeset 2 2fe1408b6811
permissions -rw-r--r--
Final list of Symbian^2 public API header files
     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