Counter Strike : Global Offensive Source Code
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

246 lines
6.0 KiB

//--------------------------------------------------------------------------------------------------
// qhArray.inl
//
// Copyright(C) 2011 by D. Gregorius. All rights reserved.
//--------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------
// qhArray
//--------------------------------------------------------------------------------------------------
template < typename T > inline
qhArray< T >::qhArray( void )
: mBegin( NULL )
, mEnd( NULL )
, mCapacity( NULL )
{
}
//--------------------------------------------------------------------------------------------------
template < typename T > inline
qhArray< T >::~qhArray( void )
{
qhDestroy( mBegin, Size() );
qhFree( mBegin );
}
//--------------------------------------------------------------------------------------------------
template < typename T > inline
int qhArray< T >::Capacity( void ) const
{
return int( mCapacity - mBegin );
}
//--------------------------------------------------------------------------------------------------
template < typename T > inline
int qhArray< T >::Size( void ) const
{
return int( mEnd - mBegin );
}
//--------------------------------------------------------------------------------------------------
template < typename T > inline
bool qhArray< T >::Empty( void ) const
{
return mEnd == mBegin;
}
//--------------------------------------------------------------------------------------------------
template < typename T > inline
void qhArray< T >::Clear( void )
{
qhDestroy( mBegin, Size() );
mEnd = mBegin;
}
//--------------------------------------------------------------------------------------------------
template < typename T > inline
void qhArray< T >::Reserve( int Count )
{
if ( Count > Capacity() )
{
T* Begin = (T*)qhAlloc( Count * sizeof( T ) );
qhMove( Begin, mBegin, mEnd );
qhFree( mBegin );
mCapacity = Begin + Count;
mEnd = Begin + Size();
mBegin = Begin;
}
}
//--------------------------------------------------------------------------------------------------
template < typename T > inline
void qhArray< T >::Resize( int Count )
{
Reserve( Count );
qhDestroy( mBegin + Count, Size() - Count );
qhConstruct( mEnd, Count - Size() );
mEnd = mBegin + Count;
}
//--------------------------------------------------------------------------------------------------
template < typename T > inline
T& qhArray< T >::Expand( void )
{
if ( mEnd == mCapacity )
{
Reserve( 2 * Capacity() + 1 );
}
qhConstruct( mEnd );
return *mEnd++;
}
//--------------------------------------------------------------------------------------------------
template < typename T > inline
void qhArray< T >::PushBack( const T& Other )
{
if ( mEnd == mCapacity )
{
Reserve( 2 * Capacity() + 1 );
}
qhCopyConstruct( mEnd++, Other );
}
//--------------------------------------------------------------------------------------------------
template < typename T > inline
void qhArray< T >::PopBack( void )
{
qhDestroy( --mEnd );
}
//--------------------------------------------------------------------------------------------------
template < typename T > inline
int qhArray< T >::IndexOf( const T& Element ) const
{
for ( int i = 0; i < Size(); ++i )
{
if ( mBegin[ i ] == Element )
{
return i;
}
}
return -1;
}
//--------------------------------------------------------------------------------------------------
template < typename T > inline
T& qhArray< T >::operator[]( int Offset )
{
QH_ASSERT( 0 <= Offset && Offset < Size() );
return *( mBegin + Offset );
}
//--------------------------------------------------------------------------------------------------
template < typename T > inline
const T& qhArray< T >::operator[]( int Offset ) const
{
QH_ASSERT( 0 <= Offset && Offset < Size() );
return *( mBegin + Offset );
}
//--------------------------------------------------------------------------------------------------
template < typename T > inline
T& qhArray< T >::Front( void )
{
QH_ASSERT( !Empty() );
return *mBegin;
}
//--------------------------------------------------------------------------------------------------
template < typename T > inline
const T& qhArray< T >::Front( void ) const
{
QH_ASSERT( !Empty() );
return *mBegin;
}
//--------------------------------------------------------------------------------------------------
template < typename T > inline
T& qhArray< T >::Back( void )
{
QH_ASSERT( !Empty() );
return *( mEnd - 1 );
}
//--------------------------------------------------------------------------------------------------
template < typename T > inline
T* qhArray< T >::Begin( void )
{
return mBegin;
}
//--------------------------------------------------------------------------------------------------
template < typename T > inline
const T* qhArray< T >::Begin( void ) const
{
return mBegin;
}
//--------------------------------------------------------------------------------------------------
template < typename T > inline
T* qhArray< T >::End( void )
{
return mEnd;
}
//--------------------------------------------------------------------------------------------------
template < typename T > inline
const T* qhArray< T >::End( void ) const
{
return mEnd;
}
//--------------------------------------------------------------------------------------------------
template < typename T > inline
const T& qhArray< T >::Back( void ) const
{
QH_ASSERT( !Empty() );
return *( mEnd - 1 );
}
//--------------------------------------------------------------------------------------------------
template < typename T > inline
void qhArray< T >::Swap( qhArray< T >& Other )
{
qhSwap( mBegin, Other.mBegin );
qhSwap( mEnd, Other.mEnd );
qhSwap( mCapacity, Other.mCapacity );
}
//--------------------------------------------------------------------------------------------------
template < typename T >
void qhSwap( qhArray< T >& Lhs, qhArray< T >& Rhs )
{
Lhs.Swap( Rhs );
}