fixed a bug in the index-based linked list template which caused head or tail removals (but not both) to result in a corrupt link chain

additionally, fixed a bug where the list size was not maintained properly

--HG--
extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%40860
This commit is contained in:
David Anderson 2007-05-24 02:25:18 +00:00
parent df9b23948b
commit ca3c8eb6b7

View File

@ -16,6 +16,8 @@
#ifndef _INCLUDE_SOURCEMOD_FASTLINK_H_ #ifndef _INCLUDE_SOURCEMOD_FASTLINK_H_
#define _INCLUDE_SOURCEMOD_FASTLINK_H_ #define _INCLUDE_SOURCEMOD_FASTLINK_H_
#include <assert.h>
template <typename T> template <typename T>
class FastLink class FastLink
{ {
@ -158,13 +160,13 @@ public:
else if (index == m_FirstLink) else if (index == m_FirstLink)
{ {
m_FirstLink = m_Nodes[index].next; m_FirstLink = m_Nodes[index].next;
m_Nodes[index].prev = 0; m_Nodes[m_FirstLink].prev = 0;
} }
/* We're the TAIL */ /* We're the TAIL */
else if (index == m_LastLink) else if (index == m_LastLink)
{ {
m_LastLink = m_Nodes[index].prev; m_LastLink = m_Nodes[index].prev;
m_Nodes[index].next = 0; m_Nodes[m_LastLink].next = 0;
} }
/* We're in the middle! */ /* We're in the middle! */
else else
@ -178,6 +180,8 @@ public:
/* Add us to the free list */ /* Add us to the free list */
m_Nodes[++m_FreeNodes].freeNode = index; m_Nodes[++m_FreeNodes].freeNode = index;
m_Size--;
return iter; return iter;
} }
private: private: