source: NonGTP/Boost/boost/ptr_container/ptr_list.hpp @ 857

Revision 857, 2.7 KB checked in by igarcia, 18 years ago (diff)
Line 
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
22namespace 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
Note: See TracBrowser for help on using the repository browser.