42 inline typename PB_DS_CLASS_C_DEC::iterator
44 find_by_order(size_type order)
46 node_iterator it = node_begin();
47 node_iterator end_it = node_end();
51 node_iterator l_it = it.get_l_child();
52 const size_type o = (l_it == end_it)? 0 : l_it.get_metadata();
61 it = it.get_r_child();
65 return base_type::end_iterator();
69 inline typename PB_DS_CLASS_C_DEC::const_iterator
71 find_by_order(size_type order)
const
72 {
return const_cast<PB_DS_CLASS_C_DEC*
>(
this)->find_by_order(order); }
75 inline typename PB_DS_CLASS_C_DEC::size_type
77 order_of_key(key_const_reference r_key)
const
79 node_const_iterator it = node_begin();
80 node_const_iterator end_it = node_end();
82 const cmp_fn& r_cmp_fn =
const_cast<PB_DS_CLASS_C_DEC*
>(
this)->get_cmp_fn();
86 node_const_iterator l_it = it.get_l_child();
88 if (r_cmp_fn(r_key, this->extract_key(*(*it))))
90 else if (r_cmp_fn(this->extract_key(*(*it)), r_key))
92 ord += (l_it == end_it)? 1 : 1 + l_it.get_metadata();
93 it = it.get_r_child();
97 ord += (l_it == end_it)? 0 : l_it.get_metadata();
107 operator()(node_iterator node_it, node_const_iterator end_nd_it)
const
109 node_iterator l_it = node_it.get_l_child();
110 const size_type l_rank = (l_it == end_nd_it) ? 0 : l_it.get_metadata();
112 node_iterator r_it = node_it.get_r_child();
113 const size_type r_rank = (r_it == end_nd_it) ? 0 : r_it.get_metadata();
115 const_cast<metadata_reference
>(node_it.get_metadata())= 1 + l_rank + r_rank;
120 ~tree_order_statistics_node_update()