53 node_pointer p_nd = m_p_max;
54 remove_parentless_node(m_p_max);
55 base_type::actual_erase_node(p_nd);
63 remove_parentless_node(node_pointer p_nd)
68 node_pointer p_cur_root = p_nd == base_type::m_p_root?
69 p_nd->m_p_next_sibling : base_type::m_p_root;
72 p_cur_root->m_p_prev_or_parent = 0;
74 if (p_nd->m_p_prev_or_parent != 0)
75 p_nd->m_p_prev_or_parent->m_p_next_sibling = p_nd->m_p_next_sibling;
77 if (p_nd->m_p_next_sibling != 0)
78 p_nd->m_p_next_sibling->m_p_prev_or_parent = p_nd->m_p_prev_or_parent;
80 node_pointer p_child = p_nd->m_p_l_child;
83 p_child->m_p_prev_or_parent = 0;
84 while (p_child->m_p_next_sibling != 0)
85 p_child = p_child->m_p_next_sibling;
89 base_type::m_p_root = join(p_cur_root, p_child);
104 erase(point_iterator it)
109 base_type::bubble_to_top(it.m_p_nd);
110 remove_parentless_node(it.m_p_nd);
111 base_type::actual_erase_node(it.m_p_nd);
117 template<typename Pred>
124 if (base_type::empty())
130 base_type::to_linked_list();
131 node_pointer p_out = base_type::prune(pred);
136 node_pointer p_next = p_out->m_p_next_sibling;
137 base_type::actual_erase_node(p_out);
141 node_pointer p_cur = base_type::m_p_root;
142 base_type::m_p_root = 0;
145 node_pointer p_next = p_cur->m_p_next_sibling;
146 p_cur->m_p_l_child = p_cur->m_p_prev_or_parent = 0;
147 p_cur->m_metadata = 0;
148 p_cur->m_p_next_sibling = base_type::m_p_root;
150 if (base_type::m_p_root != 0)
151 base_type::m_p_root->m_p_prev_or_parent = p_cur;
153 base_type::m_p_root = p_cur;
154 base_type::m_p_root = fix(base_type::m_p_root);
#define _GLIBCXX_DEBUG_ASSERT(_Condition)
Definition: debug.h:61
#define true
Definition: stdbool.h:34
#define PB_DS_CLASS_C_DEC
Definition: bin_search_tree_.hpp:71
#define PB_DS_CLASS_T_DEC
Definition: bin_search_tree_.hpp:67
return(unsigned int) __res
#define PB_DS_ASSERT_VALID_COND(X, _StrictlyBinomial)
Definition: binomial_heap_base_.hpp:189