| 37 #include <initializer_list> |
37 #include <initializer_list> |
| 38 |
38 |
| 39 template<class T> class list |
39 template<class T> class list |
| 40 { |
40 { |
| 41 public: |
41 public: |
| 42 typedef typename ::std::deque<T> list_type; |
42 using list_type = typename ::std::deque<T>; |
| 43 typedef typename list_type::iterator it; |
43 using iterator = typename list_type::iterator; |
| 44 typedef typename list_type::const_iterator c_it; |
44 using const_iterator = typename list_type::const_iterator; |
| 45 typedef typename list_type::reverse_iterator r_it; |
45 using reverse_iterator = typename list_type::reverse_iterator; |
| 46 typedef typename list_type::const_reverse_iterator cr_it; |
46 using const_reverse_iterator = typename list_type::const_reverse_iterator; |
| 47 typedef T element_type; |
47 using element_type = T; |
| 48 typedef list<T> self_type; |
48 using self_type = list<T>; |
| 49 |
49 |
| 50 // ===================================================================== |
50 // ===================================================================== |
| 51 // |
51 // |
| 52 list() {} |
52 list() {} |
| 53 |
53 |
| 63 list (const list_type& a) : |
63 list (const list_type& a) : |
| 64 m_data (a) {} |
64 m_data (a) {} |
| 65 |
65 |
| 66 // ===================================================================== |
66 // ===================================================================== |
| 67 // |
67 // |
| 68 it begin() |
68 iterator begin() |
| 69 { |
69 { |
| 70 return m_data.begin(); |
70 return m_data.begin(); |
| 71 } |
71 } |
| 72 |
72 |
| 73 // ===================================================================== |
73 // ===================================================================== |
| 74 // |
74 // |
| 75 c_it begin() const |
75 const_iterator begin() const |
| 76 { |
76 { |
| 77 return m_data.cbegin(); |
77 return m_data.cbegin(); |
| 78 } |
78 } |
| 79 |
79 |
| 80 // ===================================================================== |
80 // ===================================================================== |
| 81 // |
81 // |
| 82 it end() |
82 iterator end() |
| 83 { |
83 { |
| 84 return m_data.end(); |
84 return m_data.end(); |
| 85 } |
85 } |
| 86 |
86 |
| 87 // ===================================================================== |
87 // ===================================================================== |
| 88 // |
88 // |
| 89 c_it end() const |
89 const_iterator end() const |
| 90 { |
90 { |
| 91 return m_data.cend(); |
91 return m_data.cend(); |
| 92 } |
92 } |
| 93 |
93 |
| 94 // ===================================================================== |
94 // ===================================================================== |
| 95 // |
95 // |
| 96 r_it rbegin() |
96 reverse_iterator rbegin() |
| 97 { |
97 { |
| 98 return m_data.rbegin(); |
98 return m_data.rbegin(); |
| 99 } |
99 } |
| 100 |
100 |
| 101 // ===================================================================== |
101 // ===================================================================== |
| 102 // |
102 // |
| 103 cr_it crbegin() const |
103 const_reverse_iterator crbegin() const |
| 104 { |
104 { |
| 105 return m_data.crbegin(); |
105 return m_data.crbegin(); |
| 106 } |
106 } |
| 107 |
107 |
| 108 // ===================================================================== |
108 // ===================================================================== |
| 109 // |
109 // |
| 110 r_it rend() |
110 reverse_iterator rend() |
| 111 { |
111 { |
| 112 return m_data.rend(); |
112 return m_data.rend(); |
| 113 } |
113 } |
| 114 |
114 |
| 115 // ===================================================================== |
115 // ===================================================================== |
| 116 // |
116 // |
| 117 cr_it crend() const |
117 const_reverse_iterator crend() const |
| 118 { |
118 { |
| 119 return m_data.crend(); |
119 return m_data.crend(); |
| 120 } |
120 } |
| 121 |
121 |
| 122 // ===================================================================== |
122 // ===================================================================== |
| 215 void makeUnique() |
215 void makeUnique() |
| 216 { |
216 { |
| 217 // Remove duplicate entries. For this to be effective, the vector must be |
217 // Remove duplicate entries. For this to be effective, the vector must be |
| 218 // sorted first. |
218 // sorted first. |
| 219 sort(); |
219 sort(); |
| 220 it pos = std::unique (begin(), end()); |
220 iterator pos = std::unique (begin(), end()); |
| 221 resize (std::distance (begin(), pos)); |
221 resize (std::distance (begin(), pos)); |
| 222 } |
222 } |
| 223 |
223 |
| 224 // ===================================================================== |
224 // ===================================================================== |
| 225 // |
225 // |