commore  1.0.6-SNAPSHOT
All Classes Namespaces Functions Variables Typedefs Enumerations Pages
BaseList.h
1 //
2 // Copyright (c) 2006-2014 Raphael David / CANTOR
3 //
4 
5 
6 #ifndef CMR_BASE_LIST_INCLUDED
7 #define CMR_BASE_LIST_INCLUDED
8 
9 #include "Allocator.h"
10 
11 namespace commore
12 {
13  struct BaseListNode;
14  struct BaseListNodeRoot;
15 
21  class CMREXD BaseList
22  {
23  public:
24 
25  class iterator;
26  class const_iterator;
30  class CMREXD iterator
31  {
32  friend class BaseList;
33  friend class const_iterator;
34 
35  public:
36  iterator();
37  iterator(const iterator& original);
41  operator bool () const;
42 
46  bool more() const;
50  iterator& operator++();
54  iterator operator++(int);
58  iterator& operator--();
62  iterator operator--(int);
67  Byte* get_data() const;
72  Dummy& get_dummy() const;
76  bool operator==(const iterator& iter) const;
77  bool operator!=(const iterator& iter) const;
78 
79  protected:
80  iterator(BaseListNode* node, BaseList* cont);
81  BaseList& cont();
82 
83  protected:
84  BaseListNode* node_;
85  BaseList* cont_;
86  };
87  friend class iterator;
88 
92  class CMREXD const_iterator
93  {
94  friend class BaseList;
95  friend class iterator;
96 
97  public:
99  const_iterator(const iterator& original);
100  const_iterator(const const_iterator& original);
101 
105  operator bool () const;
106  public:
110  bool more() const;
114  const_iterator& operator++();
118  const_iterator operator++(int);
122  const_iterator& operator--();
126  const_iterator operator--(int);
130  bool operator==(const const_iterator& iter) const;
131  bool operator!=(const const_iterator& iter) const;
132 
133  protected:
134  const_iterator(const BaseListNode* node, const BaseList* cont);
135 
136  protected:
137  const Byte* get_data() const;
138  const Dummy& get_dummy() const;
139  const BaseList& cont() const;
140 
141  protected:
142  const BaseListNode* node_;
143  const BaseList* cont_;
144  };
145  friend class const_iterator;
146 
147 
148  public:
149  BaseList();
150  ~BaseList();
151  public:
152  iterator begin();
159  iterator end();
163  const_iterator begin() const;
167  const_iterator end() const;
172  const_iterator cbegin() const;
177  const_iterator cend() const;
178 
179  iterator insert(iterator pos, size_t size, FunctionConstructor c, const Byte* value = 0);
180  iterator insert(size_t pos, size_t size, FunctionConstructor c, const Byte* value = 0);
181  void insert(iterator pos, const_iterator first, const_iterator last, size_t size, FunctionConstructor c);
182  Byte* push_back_once(size_t size, FunctionConstructor ctor, FunctionComparator cmor, const Byte* value);
183  Byte* push_back(size_t size, FunctionConstructor ctor, const Byte* value = 0);
184  bool find(const Byte* value, FunctionComparator cmor) const;
185  bool find(FunctionFilter filter) const;
186  int compare(const BaseList& l, FunctionComparator cmor) const;
187  void assign(const_iterator first, const_iterator last, FunctionConstructor c, FunctionDestructor d, size_t size);
188 
189  BaseListNodeRoot* allocate_root_node_();
190  BaseListNode* allocate_node_(size_t size, FunctionConstructor c, const Byte* value = 0);
191  void deallocate_node_(BaseListNodeRoot* node);
192  void deallocate_node_(BaseListNode* node, FunctionDestructor d);
193  void init_root();
194  void clear(FunctionDestructor d);
195  iterator erase(iterator pos, FunctionDestructor d);
196  iterator erase(iterator first, iterator last, FunctionDestructor d);
197  iterator get_at(size_t i);
198  const_iterator get_at(size_t i) const;
199  bool remove_at(size_t i, FunctionDestructor d);
200  BaseList& swap(BaseList& original);
201  BaseList& splice(iterator pos, BaseList& original);
202  BaseList& splice(BaseList& original, FunctionDestructor d);
203  BaseList& splice(iterator pos, BaseList& original, iterator i);
204  BaseList& remove(const Byte* v, FunctionComparator cmor, FunctionDestructor d);
205  BaseList& merge(BaseList& original, FunctionComparator cmor);
206  BaseList& sort(FunctionComparator cmor);
207 
208  BaseList& unique(FunctionComparator cmor, FunctionDestructor d);
209  BaseList& remove_ptr(const Byte* v, FunctionDestructor d);
210  BaseList& remove_if(FunctionFilter filter, FunctionDestructor d);
211  BaseList& reverse();
212  size_t size() const
213  {
214  return length_;
215  }
216  bool empty() const
217  {
218  return length_ == 0;
219  }
220 
221  public:
222  static void move_before(iterator pos, iterator i);
223  static void move_after(iterator pos, iterator i);
224  static void transfer(iterator pos, iterator first, iterator last);
225 
226 
227  static int comparator_(const Byte* v1, const Byte* v2, size_t size);
228  static void constructor_(Byte* data, const Byte* value, size_t size);
229  static void destructor_(Byte* data);
230 
231  private:
232  BaseListNodeRoot* root_;
233  size_t length_;
234  };
235 }
236 
237 
238 #endif
Definition: BaseList.h:21
Definition: BaseList.h:92
unsigned char Byte
Definition: Type.h:64
void(* FunctionConstructor)(Byte *, const Byte *)
Definition: Allocator.h:88
Definition: BaseList.h:30