BDS Public
Beamlib 3.3.4
This is the Beam C++ class library.
Loading...
Searching...
No Matches
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
12class BNode {
13public:
14 BNode() : next(0), prev(0){}
17};
18
20class BIter {
21public:
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); }
26private:
27 BNode* oi;
28};
29
31template <class T> class BList {
32public:
34 class Node : public BNode {
35 public:
36 Node(const T& i) : item(i){}
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
102protected:
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
109private:
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