inline Node* ordered_index_upper_bound( Node* top,Node* y,const KeyFromValue& key, const BOOST_DEDUCED_TYPENAME KeyFromValue::result_type& x, const CompatibleCompare& comp,mpl::true_) { return ordered_index_upper_bound(top,y,key,x,comp,mpl::false_()); }
inline Node* ordered_index_upper_bound( Node* top,Node* y,const KeyFromValue& key,const CompatibleKey& x, const CompatibleCompare& comp) { typedef typename KeyFromValue::result_type key_type; return ordered_index_upper_bound( top,y,key,x,comp, promotes_1st_arg<CompatibleCompare,CompatibleKey,key_type>()); }
inline std::pair<Node*,Node*> ordered_index_equal_range( Node* top,Node* y,const KeyFromValue& key,const CompatibleKey& x, const CompatibleCompare& comp) { while(top){ if(comp(key(top->value()),x)){ top=Node::from_impl(top->right()); } else if(comp(x,key(top->value()))){ y=top; top=Node::from_impl(top->left()); } else{ return std::pair<Node*,Node*>( ordered_index_lower_bound(Node::from_impl(top->left()),top,key,x,comp), ordered_index_upper_bound(Node::from_impl(top->right()),y,key,x,comp)); } } return std::pair<Node*,Node*>(y,y); }