networking
This commit is contained in:
@@ -27,8 +27,11 @@ public:
|
||||
void AppendAt( size_t nIndex, const T *data, size_t n );
|
||||
|
||||
void RemoveHead();
|
||||
void RemoveHead( size_t n );
|
||||
void RemoveTail();
|
||||
void RemoveTail( size_t n );
|
||||
void RemoveAt( size_t nIndex );
|
||||
void RemoveAt( size_t nIndex, size_t n );
|
||||
|
||||
T *GetData( void );
|
||||
size_t GetSize( void );
|
||||
@@ -121,10 +124,17 @@ void CUtlVector<T>::AppendHead( const T &data )
|
||||
template<typename T>
|
||||
void CUtlVector<T>::AppendHead( const T *pData, size_t n )
|
||||
{
|
||||
size_t prevSize = m_data.GetSize();
|
||||
m_data.Resize(prevSize+n, n);
|
||||
for ( size_t i = 0; i < n; i++ )
|
||||
size_t nOldSize = m_nSize;
|
||||
m_data.Resize(m_nSize+n);
|
||||
for (size_t i = nOldSize; i > 0; --i)
|
||||
{
|
||||
new (&m_data[i + n - 1]) T(m_data[i - 1]);
|
||||
m_data[i - 1].~T();
|
||||
}
|
||||
for (size_t i = 0; i < n; ++i)
|
||||
{
|
||||
new (&m_data[i]) T(pData[i]);
|
||||
}
|
||||
m_nSize+=n;
|
||||
}
|
||||
|
||||
@@ -152,23 +162,71 @@ void CUtlVector<T>::AppendAt( size_t nIndex, const T &data )
|
||||
template<typename T>
|
||||
void CUtlVector<T>::AppendAt( size_t nIndex, const T *pData, size_t n )
|
||||
{
|
||||
|
||||
size_t nOldSize = m_nSize;
|
||||
m_data.Resize(m_nSize+n);
|
||||
for (size_t i = nOldSize; i > nIndex; --i)
|
||||
{
|
||||
new (&m_data[i + n - 1]) T(m_data[i - 1]);
|
||||
m_data[i - 1].~T();
|
||||
}
|
||||
for (size_t i = 0; i < n; ++i)
|
||||
{
|
||||
new (&m_data[nIndex + i]) T(pData[i]);
|
||||
}
|
||||
m_nSize+=n;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
void CUtlVector<T>::RemoveHead()
|
||||
{
|
||||
m_nSize--;
|
||||
RemoveHead( 1 );
|
||||
}
|
||||
template<typename T>
|
||||
void CUtlVector<T>::RemoveHead( size_t n )
|
||||
{
|
||||
RemoveAt(0, n);
|
||||
}
|
||||
template<typename T>
|
||||
void CUtlVector<T>::RemoveTail()
|
||||
{
|
||||
m_nSize--;
|
||||
RemoveTail( 1 );
|
||||
}
|
||||
template<typename T>
|
||||
void CUtlVector<T>::RemoveTail( size_t n )
|
||||
{
|
||||
if (n > m_nSize)
|
||||
n = m_nSize;
|
||||
m_data.Resize(m_nSize-n);
|
||||
m_nSize -= n;
|
||||
}
|
||||
template<typename T>
|
||||
void CUtlVector<T>::RemoveAt( size_t nIndex )
|
||||
{
|
||||
m_nSize--;
|
||||
RemoveAt( nIndex, 1 );
|
||||
}
|
||||
template<typename T>
|
||||
void CUtlVector<T>::RemoveAt( size_t nIndex, size_t n )
|
||||
{
|
||||
if ( nIndex >= m_nSize )
|
||||
{
|
||||
return;
|
||||
}
|
||||
if ( nIndex + n > m_nSize )
|
||||
{
|
||||
n = m_nSize - nIndex;
|
||||
}
|
||||
for ( size_t i = nIndex; i < nIndex + n; i++ )
|
||||
{
|
||||
m_data[i].~T();
|
||||
}
|
||||
|
||||
size_t nElementsToMove = m_nSize - (nIndex + n);
|
||||
for ( size_t i = 0; i < nElementsToMove; i++ )
|
||||
{
|
||||
new (&m_data[nIndex + i]) T(m_data[nIndex + n + i]);
|
||||
m_data[nIndex + n + i].~T();
|
||||
}
|
||||
m_nSize -= n;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
|
||||
Reference in New Issue
Block a user