OpenBarnyard
 
Loading...
Searching...
No Matches
T2Vector< T, MaxSize > Class Template Reference

#include <T2Vector.h>

Classes

class  Iterator
 

Public Member Functions

 T2Vector ()
 
 ~T2Vector ()
 
Iterator InsertBefore (Iterator a_itInsertBefore, const T &a_rcItem=T())
 
Iterator InsertAfter (Iterator a_itInsertAfter, const T &a_rcItem=T())
 
template<class... Args>
Iterator EmplaceBack (Args &&... args)
 
Iterator PushBack (const T &item=T())
 
void PopBack ()
 
void PopFront ()
 
void Clear ()
 
void Copy (const T2Vector< T, MaxSize > &a_rcCopyFrom)
 
Iterator Find (const T &a_rValue)
 
void Erase (const Iterator &a_rIterator)
 
void FindAndErase (const T &a_rcItem)
 
void EraseFast (Iterator &a_rIterator)
 
void FindAndEraseFast (const T &a_rcItem)
 
TINT Size () const
 
constexpr TINT Capacity () const
 
TBOOL IsEmpty () const
 
Iterator Front ()
 
Iterator Back ()
 
constexpr Iterator Begin ()
 
constexpr Iterator End ()
 
T & At (TINT a_iIndex)
 
const T & At (TINT a_iIndex) const
 
T & operator[] (TINT a_iIndex)
 
const T & operator[] (TINT a_iIndex) const
 

Static Public Attributes

static constexpr TINT CAPACITY = MaxSize
 

Detailed Description

template<typename T, TINT MaxSize>
class T2Vector< T, MaxSize >

Definition at line 6 of file T2Vector.h.

Constructor & Destructor Documentation

◆ T2Vector()

template<typename T, TINT MaxSize>
T2Vector< T, MaxSize >::T2Vector ( )
inline

Definition at line 184 of file T2Vector.h.

185 {
186 m_iNumElements = 0;
187 }

◆ ~T2Vector()

template<typename T, TINT MaxSize>
T2Vector< T, MaxSize >::~T2Vector ( )
inline

Definition at line 189 of file T2Vector.h.

190 {
191 Clear();
192 }
void Clear()
Definition T2Vector.h:239

Member Function Documentation

◆ At() [1/2]

template<typename T, TINT MaxSize>
T & T2Vector< T, MaxSize >::At ( TINT a_iIndex)
inline

Definition at line 362 of file T2Vector.h.

363 {
364 TASSERT( a_iIndex < m_iNumElements );
365 return *(T*)( m_aBuffer + a_iIndex * sizeof( T ) );
366 }
#define TASSERT(X,...)
Definition Defines.h:138

◆ At() [2/2]

template<typename T, TINT MaxSize>
const T & T2Vector< T, MaxSize >::At ( TINT a_iIndex) const
inline

Definition at line 368 of file T2Vector.h.

369 {
370 TASSERT( a_iIndex < m_iNumElements );
371 return *(const T*)( m_aBuffer + a_iIndex * sizeof( T ) );
372 }

◆ Back()

template<typename T, TINT MaxSize>
Iterator T2Vector< T, MaxSize >::Back ( )
inline

Definition at line 346 of file T2Vector.h.

347 {
348 TASSERT( m_iNumElements > 0 );
349 return Iterator( m_iNumElements - 1, this );
350 }

◆ Begin()

template<typename T, TINT MaxSize>
Iterator T2Vector< T, MaxSize >::Begin ( )
inlineconstexpr

Definition at line 352 of file T2Vector.h.

353 {
354 return Iterator( this );
355 }

◆ Capacity()

template<typename T, TINT MaxSize>
TINT T2Vector< T, MaxSize >::Capacity ( ) const
inlineconstexpr

Definition at line 330 of file T2Vector.h.

331 {
332 return CAPACITY;
333 }
static constexpr TINT CAPACITY
Definition T2Vector.h:181

◆ Clear()

template<typename T, TINT MaxSize>
void T2Vector< T, MaxSize >::Clear ( )
inline

Definition at line 239 of file T2Vector.h.

240 {
241 for ( TINT i = 0; i < Size(); i++ )
242 AtUnsafe( i ).~T();
243
244 m_iNumElements = 0;
245 }
TINT Size() const
Definition T2Vector.h:325

◆ Copy()

template<typename T, TINT MaxSize>
void T2Vector< T, MaxSize >::Copy ( const T2Vector< T, MaxSize > & a_rcCopyFrom)
inline

Definition at line 247 of file T2Vector.h.

248 {
249 TINT i;
250 for ( i = 0; i < a_rcCopyFrom.Size(); i++ )
251 {
252 TConstruct<T>( &AtUnsafe( i ), a_rcCopyFrom.At( i ) );
253 }
254
255 if ( Size() > a_rcCopyFrom.Size() )
256 {
257 for ( ; i < Size(); i++ )
258 {
259 AtUnsafe( i ).~T();
260 }
261 }
262
263 m_iNumElements = a_rcCopyFrom.Size();
264 }
TFORCEINLINE T * TConstruct(T *a_pMemory, Args &&... args)
Constructs an object in place.
Definition TMemory.h:431
T & At(TINT a_iIndex)
Definition T2Vector.h:362

◆ EmplaceBack()

template<typename T, TINT MaxSize>
template<class... Args>
Iterator T2Vector< T, MaxSize >::EmplaceBack ( Args &&... args)
inline

Definition at line 211 of file T2Vector.h.

212 {
213 TASSERT( m_iNumElements < CAPACITY );
214 TConstruct<T>( &AtUnsafe( m_iNumElements++ ), std::forward<Args>( args )... );
215
216 return Iterator( m_iNumElements - 1, this );
217 }

◆ End()

template<typename T, TINT MaxSize>
Iterator T2Vector< T, MaxSize >::End ( )
inlineconstexpr

Definition at line 357 of file T2Vector.h.

358 {
359 return Iterator( m_iNumElements, this );
360 }

◆ Erase()

template<typename T, TINT MaxSize>
void T2Vector< T, MaxSize >::Erase ( const Iterator & a_rIterator)
inline

Definition at line 278 of file T2Vector.h.

279 {
280 TINT uiItemIndex = a_rIterator.Index();
281 TASSERT( uiItemIndex < m_iNumElements );
282
283 AtUnsafe( uiItemIndex ).~T();
284
285 if ( uiItemIndex + 1 < Size() )
286 {
287 for ( TINT i = uiItemIndex + 1; i < Size(); i++ )
288 {
289 TConstruct<T>( &AtUnsafe( i - 1 ), std::move( AtUnsafe( i ) ) );
290 AtUnsafe( i ).~T();
291 }
292 }
293
294 m_iNumElements--;
295 }

◆ EraseFast()

template<typename T, TINT MaxSize>
void T2Vector< T, MaxSize >::EraseFast ( Iterator & a_rIterator)
inline

Definition at line 307 of file T2Vector.h.

308 {
309 TINT uiItemIndex = a_rIterator.Index();
310 TASSERT( uiItemIndex < m_iNumElements );
311
312 a_rIterator.Value() = Back().Value();
313 PopBack();
314 }
void PopBack()
Definition T2Vector.h:227
Iterator Back()
Definition T2Vector.h:346
T & Value() noexcept
Definition T2Vector.h:37

◆ Find()

template<typename T, TINT MaxSize>
Iterator T2Vector< T, MaxSize >::Find ( const T & a_rValue)
inline

Definition at line 266 of file T2Vector.h.

267 {
268 for ( auto it = Begin(); it != End(); it++ )
269 {
270 if ( it.Value() == a_rValue )
271 return it;
272 }
273
274 return End();
275 }
constexpr Iterator Begin()
Definition T2Vector.h:352
constexpr Iterator End()
Definition T2Vector.h:357

◆ FindAndErase()

template<typename T, TINT MaxSize>
void T2Vector< T, MaxSize >::FindAndErase ( const T & a_rcItem)
inline

Definition at line 298 of file T2Vector.h.

299 {
300 auto it = Find( a_rcItem );
301
302 if ( it != End() )
303 Erase( it );
304 }
void Erase(const Iterator &a_rIterator)
Definition T2Vector.h:278
Iterator Find(const T &a_rValue)
Definition T2Vector.h:266

◆ FindAndEraseFast()

template<typename T, TINT MaxSize>
void T2Vector< T, MaxSize >::FindAndEraseFast ( const T & a_rcItem)
inline

Definition at line 317 of file T2Vector.h.

318 {
319 auto it = Find( a_rcItem );
320
321 if ( it != End() )
322 EraseFast( it );
323 }
void EraseFast(Iterator &a_rIterator)
Definition T2Vector.h:307

◆ Front()

template<typename T, TINT MaxSize>
Iterator T2Vector< T, MaxSize >::Front ( )
inline

Definition at line 340 of file T2Vector.h.

341 {
342 TASSERT( m_iNumElements > 0 );
343 return Iterator( 0, this );
344 }

◆ InsertAfter()

template<typename T, TINT MaxSize>
Iterator T2Vector< T, MaxSize >::InsertAfter ( Iterator a_itInsertAfter,
const T & a_rcItem = T() )
inline

Definition at line 202 of file T2Vector.h.

203 {
204 InsertGap( a_itInsertAfter.Index() + 1, 1 );
205 TConstruct<T>( &AtUnsafe( a_itInsertAfter.Index() + 1 ), a_rcItem );
206
207 return Iterator( a_itInsertAfter.Index() + 1, this );
208 }

◆ InsertBefore()

template<typename T, TINT MaxSize>
Iterator T2Vector< T, MaxSize >::InsertBefore ( Iterator a_itInsertBefore,
const T & a_rcItem = T() )
inline

Definition at line 194 of file T2Vector.h.

195 {
196 InsertGap( a_itInsertBefore.Index(), 1 );
197 TConstruct<T>( &AtUnsafe( a_itInsertBefore.Index() ), a_rcItem );
198
199 return Iterator( a_itInsertBefore.Index(), this );
200 }

◆ IsEmpty()

template<typename T, TINT MaxSize>
TBOOL T2Vector< T, MaxSize >::IsEmpty ( ) const
inline

Definition at line 335 of file T2Vector.h.

336 {
337 return Size() == 0;
338 }

◆ operator[]() [1/2]

template<typename T, TINT MaxSize>
T & T2Vector< T, MaxSize >::operator[] ( TINT a_iIndex)
inline

Definition at line 374 of file T2Vector.h.

375 {
376 return At( a_iIndex );
377 }

◆ operator[]() [2/2]

template<typename T, TINT MaxSize>
const T & T2Vector< T, MaxSize >::operator[] ( TINT a_iIndex) const
inline

Definition at line 379 of file T2Vector.h.

380 {
381 return At( a_iIndex );
382 }

◆ PopBack()

template<typename T, TINT MaxSize>
void T2Vector< T, MaxSize >::PopBack ( )
inline

Definition at line 227 of file T2Vector.h.

228 {
229 TASSERT( m_iNumElements > 0 );
230 AtUnsafe( --m_iNumElements ).~T();
231 }

◆ PopFront()

template<typename T, TINT MaxSize>
void T2Vector< T, MaxSize >::PopFront ( )
inline

Definition at line 233 of file T2Vector.h.

234 {
235 TASSERT( m_iNumElements > 0 );
236 Erase( Begin() );
237 }

◆ PushBack()

template<typename T, TINT MaxSize>
Iterator T2Vector< T, MaxSize >::PushBack ( const T & item = T())
inline

Definition at line 219 of file T2Vector.h.

220 {
221 TASSERT( m_iNumElements < CAPACITY );
222 TConstruct<T>( &AtUnsafe( m_iNumElements++ ), item );
223
224 return Iterator( m_iNumElements - 1, this );
225 }

◆ Size()

template<typename T, TINT MaxSize>
TINT T2Vector< T, MaxSize >::Size ( ) const
inline

Definition at line 325 of file T2Vector.h.

326 {
327 return m_iNumElements;
328 }

Member Data Documentation

◆ CAPACITY

template<typename T, TINT MaxSize>
TINT T2Vector< T, MaxSize >::CAPACITY = MaxSize
staticconstexpr

Definition at line 181 of file T2Vector.h.


The documentation for this class was generated from the following file: