epoc32/include/stdapis/boost/ptr_container/ptr_list.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_LIST_HPP
    13 #define BOOST_PTR_CONTAINER_PTR_LIST_HPP
    14 
    15 #if defined(_MSC_VER) && (_MSC_VER >= 1200)
    16 # pragma once
    17 #endif
    18 
    19 #include <boost/ptr_container/ptr_sequence_adapter.hpp>
    20 #include <list>
    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_list : public 
    32         ptr_sequence_adapter< T, 
    33                               std::list<void*,Allocator>, 
    34                               CloneAllocator >
    35     {
    36         typedef    ptr_sequence_adapter< T, 
    37                                          std::list<void*,Allocator>, 
    38                                          CloneAllocator >
    39             base_class;
    40 
    41         typedef ptr_list<T,CloneAllocator,Allocator> this_type;
    42         
    43     public:
    44         BOOST_PTR_CONTAINER_DEFINE_NON_INHERITED_MEMBERS( ptr_list, 
    45                                                           base_class,
    46                                                           this_type );
    47         
    48     public:
    49         using base_class::merge;
    50         
    51         void merge( ptr_list& x )                                 
    52         {
    53             merge( x, std::less<T>() );
    54         }
    55 
    56         template< typename Compare > 
    57         void merge( ptr_list& x, Compare comp )                   
    58         {
    59             this->c_private().merge( x.c_private(), void_ptr_indirect_fun<Compare,T>( comp ) );
    60         }
    61 
    62         void sort()                                                    
    63         { 
    64             sort( std::less<T>() ); 
    65         };
    66 
    67         template< typename Compare > 
    68         void sort( Compare comp )                             
    69         {
    70             this->c_private().sort( void_ptr_indirect_fun<Compare,T>( comp ) );
    71         }
    72 
    73     }; // class 'ptr_list'
    74 
    75     //////////////////////////////////////////////////////////////////////////////
    76     // clonability
    77 
    78     template< typename T, typename CA, typename A >
    79     inline ptr_list<T,CA,A>* new_clone( const ptr_list<T,CA,A>& r )
    80     {
    81         return r.clone().release();
    82     }
    83     
    84     /////////////////////////////////////////////////////////////////////////
    85     // swap
    86 
    87     template< typename T, typename CA, typename A >
    88     inline void swap( ptr_list<T,CA,A>& l, ptr_list<T,CA,A>& r )
    89     {
    90         l.swap(r);
    91     }
    92 }
    93 
    94 
    95 #endif