OpenBarnyard
 
Loading...
Searching...
No Matches
T2RedBlackTree< T > Class Template Reference

#include <T2RedBlackTree.h>

Inheritance diagram for T2RedBlackTree< T >:
T2GenericRedBlackTree

Classes

class  CIterator
 
class  Iterator
 

Public Types

using Node = T2RedBlackTreeNode<T>
 

Public Member Functions

 T2RedBlackTree (T2Allocator *pAllocator=GetGlobalAllocator())
 
TBOOL IsRoot (Node *pNode)
 
Iterator Begin ()
 
Iterator End ()
 
const CIterator Begin () const
 
const CIterator End () const
 
void DeleteAll ()
 
void Delete (Node *a_pNode)
 
void Erase (Node *a_pFrom, Node *a_pTo)
 
Iterator Insert (const T &value)
 
Iterator Insert (T &&value)
 
Iterator Find (const T &value) const
 
Iterator FindNext (const Node *a_pNextAfter, const T &value) const
 
TSIZE Size () const
 
T2AllocatorGetAllocator () const
 

Additional Inherited Members

- Protected Member Functions inherited from T2GenericRedBlackTree
 T2GenericRedBlackTree (T2Allocator *pAllocator)
 
 ~T2GenericRedBlackTree ()
 
T2AllocatorGetAllocator () const
 
size_t GetNumElements () const
 
T2GenericRedBlackTreeNodeGetFirstNode () const
 
T2GenericRedBlackTreeNodeInsert (T2GenericRedBlackTreeNode *pNode)
 
void DeleteFixUp (T2GenericRedBlackTreeNode *pNode)
 
T2GenericRedBlackTreeNodeDeleteNode (T2GenericRedBlackTreeNode *pNode)
 
void LeftRotate (T2GenericRedBlackTreeNode *pNode)
 
void RightRotate (T2GenericRedBlackTreeNode *pNode)
 
- Static Protected Member Functions inherited from T2GenericRedBlackTree
static T2GenericRedBlackTreeNodeGetSuccessorOf (const T2GenericRedBlackTreeNode *pNode)
 
static T2GenericRedBlackTreeNodeGetPredecessorOf (const T2GenericRedBlackTreeNode *pNode)
 
- Protected Attributes inherited from T2GenericRedBlackTree
T2Allocatorm_pAllocator
 
T2GenericRedBlackTreeNode m_oRoot
 
size_t m_iNumElements
 
- Static Protected Attributes inherited from T2GenericRedBlackTree
static constinit T2GenericRedBlackTreeNode ms_oNil
 

Detailed Description

template<class T>
class T2RedBlackTree< T >

Definition at line 178 of file T2RedBlackTree.h.

Member Typedef Documentation

◆ Node

template<class T>
using T2RedBlackTree< T >::Node = T2RedBlackTreeNode<T>

Definition at line 181 of file T2RedBlackTree.h.

Constructor & Destructor Documentation

◆ T2RedBlackTree()

template<class T>
T2RedBlackTree< T >::T2RedBlackTree ( T2Allocator * pAllocator = GetGlobalAllocator())
inline

Definition at line 348 of file T2RedBlackTree.h.

350 {
351 }
T2GenericRedBlackTree(T2Allocator *pAllocator)

Member Function Documentation

◆ Begin() [1/2]

template<class T>
Iterator T2RedBlackTree< T >::Begin ( )
inline

Definition at line 358 of file T2RedBlackTree.h.

359 {
361 }
#define TREINTERPRETCAST(TYPE, VALUE)
Definition Defines.h:68
T2GenericRedBlackTreeNode * GetFirstNode() const
T2RedBlackTreeNode< T > Node

◆ Begin() [2/2]

template<class T>
const CIterator T2RedBlackTree< T >::Begin ( ) const
inline

Definition at line 368 of file T2RedBlackTree.h.

◆ Delete()

template<class T>
void T2RedBlackTree< T >::Delete ( Node * a_pNode)
inline

Definition at line 386 of file T2RedBlackTree.h.

387 {
388 m_pAllocator->Delete( DeleteNode( a_pNode ) );
389 }
T2GenericRedBlackTreeNode * DeleteNode(T2GenericRedBlackTreeNode *pNode)
T2Allocator * m_pAllocator

