#ifndef LIBSARIA_LIST_H #define LIBSARIA_LIST_H namespace libsaria { template class List; template class ListItem { friend class List; private: ListItem *prev_item; ListItem *next_item; List *list; T value; public: ListItem(); ListItem(T, List *, ListItem *, ListItem *); ~ListItem(); T &get_value(); ListItem *next(); }; template class List { private: unsigned int count; ListItem head; public: List(); List(const List &); ~List(); ListItem *push_front(T); ListItem *push_back(T); T pop_front(); ListItem *erase(ListItem *); unsigned int size(); ListItem *first(); ListItem *end(); void for_each_item(void (*)(T &, void *), void *); ListItem *find_item(bool (*)(T &, void *), void *); }; }; #include "../libsaria/list/node.cpp" #include "../libsaria/list/list.cpp" #endif /* LIBSARIA_LIST_H */