FastLED 3.9.15
Loading...
Searching...
No Matches

◆ erase() [2/2]

template<typename T, typename Compare = less<T>, typename Allocator = allocator_slab<char>>
iterator fl::RedBlackTree< T, Compare, Allocator >::erase ( const_iterator pos)
inline

Definition at line 834 of file rbtree.h.

834 {
835 if (pos.mNode == nullptr) return end();
836
837 RBNode* nodeToDelete = const_cast<RBNode*>(pos.mNode);
838 RBNode* successor = nullptr;
839
840 if (nodeToDelete->right != nullptr) {
842 } else {
844 RBNode* parent = current->parent;
845 while (parent != nullptr && current == parent->right) {
846 current = parent;
847 parent = parent->parent;
848 }
850 }
851
853 RBNode* x = nullptr;
854 RBNode* xParent = nullptr;
855 Color originalColor = y->color;
856
857 if (nodeToDelete->left == nullptr) {
858 x = nodeToDelete->right;
859 xParent = nodeToDelete->parent;
861 } else if (nodeToDelete->right == nullptr) {
862 x = nodeToDelete->left;
863 xParent = nodeToDelete->parent;
865 } else {
866 y = minimum(nodeToDelete->right);
867 originalColor = y->color;
868 x = y->right;
869 if (y->parent == nodeToDelete) {
870 xParent = y;
871 if (x) x->parent = y;
872 } else {
873 xParent = y->parent;
874 transplant(y, y->right);
875 y->right = nodeToDelete->right;
876 y->right->parent = y;
877 }
878
880 y->left = nodeToDelete->left;
881 y->left->parent = y;
882 y->color = nodeToDelete->color;
883 }
884
885 mAlloc.destroy(nodeToDelete);
886 mAlloc.deallocate(nodeToDelete, 1);
887 --mSize;
888
891 }
892
893 return iterator(successor, this);
894 }
RBNode * minimum(RBNode *x) const
Definition rbtree.h:155
NodeAllocator mAlloc
Definition rbtree.h:64
iterator end()
Definition rbtree.h:769
fl::size mSize
Definition rbtree.h:62
void transplant(RBNode *u, RBNode *v)
Definition rbtree.h:142
void deleteFixup(RBNode *x, RBNode *xParent)
Definition rbtree.h:170

Referenced by fl::RedBlackTree< value_type, PairCompare, Allocator >::erase().

+ Here is the caller graph for this function: