- Info
1
6
7
13
14 #ifndef _INCLUDE__UTIL__LIST_H_
15 #define _INCLUDE__UTIL__LIST_H_
16
17 namespace Genode {
18
19
22 template <typename LT>
23 class List
24 {
25 private:
26
27 LT *_first;
28
29 public:
30
31 class Element
32 {
33 protected:
34
35 friend class List;
36
37 LT *_next;
38
39 public:
40
41 Element(): _next(0) { }
42
43
46 LT *next() const { return _next; }
47 };
48
49 public:
50
51
56 List(): _first(0) { }
57
58
61 LT *first() const { return _first; }
62
63
66 void insert(LT *le)
67 {
68 le->Element::_next = _first;
69 _first = le;
70 }
71
72
75 void remove(LT *le)
76 {
77 if (!_first) return;
78
79
80 if (le == _first)
81 _first = le->Element::_next;
82
83 else {
84
85
86 Element *e = _first;
87 while (e->_next && (e->_next != le))
88 e = e->_next;
89
90
91 if (!e->_next) return;
92
93
94 e->Element::_next = e->Element::_next->Element::_next;
95 }
96
97 le->Element::_next = 0;
98 }
99 };
100
101
102
113 template <typename T>
114 class List_element : public List<List_element<T> >::Element
115 {
116 T *_object;
117
118 public:
119
120 List_element(T *object) : _object(object) { }
121
122 T *object() { return _object; }
123 };
124 }
125
126 #endif