50 node_pointer p_nd = m_p_max;
52 base_type::actual_erase_node(p_nd);
70 node_pointer p_add = base_type::m_p_root;
71 while (p_add != m_p_max)
73 node_pointer p_next_add = p_add->m_p_next_sibling;
78 p_add = m_p_max->m_p_l_child;
81 node_pointer p_next_add = p_add->m_p_next_sibling;
82 p_add->m_metadata = p_add->m_p_l_child == 0 ?
83 0 : p_add->m_p_l_child->m_metadata + 1;
89 p_add = m_p_max->m_p_next_sibling;
92 node_pointer p_next_add = p_add->m_p_next_sibling;
101 add_to_aux(node_pointer p_nd)
103 size_type r = p_nd->m_metadata;
104 while (m_a_aux[r] != 0)
107 if (Cmp_Fn::operator()(m_a_aux[r]->m_value, p_nd->m_value))
108 make_child_of(m_a_aux[r], p_nd);
111 make_child_of(p_nd, m_a_aux[r]);
127 make_child_of(node_pointer p_nd, node_pointer p_new_parent)
131 m_a_aux[p_nd->m_metadata] == p_new_parent);
133 ++p_new_parent->m_metadata;
134 base_type::make_child_of(p_nd, p_new_parent);
142 base_type::m_p_root = m_p_max = 0;
143 const size_type rnk_bnd = rank_bound();
149 make_root_and_link(m_a_aux[i]);
161 remove_node(node_pointer p_nd)
163 node_pointer p_parent = p_nd;
164 while (base_type::parent(p_parent) != 0)
165 p_parent = base_type::parent(p_parent);
167 base_type::bubble_to_top(p_nd);
170 node_pointer p_fix = base_type::m_p_root;
171 while (p_fix != 0&& p_fix->m_p_next_sibling != p_parent)
172 p_fix = p_fix->m_p_next_sibling;
175 p_fix->m_p_next_sibling = p_nd;
192 erase(point_iterator it)
197 node_pointer p_nd = it.m_p_nd;
199 base_type::actual_erase_node(p_nd);
204 template<typename Pred>
210 if (base_type::empty())
216 base_type::to_linked_list();
217 node_pointer p_out = base_type::prune(pred);
222 node_pointer p_next = p_out->m_p_next_sibling;
223 base_type::actual_erase_node(p_out);
227 node_pointer p_cur = base_type::m_p_root;
228 m_p_max = base_type::m_p_root = 0;
231 node_pointer p_next = p_cur->m_p_next_sibling;
232 make_root_and_link(p_cur);
246 const size_t*
const p_upper =
static const std::size_t g_a_rank_bounds[num_distinct_rank_bounds]
Definition: thin_heap_.hpp:246
#define _GLIBCXX_DEBUG_ASSERT(_Condition)
Definition: debug.h:61
#define PB_DS_ASSERT_AUX_NULL(X)
Definition: thin_heap_.hpp:304
#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(X)
Definition: binary_heap_.hpp:324
Definition: thin_heap_.hpp:242