Beamlib  3.0.1
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) 2022 All Right Reserved, Beam Ltd, https://www.beam.ltd.uk
5  * For license see LICENSE.txt at the root of the beamlib source tree.
6  *******************************************************************************
7  */
8 #ifndef BLIST_H
9 #define BLIST_H 1
10 
12 class BNode {
13 public:
14  BNode() : next(0), prev(0){}
17 };
18 
20 class BIter {
21 public:
22  BIter(BNode* i = 0) { oi = i; }
23  operator BNode* () { return oi; }
24  int operator==(const BIter& i) { return (i.oi == oi); }
25  int valid() { return (oi != 0); }
26 private:
27  BNode* oi;
28 };
29 
31 template <class T> class BList {
32 public:
34  class Node : public BNode {
35  public:
36  Node(const T& i) : item(i){}
37  T item;
38  };
39  typedef int (*SortFunc)(T& a, T& b);
40 
41  // Contructors
42  BList();
43  BList(const BList<T>& l);
44  virtual ~BList();
45 
46  // Navigation
47  void start(BIter& i) const;
48  BIter begin() const;
49  BIter end() const;
50  BIter end(BIter& i) const;
51  void next(BIter& i) const;
52  void prev(BIter& i);
53  BIter goTo(int pos) const;
54  int position(BIter i);
55 
56  // Information
57  unsigned int number() const;
58  unsigned int size() const;
59  int isStart(BIter& i) const;
60  int isEnd(BIter& i) const;
61 
62  // Get items
63  T& front();
64  T& rear();
65  T& get(BIter i);
66  const T& get(BIter i) const;
67 
68  // Insert items
69  void append(const T& item);
70  virtual void insert(BIter& i, const T& item);
71  void insertAfter(BIter& i, const T& item);
72 
73  // Delete items
74  virtual void clear();
75  virtual void del(BIter& i);
76  void deleteLast();
77  void deleteFirst();
78 
79  // Stack
80  void push(const T& i);
81  T pop();
82 
83  // Queue
84  void queueAdd(const T& i);
85  T queueGet();
86 
87  // Misc
88  void append(const BList<T>& l);
89  int has(const T& i) const;
90  void swap(BIter i1, BIter i2);
91  void sort();
92  void sort(SortFunc func);
93 
94  // Operator functions
95  BList<T>& operator=(const BList<T>& l);
96  T& operator[](int i);
97  const T& operator[](int i) const;
98  T& operator[](BIter i);
99  const T& operator[](const BIter& i) const;
100  BList<T> operator+(const BList<T>& l) const;
101 
102 protected:
103  virtual Node* nodeGet(BIter i);
104  virtual const Node* nodeGet(BIter i) const;
105  virtual Node* nodeCreate(const T& item);
107  unsigned int olength;
108 
109 private:
110  virtual Node* nodeCreate();
111 };
112 
113 #include <BList_func.h>
114 
115 // Macros
116 #define BListLoop(list, i) for(BIter i = list.begin(); !list.isEnd(i); list.next(i))
117 
118 #endif
Iterator for BLists.
Definition: BList.h:20
int operator==(const BIter &i)
Definition: BList.h:24
int valid()
Definition: BList.h:25
BIter(BNode *i=0)
Definition: BList.h:22
A BList internal Node.
Definition: BList.h:34
T item
Definition: BList.h:37
Node(const T &i)
Definition: BList.h:36
Template based list class.
Definition: BList.h:31
void next(BIter &i) const
Iterator for next item in list.
Definition: BList_func.h:60
BIter goTo(int pos) const
Iterator for pos item in list.
Definition: BList_func.h:76
int(* SortFunc)(T &a, T &b)
Prototype for sorting function.
Definition: BList.h:39
virtual void del(BIter &i)
Delete specified item.
Definition: BList_func.h:161
T & front()
Get first item in list.
Definition: BList_func.h:122
int has(const T &i) const
Checks if the item is in the list.
Definition: BList_func.h:214
BList< T > operator+(const BList< T > &l) const
Definition: BList_func.h:346
unsigned int size() const
Number of items in list.
Definition: BList_func.h:99
void deleteFirst()
Delete fisrt item.
Definition: BList_func.h:179
virtual Node * nodeCreate(const T &item)
Definition: BList_func.h:364
BList()
Definition: BList_func.h:23
void push(const T &i)
Push item onto list.
Definition: BList_func.h:184
T & rear()
Get last item in list.
Definition: BList_func.h:126
void sort()
Sort list based on get(i) values.
Definition: BList_func.h:263
int isEnd(BIter &i) const
True if iterator refers to last item.
Definition: BList_func.h:109
int position(BIter i)
Postition in list item with iterator i.
Definition: BList_func.h:84
void append(const T &item)
Append item to list.
Definition: BList_func.h:138
virtual void insert(BIter &i, const T &item)
Insert item before item.
Definition: BList_func.h:144
virtual Node * nodeGet(BIter i)
Definition: BList_func.h:356
int isStart(BIter &i) const
True if iterator refers to first item.
Definition: BList_func.h:103
T & get(BIter i)
Get item specified by iterator in list.
Definition: BList_func.h:130
BList< T > & operator=(const BList< T > &l)
Definition: BList_func.h:333
void prev(BIter &i)
Iterator for previous item in list.
Definition: BList_func.h:68
virtual void clear()
Clear the list.
Definition: BList_func.h:115
BIter begin() const
Iterator for start of list.
Definition: BList_func.h:47
T & operator[](int i)
Definition: BList_func.h:309
T pop()
Pop item from list deleteing item.
Definition: BList_func.h:188
void start(BIter &i) const
Iterator to start of list.
Definition: BList_func.h:43
void swap(BIter i1, BIter i2)
Swap two items in list.
Definition: BList_func.h:224
unsigned int olength
Definition: BList.h:107
BIter end() const
Iterator for end of list.
Definition: BList_func.h:51
virtual ~BList()
Definition: BList_func.h:38
void insertAfter(BIter &i, const T &item)
Insert item after item.
Definition: BList_func.h:156
unsigned int number() const
Number of items in list.
Definition: BList_func.h:95
Node * onodes
Definition: BList.h:106
void deleteLast()
Delete last item.
Definition: BList_func.h:173
void queueAdd(const T &i)
Add item to end of list.
Definition: BList_func.h:195
T queueGet()
Get item from front of list deleteing item.
Definition: BList_func.h:199
A BList entry's node.
Definition: BList.h:12
BNode * next
Definition: BList.h:15
BNode()
Definition: BList.h:14
BNode * prev
Definition: BList.h:16