commore  1.0.6-SNAPSHOT
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
BaseList.h
Go to the documentation of this file.
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 
22  {
23  public:
24 
25  class iterator;
26  class const_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:
86  };
87  friend class iterator;
88 
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:
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;
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);
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 
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: Time.h:246
Definition: BaseList.h:21
BaseList * cont_
Definition: BaseList.h:85
void swap(C &c1, C &c2)
Definition: Commore.h:29
int(* FunctionComparator)(const Dummy &, const Dummy &)
Definition: Allocator.h:89
size_t size() const
Definition: BaseList.h:212
Definition: BaseList.cpp:16
Definition: BaseList.cpp:22
#define CMREXD
Definition: Compiler.h:22
Definition: Time.h:244
BaseListNode * node_
Definition: BaseList.h:84
bool operator==(const pair< T1, T2 > &x, const pair< T1, T2 > &y)
Definition: HMap.h:148
Definition: BaseList.h:92
const BaseListNode * node_
Definition: BaseList.h:142
unsigned char Byte
Definition: Type.h:64
void(* FunctionDestructor)(Byte *)
Definition: Allocator.h:90
void(* FunctionConstructor)(Byte *, const Byte *)
Definition: Allocator.h:88
bool empty() const
Definition: BaseList.h:216
Definition: BaseList.h:30
bool(* FunctionFilter)(const Long &)
Definition: Allocator.h:91
const BaseList * cont_
Definition: BaseList.h:143