#ifndef __FTList__ #define __FTList__ #include "FTGL.h" /** * Provides a non-STL alternative to the STL list */ template 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(nullptr) { tail = nullptr; 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 == nullptr) { 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(nullptr) {} Node( const value_type& item) : next(nullptr) { payload = item; } Node* next; value_type payload; }; size_type listSize; Node* head; Node* tail; }; #endif // __FTList__