Game client codebase including: - CharacterActionControl: Character and creature management - GlobalScript: Network, items, skills, quests, utilities - RYLClient: Main client application with GUI and event handlers - Engine: 3D rendering engine (RYLGL) - MemoryManager: Custom memory allocation - Library: Third-party dependencies (DirectX, boost, etc.) - Tools: Development utilities 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
185 lines
2.8 KiB
C++
185 lines
2.8 KiB
C++
#pragma once
|
|
|
|
#include <assert.h>
|
|
#include <stdio.h>
|
|
|
|
namespace RTL
|
|
{
|
|
|
|
template< class Type > class List
|
|
{
|
|
Type* m_pElement;
|
|
int m_nElement;
|
|
int m_nArraySize;
|
|
public:
|
|
void Allocate(int nAlloc);
|
|
void SetSize(int nSize);
|
|
void Pack();
|
|
void Add(Type T);
|
|
void AddUnique(Type T);
|
|
int Contains(Type T);
|
|
void Remove(Type T);
|
|
void DelIndex(int nIndex);
|
|
void Insert(Type T, int n);
|
|
int Find(Type T);
|
|
void* GetFirstPointer()
|
|
{
|
|
return &m_pElement[0];
|
|
}
|
|
|
|
Type& operator[] (int i)
|
|
{
|
|
assert( i>=0 && i< m_nElement);
|
|
return m_pElement[i];
|
|
}
|
|
|
|
int GetCount()
|
|
{
|
|
return m_nElement;
|
|
};
|
|
void SetCount( int nElement )
|
|
{
|
|
m_nElement = nElement;
|
|
};
|
|
List();
|
|
virtual ~List();
|
|
|
|
};
|
|
|
|
template< class Type > List< Type >::List()
|
|
{
|
|
m_nArraySize = 0;
|
|
m_nElement = 0;
|
|
m_pElement = NULL;
|
|
}
|
|
|
|
template< class Type > List< Type >::~List()
|
|
{
|
|
m_nElement = 0;
|
|
delete [] m_pElement;
|
|
}
|
|
template< class Type > void List< Type >::Allocate(int nAlloc)
|
|
{
|
|
assert( nAlloc > 0 );
|
|
assert( nAlloc >= m_nElement );
|
|
|
|
Type *pOldElement = m_pElement;
|
|
m_nArraySize = nAlloc;
|
|
m_pElement = new Type[ m_nArraySize ];
|
|
assert( m_pElement );
|
|
|
|
for(int i=0 ; i < m_nElement ; i++)
|
|
{
|
|
m_pElement[i]=pOldElement[i];
|
|
}
|
|
|
|
if( pOldElement )
|
|
delete [] pOldElement;
|
|
}
|
|
|
|
template< class Type > void List< Type >::SetSize(int nSize)
|
|
{
|
|
if( nSize==0 )
|
|
{
|
|
if( m_pElement )
|
|
delete [] m_pElement;
|
|
}
|
|
else
|
|
{
|
|
Allocate(nSize);
|
|
}
|
|
m_nElement = nSize;
|
|
}
|
|
|
|
template< class Type > void List< Type >::Pack()
|
|
{
|
|
Allocate(m_nElement);
|
|
}
|
|
|
|
template< class Type > void List< Type >::Add(Type T)
|
|
{
|
|
assert( m_nElement <= m_nArraySize );
|
|
if( m_nElement == m_nArraySize )
|
|
{
|
|
Allocate((m_nArraySize) ? m_nArraySize*2 : 16);
|
|
}
|
|
m_pElement[m_nElement++] = T;
|
|
}
|
|
|
|
template< class Type > int List< Type >::Contains(Type T)
|
|
{
|
|
int nSameElement = 0;
|
|
for(int i=0;i<m_nElement;i++)
|
|
{
|
|
if( m_pElement[i] == T )
|
|
nSameElement++;
|
|
}
|
|
return nSameElement;
|
|
}
|
|
|
|
template< class Type > void List< Type >::AddUnique(Type T)
|
|
{
|
|
if( !Contains(T) )
|
|
Add(T);
|
|
}
|
|
|
|
template< class Type > void List< Type >::DelIndex(int nIndex)
|
|
{
|
|
assert( nIndex < m_nElement );
|
|
m_nElement--;
|
|
while( nIndex < m_nElement )
|
|
{
|
|
m_pElement[nIndex] = m_pElement[nIndex+1];
|
|
nIndex++;
|
|
}
|
|
|
|
}
|
|
|
|
template< class Type > void List< Type >::Remove(Type T)
|
|
{
|
|
for( int i=0 ; i < m_nElement ; i++ )
|
|
{
|
|
if( m_pElement[i] == T )
|
|
break;
|
|
}
|
|
|
|
DelIndex(i);
|
|
|
|
for( i=0 ; i < m_nElement ; i++ )
|
|
{
|
|
assert( m_pElement[i] != T );
|
|
}
|
|
}
|
|
|
|
template< class Type > void List< Type >::Insert(Type T, int n)
|
|
{
|
|
if( m_nElement == 0)
|
|
Add(T);
|
|
else
|
|
{
|
|
Add(m_pElement[ m_nElement-1 ]);
|
|
for( int i=0 ; i > n ; i-- )
|
|
{
|
|
m_pElement[i+1] = m_pElement[i];
|
|
}
|
|
m_pElement[n] = t;
|
|
}
|
|
}
|
|
|
|
template< class Type > int List< Type >::Find(Type T)
|
|
{
|
|
|
|
for( int i=0; i < m_nElement; i++ )
|
|
{
|
|
if( m_pElement[i] == T )
|
|
{
|
|
return i;
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
}
|
|
|
|
|