58 m_iNumBuffers = a_iNumBuffers;
60 if ( a_iNumBuffers > m_oFreeList.SizeAllocated() )
62 m_oFreeList.Resize( a_iNumBuffers );
65 m_oFreeList.SetSize( a_iNumBuffers );
68 for (
TINT i = 0; i < m_iNumBuffers; i++ )
70 m_oFreeList[ i ] = &m_pNodeArray[ i ];
73 TASSERT( m_oFreeList.Size() <= m_iNumBuffers );
130 TASSERT( m_oFreeList.Size() <= m_iNumBuffers );
133 TINT iDesiredNumNodes = a_iSize >> ( m_iMainIndexShift % BUFSIZE );
135 if ( 0 < ( m_iSubIndexMask & a_iSize ) )
137 iDesiredNumNodes += 1;
140 TASSERT( iDesiredNumNodes >= 0 );
142 if ( m_oArray.Size() != iDesiredNumNodes )
144 if ( 10 < iDesiredNumNodes )
return TFALSE;
146 if ( iDesiredNumNodes < m_oArray.Size() )
150 while ( iDesiredNumNodes < m_oArray.Size() )
153 m_oFreeList.Push( m_oArray.Pop() );
156 TASSERT( m_oArray.Size() == iDesiredNumNodes );
157 TASSERT( m_oFreeList.Size() <= m_iNumBuffers );
163 if ( m_oFreeList.Size() < 1 )
return TFALSE;
165 while ( m_oArray.Size() < iDesiredNumNodes )
167 if ( m_oFreeList.Size() < 1 )
return TFALSE;
169 TASSERT( m_oArray.Size() < m_oArray.SizeAllocated() );
171 m_oArray.Push( m_oFreeList.Pop() );
174 TASSERT( m_oArray.Size() == iDesiredNumNodes );
175 TASSERT( m_oFreeList.Size() <= m_iNumBuffers );
185 TASSERT( m_oFreeList.Size() <= m_iNumBuffers );
186 TASSERT( a_iIndex < m_oArray.Size() * BUFSIZE );
188 TINT iSubIndex = m_iSubIndexMask & a_iIndex;
189 TINT iMainIndex = a_iIndex >> ( m_iMainIndexShift % BUFSIZE );
191 TASSERT( iMainIndex < m_oArray.Size() );
192 TASSERT( iSubIndex < BUFSIZE );
194 return m_oArray[ iMainIndex ]->GetElement( iSubIndex );
200 TASSERT( m_oFreeList.Size() <= m_iNumBuffers );
201 TASSERT( a_iIndex < m_oArray.Size() * BUFSIZE );
203 TINT iSubIndex = m_iSubIndexMask & a_iIndex;
204 TINT iMainIndex = a_iIndex >> ( m_iMainIndexShift % BUFSIZE );
206 TASSERT( iMainIndex < m_oArray.Size() );
207 TASSERT( iSubIndex < BUFSIZE );
209 return m_oArray[ iMainIndex ]->GetElement( iSubIndex );