#include "entitybank.h" EntityBank::EntityBank() { m_first = NULL; m_last = NULL; m_current = NULL; m_NumOfEntities = 0; } EntityBank::~EntityBank() { } int EntityBank::AddToEntityList( void* entity, EntityType entType ) { EntityNode* entNode = new EntityNode(); entNode->m_entity = entity; entNode->m_entType = entType; entNode->m_previous = NULL; entNode->m_next = NULL; if( m_first == NULL ) { m_first = entNode; m_last = m_first; m_NumOfEntities++; return 1; } else { // Link last node to new node m_last->m_next = entNode; entNode->m_previous = m_last; // Swap last node wtih new node m_last = entNode; m_NumOfEntities++; return 1; } return 0; } int EntityBank::RemoveEntity( void* entity ) { if( m_first->m_entity == entity ) { m_first = m_first->m_next; m_first->m_previous = NULL; // delete m_first->m_previous; m_NumOfEntities--; return 1; } if( m_last->m_entity == entity ) { m_last = m_last->m_previous; m_last->m_next = NULL; // delete m_last->m_next; m_NumOfEntities--; return 1; } EntityNode* counter = m_first; while( counter != NULL ) { if( counter->m_entity == entity ) { EntityNode* tempPtr = counter->m_previous; // Link previous pointer to next, and next to previous tempPtr->m_next = counter->m_next; tempPtr->m_next->m_previous = tempPtr; // delete counter; m_NumOfEntities--; return 1; } counter = counter->m_next; } return 0; } int EntityBank::RemoveAllOfType( EntityType entType ) { ResetCurrent(); void* entity = GetEntityOfType( entType ); while( entity != NULL ) { RemoveEntity( entity ); entity = GetEntityOfType( entType ); } return 1; } EntityNode* EntityBank::GetNextEntity( void ) { if( m_current == NULL ) { return NULL; } m_current = m_current->m_next; return m_current; } EntityNode* EntityBank::GetAt( int index ) { EntityNode* iterator = m_first; for( int i = 0; i < m_NumOfEntities; i++ ) { if( i == index ) { return iterator; } iterator = iterator->m_next; } return NULL; } void EntityBank::ResetCurrent( void ) { m_current = m_first; } int EntityBank::GetNumOfEntities( void ) { return m_NumOfEntities; } void* EntityBank::GetEntityOfType( EntityType entType ) { void* temp = NULL; while( temp == NULL ) { if( m_current == NULL ) { return NULL; } if( m_current->m_entType == entType ) { temp = m_current->m_entity; } m_current = m_current->m_next; } return temp; }