47 _GLIBCXX_DEBUG_ASSERT(m_size == 0);
54 actual_erase_node(node_pointer p_nd)
56 _GLIBCXX_DEBUG_ASSERT(m_size > 0);
59 s_node_allocator.deallocate(p_nd, 1);
65 clear_imp(node_pointer p_nd)
69 clear_imp(p_nd->m_p_l_child);
70 node_pointer p_next = p_nd->m_p_next_sibling;
71 actual_erase_node(p_nd);
81 PB_DS_ASSERT_VALID((*
this))
82 node_pointer p_cur = m_p_root;
84 if (p_cur->m_p_l_child != 0)
86 node_pointer p_child_next = p_cur->m_p_l_child->m_p_next_sibling;
87 p_cur->m_p_l_child->m_p_next_sibling = p_cur->m_p_next_sibling;
88 p_cur->m_p_next_sibling = p_cur->m_p_l_child;
89 p_cur->m_p_l_child = p_child_next;
92 p_cur = p_cur->m_p_next_sibling;
95 node_const_pointer p_counter = m_p_root;
97 while (p_counter != 0)
100 _GLIBCXX_DEBUG_ASSERT(p_counter->m_p_l_child == 0);
101 p_counter = p_counter->m_p_next_sibling;
103 _GLIBCXX_DEBUG_ASSERT(count == m_size);
108 template<
typename Pred>
109 typename PB_DS_CLASS_C_DEC::node_pointer
113 node_pointer p_cur = m_p_root;
115 node_pointer p_out = 0;
118 node_pointer p_next = p_cur->m_p_next_sibling;
119 if (pred(p_cur->m_value))
121 p_cur->m_p_next_sibling = p_out;
123 p_out->m_p_prev_or_parent = p_cur;
128 p_cur->m_p_next_sibling = m_p_root;
130 m_p_root->m_p_prev_or_parent = p_cur;
141 bubble_to_top(node_pointer p_nd)
143 node_pointer p_parent = parent(p_nd);
144 while (p_parent != 0)
146 swap_with_parent(p_nd, p_parent);
147 p_parent = parent(p_nd);