#ifndef list_h #define list_h #define inline __forceinline template class ListNode { ListNode *next; element_type *element; }; template class List { class ListNode { public: ListNode *next; element_type *element; inline ListNode() { next = NULL; element = NULL; } }; ListNode *topnode; int num_elements; bool killem; // should we delete the element if a node is removed public: inline List() { topnode = new ListNode(); num_elements = 0; killem = false; } inline List(bool killem) { topnode = new ListNode(); num_elements = 0; this->killem = killem; } inline ~List() { ListNode *node; while (topnode) { if (killem) delete topnode->element; node = topnode; topnode = topnode->next; delete node; } } inline int count() { return num_elements; } inline void add (element_type *element) { ListNode *list; list = topnode; while (list->next) list = list->next; list->next = new ListNode(); list->element = element; num_elements++; } inline element_type *operator[](const int index) { return get(index); } inline element_type *get (int index) { ListNode *list = topnode; for (int i = index;i>0;i--) { if (!(list = list->next)) return NULL; } return list->element; } inline List clone() { List *list = new List(killem); for (int i=0;iget(i)); return list; } }; #endif