/* * Copyright (C) 2000-2001 Marc Wandschneider * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation. * * For more information look at the file COPYRIGHT in this package * */ #ifndef _LLIST_H_ #ifndef _SANITY_H_ #error did you forget to include sanity.h at the beginning of your file? #endif /** * This is a C++ template for a list class that we'll use for holding various * things. This will be a list based version, in which addition is very fast * (to the front of the list), but removals are O(n). * * Please note that in the case of refcounted objects, this class does NOT * add a reference to it. It merely holds on it to it, and assumes the * lifetime is valid for it's entire lifetime. * * Please also note that no efforts are made to filter or check for * duplicates. * * This class is not thread-safe. */ /** * This is a helper class for the linked list. */ template class LLNode { public: /** * The item to store. */ Type item; /** * Pointer to the next item in the list. */ LLNode *next; }; /** * This is the actual linked list class. */ template class LinkList { public: LinkList(); LinkList(LinkList &); ~LinkList(); void operator=(LinkList &); /** * Adds the given item to the linked list. */ ERRCODE addElement(Type); /** * Counts the number of elements in the list. */ int countElements(); /** * gets the element at the given index. */ ERRCODE elementAt(int, Type *); /** * empties out the list. Note that any elements themselves are not * touched. */ void emptyList(); /** * returns the first element in the list and resets the iterator. */ ERRCODE firstElement(Type *); /** * Returns the next element in the iterator list, or S_EOF if there * are no more. */ ERRCODE nextElement(Type *); /** * Removes the given item from the linked list. */ ERRCODE removeElement(Type); /** * indicates whether the list is empty or not. */ bool isEmpty() { return front == NULL; } private: LLNode *front, *end; LLNode *last; // used for iteration. /** * Private method to copy over the list. */ void copyList(LinkList &source); }; /** * This is a template class, so we have to include the code here too. It * would be a very good idea to use -fno-implicit-templates to help save * on code size */ //#include #define _LLIST_H_ #endif // _LLIST_H_