1 // ptr_list.hpp
2 // Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
3 //
4 // Distributed under the Boost Software License, Version 1.0. (See accompanying
5 // file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 #ifndef BOOST_LEXER_PTR_LIST_HPP
7 #define BOOST_LEXER_PTR_LIST_HPP
8 
9 #include <list>
10 
11 namespace boost
12 {
13 namespace lexer
14 {
15 namespace detail
16 {
17 template<typename Type>
18 class ptr_list
19 {
20 public:
21     typedef std::list<Type *> list;
22 
ptr_list()23     ptr_list ()
24     {
25     }
26 
~ptr_list()27     ~ptr_list ()
28     {
29         clear ();
30     }
31 
operator ->()32     list *operator -> ()
33     {
34         return &_list;
35     }
36 
operator ->() const37     const list *operator -> () const
38     {
39         return &_list;
40     }
41 
operator *()42     list &operator * ()
43     {
44         return _list;
45     }
46 
operator *() const47     const list &operator * () const
48     {
49         return _list;
50     }
51 
clear()52     void clear ()
53     {
54         while (!_list.empty ())
55         {
56             delete _list.front ();
57             _list.pop_front ();
58         }
59     }
60 
61 private:
62     list _list;
63 
64     ptr_list (const ptr_list &); // No copy construction.
65     ptr_list &operator = (const ptr_list &); // No assignment.
66 };
67 }
68 }
69 }
70 
71 #endif
72