113 lines
2.1 KiB
C++
113 lines
2.1 KiB
C++
#ifndef __FTList__
|
|
#define __FTList__
|
|
|
|
#include "FTGL.h"
|
|
|
|
/**
|
|
* Provides a non-STL alternative to the STL list
|
|
*/
|
|
template <typename FT_LIST_ITEM_TYPE>
|
|
class FTGL_EXPORT FTList
|
|
{
|
|
public:
|
|
typedef FT_LIST_ITEM_TYPE value_type;
|
|
typedef value_type& reference;
|
|
typedef const value_type& const_reference;
|
|
typedef size_t size_type;
|
|
|
|
/**
|
|
* Constructor
|
|
*/
|
|
FTList()
|
|
: listSize(0),
|
|
tail(0)
|
|
{
|
|
tail = NULL;
|
|
head = new Node;
|
|
}
|
|
|
|
/**
|
|
* Destructor
|
|
*/
|
|
~FTList()
|
|
{
|
|
Node* next;
|
|
|
|
for( Node *walk = head; walk; walk = next)
|
|
{
|
|
next = walk->next;
|
|
delete walk;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get the number of items in the list
|
|
*/
|
|
size_type size() const
|
|
{
|
|
return listSize;
|
|
}
|
|
|
|
/**
|
|
* Add an item to the end of the list
|
|
*/
|
|
void push_back( const value_type& item)
|
|
{
|
|
Node* node = new Node( item);
|
|
|
|
if( head->next == NULL)
|
|
{
|
|
head->next = node;
|
|
}
|
|
|
|
if( tail)
|
|
{
|
|
tail->next = node;
|
|
}
|
|
tail = node;
|
|
++listSize;
|
|
}
|
|
|
|
/**
|
|
* Get the item at the front of the list
|
|
*/
|
|
reference front() const
|
|
{
|
|
return head->next->payload;
|
|
}
|
|
|
|
/**
|
|
* Get the item at the end of the list
|
|
*/
|
|
reference back() const
|
|
{
|
|
return tail->payload;
|
|
}
|
|
|
|
private:
|
|
struct Node
|
|
{
|
|
Node()
|
|
: next(NULL)
|
|
{}
|
|
|
|
Node( const value_type& item)
|
|
: next(NULL)
|
|
{
|
|
payload = item;
|
|
}
|
|
|
|
Node* next;
|
|
|
|
value_type payload;
|
|
};
|
|
|
|
size_type listSize;
|
|
|
|
Node* head;
|
|
Node* tail;
|
|
};
|
|
|
|
#endif // __FTList__
|
|
|