#ifndef LIST_H #define LIST_H /** The basic List class ADT. This, on it's own, does absolutely nothing, but * does define all standard interface functions to access a list. *@author Mike Buland */ class List { public: /** * Construct a list. */ List(); /** * Desconstruct a list. */ virtual ~List(); /** Gets the value at a specified index. *@param nIndex The index of the item to return. *@returns The specified item, or NULL if the index was beyond the range * of the list. *@author Mike Buland */ virtual void *getAt( int nIndex ) = 0; /** Append the given data to the end of the list. This increases the * size of the list by one. *@param pData The data to append to the list. *@author Mike Buland */ virtual void append( void *pData ) = 0; /** Inserts an item at the specified position in the list. The * new item takes the index that you specify, and all other items * are moved up one position. The size of the list is increased by * one. *@param pData The value to insert into the list. *@param nPos Where to insert the data into the list. *@author Mike Buland */ virtual void insertBefore( void *pData, int nPos = 0 ) = 0; /** Determines the size of the list, in elements. *@returns The size of the list. *@author Mike Buland */ virtual int getSize( ) = 0; /** Determines if the list is empty or not. *@returns True if the list is empty, or false if the list has * data in it (if the size is greater than zero). *@author Mike Buland */ virtual bool isEmpty( ) = 0; /** Deletes an item at the specified index and moves all other * values down one index. The size of the list is decreased by one. *@param nIndex The index of the item to delete. *@author Mike Buland */ virtual void deleteAt( int nIndex ) = 0; /** Completely empties the list, and sets the effective size to * zero. *@author Mike Buland */ virtual void empty() = 0; /** Sets the size of the list. This can be larger or smaller * than what it was previously. If larger, new blank items will * be added to the end of the list. If smaller than the old list * items will be deleted from the end. *@param nNewSize The new size of the list. *@author Mike Buland */ virtual void setSize( int nNewSize ) = 0; /** Sets a member at a specified location to a new value. * If the member being set is outside of the range of the * current list it should be expanded. *@param nIndex The zero-based index of the item to change. *@param pData The new value for that index. *@author Mike Buland */ virtual void setAt( int nIndex, void *pData ) = 0; /** Makes the List work like an array. Just say listObj[2] to get * the third element. *@param nIndex The index to access in the list. *@returns A pointer to the data at element index. *@author Mike Buland */ void *operator[]( int nIndex ) { return getAt( nIndex ); }; }; #endif