115 lines
2.2 KiB
C++
115 lines
2.2 KiB
C++
|
//Copyright (c) 1998 - 1999 Microsoft Corporation
|
||
|
#include "stdafx.h"
|
||
|
#include"tarray.h"
|
||
|
|
||
|
//------------------------------------------------------------------------
|
||
|
template< class T > CArrayT< T >::CArrayT( )
|
||
|
{
|
||
|
m_pT = NULL;
|
||
|
|
||
|
m_nMaxSize = 0;
|
||
|
|
||
|
m_idx = 0;
|
||
|
}
|
||
|
|
||
|
//------------------------------------------------------------------------
|
||
|
// destroy the list
|
||
|
template< class T > CArrayT< T >::~CArrayT( )
|
||
|
{
|
||
|
if( m_pT != NULL )
|
||
|
{
|
||
|
delete[] m_pT;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//------------------------------------------------------------------------
|
||
|
// increases array size, returns zero if the operation failed
|
||
|
template< class T > int CArrayT< T >::GrowBy( int iSize )
|
||
|
{
|
||
|
if( iSize == 0 )
|
||
|
{
|
||
|
//
|
||
|
//Grow by # number of items
|
||
|
//
|
||
|
iSize = 4;
|
||
|
|
||
|
}
|
||
|
|
||
|
if( m_pT == NULL )
|
||
|
{
|
||
|
m_pT = ( T * )new T[ iSize ];
|
||
|
|
||
|
if( m_pT == NULL )
|
||
|
{
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
m_nMaxSize = iSize;
|
||
|
|
||
|
m_idx = 0;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
T *pT;
|
||
|
|
||
|
m_nMaxSize += iSize;
|
||
|
|
||
|
pT = ( T * )new T[ m_nMaxSize ];
|
||
|
|
||
|
if( pT == NULL )
|
||
|
{
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
ZeroMemory( ( PVOID )pT , sizeof( T ) * m_nMaxSize );
|
||
|
|
||
|
CopyMemory( pT , m_pT , sizeof( T ) * ( m_idx ) );
|
||
|
|
||
|
if( m_pT != NULL )
|
||
|
{
|
||
|
delete[] m_pT;
|
||
|
}
|
||
|
|
||
|
m_pT = pT;
|
||
|
}
|
||
|
|
||
|
|
||
|
return m_nMaxSize;
|
||
|
}
|
||
|
|
||
|
//------------------------------------------------------------------------
|
||
|
// Simply put, increase the array size if empty, and place item at the
|
||
|
// end of the list
|
||
|
template< class T > int CArrayT< T >::Insert( T tItem )
|
||
|
{
|
||
|
if( m_pT == NULL || ( m_idx ) >= m_nMaxSize )
|
||
|
{
|
||
|
if( GrowBy( 0 ) == 0 )
|
||
|
{
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
m_pT[ m_idx ] = tItem;
|
||
|
|
||
|
m_idx++;
|
||
|
|
||
|
return m_idx;
|
||
|
|
||
|
}
|
||
|
|
||
|
//------------------------------------------------------------------------
|
||
|
// exposes the array for direct reference
|
||
|
template< class T > T* CArrayT< T >::ExposeArray( )
|
||
|
{
|
||
|
return &m_pT[0];
|
||
|
}
|
||
|
|
||
|
//------------------------------------------------------------------------
|
||
|
// Returns the number of valid entries in the array
|
||
|
template< class T > int CArrayT< T >::GetSize( ) const
|
||
|
{
|
||
|
return ( m_idx );
|
||
|
}
|