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 577 of file rbtree.h.

577 {
578 if (pos.node_ == nullptr) return end();
579
580 Node* nodeToDelete = const_cast<Node*>(pos.node_);
581 Node* successor = nullptr;
582
583 if (nodeToDelete->right != nullptr) {
585 } else {
587 Node* parent = current->parent;
588 while (parent != nullptr && current == parent->right) {
589 current = parent;
590 parent = parent->parent;
591 }
593 }
594
596 Node* x = nullptr;
597 Node* xParent = nullptr;
598 Color originalColor = y->color;
599
600 if (nodeToDelete->left == nullptr) {
601 x = nodeToDelete->right;
602 xParent = nodeToDelete->parent;
604 } else if (nodeToDelete->right == nullptr) {
605 x = nodeToDelete->left;
606 xParent = nodeToDelete->parent;
608 } else {
609 y = minimum(nodeToDelete->right);
610 originalColor = y->color;
611 x = y->right;
612 if (y->parent == nodeToDelete) {
613 xParent = y;
614 if (x) x->parent = y;
615 } else {
616 xParent = y->parent;
617 transplant(y, y->right);
618 y->right = nodeToDelete->right;
619 y->right->parent = y;
620 }
621
623 y->left = nodeToDelete->left;
624 y->left->parent = y;
625 y->color = nodeToDelete->color;
626 }
627
628 alloc_.destroy(nodeToDelete);
629 alloc_.deallocate(nodeToDelete, 1);
630 --size_;
631
632 if (originalColor == BLACK) {
634 }
635
636 return iterator(successor, this);
637 }
void deleteFixup(Node *x, Node *xParent)
Definition rbtree.h:163
iterator end()
Definition rbtree.h:539
fl::size size_
Definition rbtree.h:55
NodeAllocator alloc_
Definition rbtree.h:57
Node * minimum(Node *x) const
Definition rbtree.h:148
void transplant(Node *u, Node *v)
Definition rbtree.h:135

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

+ Here is the caller graph for this function: