Source code of Windows XP (NT5)
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.
|
|
//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 ); }
|