BDS Public
Beam-lib  2.16.3
This is the Beam C++ class library.
BList.h
Go to the documentation of this file.
1 /*******************************************************************************
2  * BList.h BEAM List
3  * T.Barnaby, BEAM Ltd, 4/8/00
4  * Copyright (c) 2012 All Right Reserved, Beam Ltd, http://www.beam.ltd.uk
5  *******************************************************************************
6  */
7 #ifndef BLIST_H
8 #define BLIST_H 1
9 
10 class BNode {
11 public:
12  BNode() : next(0), prev(0){}
15 };
16 
18 class BIter {
19 public:
20  BIter(BNode* i = 0) { oi = i; }
21  operator BNode* () { return oi; }
22  int operator==(const BIter& i) { return (i.oi == oi); }
23  int valid() { return (oi != 0); }
24 private:
25  BNode* oi;
26 };
27 
28 
30 template <class T> class BList {
31 public:
32  class Node : public BNode {
33  public:
34  Node(const T& i) : item(i){}
35  T item;
36  };
37  typedef int (*SortFunc)(T& a, T& b);
38 
39  // Contructors
40  BList();
41  BList(const BList<T>& l);
42  virtual ~BList();
43 
44  // Navigation
45  void start(BIter& i) const;
46  BIter begin() const;
47  BIter end() const;
48  BIter end(BIter& i) const;
49  void next(BIter& i) const;
50  void prev(BIter& i);
51  BIter goTo(int pos) const;
52  int position(BIter i);
53 
54  // Information
55  unsigned int number() const;
56  unsigned int size() const;
57  int isStart(BIter& i) const;
58  int isEnd(BIter& i) const;
59 
60  // Get items
61  T& front();
62  T& rear();
63  T& get(BIter i);
64  const T& get(BIter i) const;
65 
66  // Insert items
67  void append(const T& item);
68  virtual void insert(BIter& i, const T& item);
69  void insertAfter(BIter& i, const T& item);
70 
71  // Delete items
72  virtual void clear();
73  virtual void del(BIter& i);
74  void deleteLast();
75  void deleteFirst();
76 
77  // Stack
78  void push(const T& i);
79  T pop();
80 
81  // Queue
82  void queueAdd(const T& i);
83  T queueGet();
84 
85  // Misc
86  void append(const BList<T>& l);
87  int has(const T& i) const;
88  void swap(BIter i1, BIter i2);
89  void sort();
90  void sort(SortFunc func);
91 
92  // Operator functions
93  BList<T>& operator=(const BList<T>& l);
94  T& operator[](int i);
95  const T& operator[](int i) const;
96  T& operator[](BIter i);
97  const T& operator[](const BIter& i) const;
98  BList<T> operator+(const BList<T>& l) const;
99 protected:
100  virtual Node* nodeGet(BIter i);
101  virtual const Node* nodeGet(BIter i) const;
102  virtual Node* nodeCreate(const T& item);
103  Node* onodes;
104  unsigned int olength;
105 private:
106  virtual Node* nodeCreate();
107 };
108 
109 #include <BList_func.h>
110 
111 // Macros
112 #define BListLoop(list, i) for(BIter i = list.begin(); !list.isEnd(i); list.next(i))
113 
114 #endif
void queueAdd(const T &i)
Add item to end of list.
Definition: BList_func.h:184
BList< T > operator+(const BList< T > &l) const
Definition: BList_func.h:335
BNode()
Definition: BList.h:12
void prev(BIter &i)
Iterator for previous item in list.
Definition: BList_func.h:57
int operator==(const BIter &i)
Definition: BList.h:22
void sort()
Sort list based on get(i) values.
Definition: BList_func.h:252
T & rear()
Get last item in list.
Definition: BList_func.h:115
Iterator for BList.
Definition: BList.h:18
virtual void insert(BIter &i, const T &item)
Insert item before item.
Definition: BList_func.h:133
BNode * prev
Definition: BList.h:14
virtual void clear()
Clear the list.
Definition: BList_func.h:104
Template based list class.
Definition: BList.h:30
int isEnd(BIter &i) const
True if iterator refers to last item.
Definition: BList_func.h:98
T pop()
Pop item from list deleteing item.
Definition: BList_func.h:177
BIter end() const
Iterator for end of list.
Definition: BList_func.h:40
BIter goTo(int pos) const
Iterator for pos item in list.
Definition: BList_func.h:65
int valid()
Definition: BList.h:23
Node(const T &i)
Definition: BList.h:34
void deleteFirst()
Delete fisrt item.
Definition: BList_func.h:168
BIter(BNode *i=0)
Definition: BList.h:20
int isStart(BIter &i) const
True if iterator refers to first item.
Definition: BList_func.h:92
BList< T > & operator=(const BList< T > &l)
Definition: BList_func.h:322
void insertAfter(BIter &i, const T &item)
Insert item after item.
Definition: BList_func.h:145
unsigned int size() const
Number of items in list.
Definition: BList_func.h:88
Definition: BList.h:32
BIter begin() const
Iterator for start of list.
Definition: BList_func.h:36
void next(BIter &i) const
Iterator for next item in list.
Definition: BList_func.h:49
Node * onodes
Definition: BList.h:103
unsigned int number() const
Number of items in list.
Definition: BList_func.h:84
virtual Node * nodeGet(BIter i)
Definition: BList_func.h:345
BList()
Definition: BList_func.h:12
T & operator[](int i)
Definition: BList_func.h:298
void start(BIter &i) const
Iterator to start of list.
Definition: BList_func.h:32
void push(const T &i)
Push item onto list.
Definition: BList_func.h:173
void append(const T &item)
Append item to list.
Definition: BList_func.h:127
BNode * next
Definition: BList.h:13
virtual ~BList()
Definition: BList_func.h:27
T & get(BIter i)
Get item specified by iterator in list.
Definition: BList_func.h:119
int(* SortFunc)(T &a, T &b)
Prototype for sorting function.
Definition: BList.h:37
T item
Definition: BList.h:35
T queueGet()
Get item from front of list deleteing item.
Definition: BList_func.h:188
T & front()
Get first item in list.
Definition: BList_func.h:111
virtual void del(BIter &i)
Delete specified item.
Definition: BList_func.h:150
Definition: BList.h:10
void deleteLast()
Delete last item.
Definition: BList_func.h:162
int position(BIter i)
Postition in list item with iterator i.
Definition: BList_func.h:73
void swap(BIter i1, BIter i2)
Swap two items in list.
Definition: BList_func.h:213
int has(const T &i) const
Checks if the item is in the list.
Definition: BList_func.h:203
unsigned int olength
Definition: BList.h:104