libsaria: Create iterators for lists
Not really C++ iterators, but close enough. I can get the first and last values values to use in for loops, I also made a next() function for list items. Signed-off-by: Bryan Schumaker <bjschuma@gmail.com>
This commit is contained in:
parent
743caa85e6
commit
e2242359d4
|
@ -21,6 +21,7 @@ namespace libsaria
|
|||
ListItem(T, List<T> *);
|
||||
~ListItem();
|
||||
T &get_value();
|
||||
ListItem<T> *get_next();
|
||||
};
|
||||
|
||||
template <class T>
|
||||
|
@ -38,6 +39,9 @@ namespace libsaria
|
|||
void erase(ListItem<T> *);
|
||||
unsigned int size();
|
||||
|
||||
ListItem<T> *first();
|
||||
ListItem<T> *last();
|
||||
|
||||
void for_each_item(void (*)(T &, void *), void *);
|
||||
ListItem<T> *find_item(bool (*)(T &, void *), void *);
|
||||
};
|
||||
|
|
|
@ -69,24 +69,32 @@ namespace libsaria
|
|||
return count;
|
||||
}
|
||||
|
||||
template <class T>
|
||||
ListItem<T> *List<T>::first()
|
||||
{
|
||||
return head.next;
|
||||
}
|
||||
|
||||
template <class T>
|
||||
ListItem<T> *List<T>::last()
|
||||
{
|
||||
return &head;
|
||||
}
|
||||
|
||||
template <class T>
|
||||
void List<T>::for_each_item(void (*func)(T &, void *), void *data)
|
||||
{
|
||||
ListItem<T> *item = head.next;
|
||||
while (item != &head) {
|
||||
func(item->value, data);
|
||||
item = item->next;
|
||||
}
|
||||
for (ListItem<T> *it = first(); it != last(); it = it->get_next())
|
||||
func(it->value, data);
|
||||
}
|
||||
|
||||
template <class T>
|
||||
ListItem<T> *List<T>::find_item(bool (*func)(T &, void *), void *data)
|
||||
{
|
||||
ListItem<T> *item = head.next;
|
||||
while (item != &head) {
|
||||
if (func(item->value, data))
|
||||
ListItem<T> *it;
|
||||
for (it = first(); it != last; it = it->get_next()) {
|
||||
if (func(it->value, data))
|
||||
return item;
|
||||
item = item->next;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -33,6 +33,12 @@ namespace libsaria
|
|||
return value;
|
||||
}
|
||||
|
||||
template <class T>
|
||||
ListItem<T> *ListItem<T>::get_next()
|
||||
{
|
||||
return next;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endif /* LIBSARIA_NODE_CPP */
|
||||
|
|
Loading…
Reference in New Issue