28 template <
typename _Key,
typename _Value>
45 alignas(
sizeof(
void*))
bool m_b;
60 m_value(
std::move(v)),
84 if(x->m_parent == m_nil)
88 else if(x == x->m_parent->m_left)
112 if(x->m_parent == m_nil)
116 else if(x == x->m_parent->m_right)
133 if(z->m_parent == z->m_parent->m_parent->m_left)
140 z->m_parent->m_parent->m_b =
false;
141 z = z->m_parent->m_parent;
145 if(z == z->m_parent->m_right)
151 z->m_parent->m_b =
true;
152 z->m_parent->m_parent->m_b =
false;
153 rotateRight(z->m_parent->m_parent);
163 z->m_parent->m_parent->m_b =
false;
164 z = z->m_parent->m_parent;
168 if(z == z->m_parent->m_left)
174 z->m_parent->m_b =
true;
175 z->m_parent->m_parent->m_b =
false;
176 rotateLeft(z->m_parent->m_parent);
186 if(u->m_parent == m_nil)
190 else if(u == u->m_parent->m_left)
203 while(x != m_root && x->
m_b)
205 if(x == x->m_parent->m_left)
211 x->m_parent->m_b =
false;
212 rotateLeft(x->m_parent);
231 w->
m_b = x->m_parent->m_b;
232 x->m_parent->m_b =
true;
234 rotateLeft(x->m_parent);
244 x->m_parent->m_b =
false;
245 rotateRight(x->m_parent);
264 w->
m_b = x->m_parent->m_b;
265 x->m_parent->m_b =
true;
267 rotateRight(x->m_parent);
279 bool yColor = y->
m_b;
282 if(z->m_left == m_nil)
285 transplant(z, z->m_right);
287 else if(z->m_right == m_nil)
290 transplant(z, z->m_left);
294 y = minimum(z->m_right);
326 destroy(node->m_left);
327 destroy(node->m_right);
342 else if(x->
m_key < key)
392 inline std::pair<const key_type, value_type>*
operator->()
const noexcept {
return reinterpret_cast<std::pair<const key_type, value_type>*
>(&curr->
m_key); }
393 inline std::pair<const key_type, value_type>&
operator*()
const noexcept {
return reinterpret_cast<std::pair<const key_type, value_type>&
>(curr->
m_key); }
409 while(y != nil && curr == y->
m_right)
518 inline bool empty()
const noexcept {
return m_root == m_nil; }
527 while(x->m_left != m_nil)
537 template <
typename _Key,
typename _Value>
567 m_value(
std::move(v)),
593 else if(x == x->m_parent->m_left)
621 else if(x == x->m_parent->m_left)
676 destroy(node->m_left);
677 destroy(node->m_right);
707 else if(key > x->
m_key)
726 else if(key < y->m_key)
747 else if(key > x->
m_key)
832 else if(x->
m_key < key)
859 else if(key < y->m_key)
873 template<
typename A,
typename B>
880 std::pair<const A, B>*
operator->()
const {
return reinterpret_cast<std::pair<const A, B>*
>(&m_curr->
m_key); }
895 while(y && m_curr == y->
m_right)
926 inline bool empty()
const {
return m_root ==
nullptr; }
void insert(const key_type &key, const value_type &value)
void insert(const key_type &key, const value_type &value) noexcept
#define TTK_MODULE_EXPORT
iterator operator++(int) noexcept
iterator(Node *ptr=nullptr)
bool operator==(const iterator &other) const
bool operator==(const iterator &other) const noexcept
void destroy(Node *node) noexcept
void rotateRight(Node *x) noexcept
reference operator[](const key_type &key)
Node(const key_type &k, const value_type &v) noexcept
std::pair< const A, B > * operator->() const
bool operator!=(const iterator &other) const
void destroy(Node *node) noexcept
void fixInsert(Node *z) noexcept
std::pair< const key_type, value_type > * operator->() const noexcept
Node(const key_type &k, value_type &&v) noexcept
void fixDelete(Node *x) noexcept
const _Value & const_reference
void rotateLeft(Node *x) noexcept
static constexpr wchar_t key[]
void deleteNode(Node *z) noexcept
iterator< key_type, value_type > end()
value_type * find(const key_type &key)
iterator(Node *ptr=nullptr, Node *n=nullptr) noexcept
bool empty() const noexcept
Node(const key_type &k, const value_type &v) noexcept
iterator< key_type, value_type > begin()
std::pair< const key_type, value_type > & operator*() const noexcept
bool operator!=(const iterator &other) const noexcept
Node(const key_type &k, value_type &&v) noexcept
reference operator[](const key_type &key)
const _Value & const_reference
iterator & operator++() noexcept
void rotateLeft(Node *x) noexcept
iterator end() const noexcept
The class of the tree modules.
Node * find(const key_type &key) const noexcept
void transplant(Node *u, Node *v) noexcept
Node * minimum(Node *x) const noexcept
iterator begin() noexcept
void rotateRight(Node *x) noexcept