◆ DeleteAll()

template<class T>
void T2RedBlackTree< T >::DeleteAll ( )
inline

Definition at line 378 of file T2RedBlackTree.h.

379 {
380 while ( GetNumElements() > 0 )
381 {
383 }
384 }
#define TSTATICCAST(POINTERTYPE, VALUE)
Definition Defines.h:69
size_t GetNumElements() const
void Delete(Node *a_pNode)

◆ End() [1/2]

template<class T>
Iterator T2RedBlackTree< T >::End ( )
inline

Definition at line 363 of file T2RedBlackTree.h.

364 {
365 return Iterator( TREINTERPRETCAST( Node*, &m_oRoot ) );
366 }
T2GenericRedBlackTreeNode m_oRoot

◆ End() [2/2]

template<class T>
const CIterator T2RedBlackTree< T >::End ( ) const
inline

Definition at line 373 of file T2RedBlackTree.h.

374 {
375 return CIterator( TREINTERPRETCAST( const Node*, &m_oRoot ) );
376 }

◆ Erase()

template<class T>
void T2RedBlackTree< T >::Erase ( Node * a_pFrom,
Node * a_pTo )
inline

Definition at line 391 of file T2RedBlackTree.h.

392 {
393 Node* pNode = a_pFrom;
394
395 while ( pNode != a_pTo )
396 {
397 auto pNext = GetSuccessorOf( pNode );
398 Delete( pNode );
399 pNode = pNext;
400 }
401 }
static T2GenericRedBlackTreeNode * GetSuccessorOf(const T2GenericRedBlackTreeNode *pNode)

◆ Find()

template<class T>
Iterator T2RedBlackTree< T >::Find ( const T & value) const
inline

Definition at line 421 of file T2RedBlackTree.h.

422 {
424
425 while ( pCurrentNode != &ms_oNil )
426 {
427 if ( pCurrentNode->operator==( value ) )
428 {
429 return pCurrentNode;
430 }
431
432 if ( pCurrentNode->IsLeftNodeNext( value ) )
433 {
435 }
436 else
437 {
439 }
440 }
441
442 return TSTATICCAST( Node, &m_oRoot );
443 }
static constinit T2GenericRedBlackTreeNode ms_oNil

◆ FindNext()

template<class T>
Iterator T2RedBlackTree< T >::FindNext ( const Node * a_pNextAfter,
const T & value ) const
inline

Definition at line 445 of file T2RedBlackTree.h.

446 {
448
449 if ( pNode->operator==( value ) )
450 {
451 return pNode;
452 }
453
454 return TSTATICCAST( Node, &m_oRoot );
455 }

◆ GetAllocator()

template<class T>
T2Allocator * T2RedBlackTree< T >::GetAllocator ( ) const
inline

Definition at line 462 of file T2RedBlackTree.h.

463 {
464 return m_pAllocator;
465 }

◆ Insert() [1/2]

template<class T>
Iterator T2RedBlackTree< T >::Insert ( const T & value)
inline

Definition at line 403 of file T2RedBlackTree.h.

404 {
405 Node* pNode = m_pAllocator->New<Node>( value );
406 pNode->m_pLeft = &ms_oNil;
407 pNode->m_pRight = &ms_oNil;
408
409 return InsertImpl( pNode );
410 }

◆ Insert() [2/2]

template<class T>
Iterator T2RedBlackTree< T >::Insert ( T && value)
inline

Definition at line 412 of file T2RedBlackTree.h.

413 {
414 Node* pNode = m_pAllocator->New<Node>( value );
415 pNode->m_pLeft = &ms_oNil;
416 pNode->m_pRight = &ms_oNil;
417
418 return InsertImpl( pNode );
419 }

◆ IsRoot()

template<class T>
TBOOL T2RedBlackTree< T >::IsRoot ( Node * pNode)
inline

Definition at line 353 of file T2RedBlackTree.h.

354 {
355 return pNode == &m_oRoot;
356 }

◆ Size()

template<class T>
TSIZE T2RedBlackTree< T >::Size ( ) const
inline

Definition at line 457 of file T2RedBlackTree.h.

458 {
459 return GetNumElements();
460 }

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