forked from boostorg/intrusive
Add customized return type for tree_value_compare
This commit is contained in:
@@ -45,7 +45,7 @@ struct disable_if_smartref_to
|
|||||||
|
|
||||||
//This function object takes a KeyCompare function object
|
//This function object takes a KeyCompare function object
|
||||||
//and compares values that contains keys using KeyOfValue
|
//and compares values that contains keys using KeyOfValue
|
||||||
template< class ValuePtr, class KeyCompare, class KeyOfValue
|
template< class ValuePtr, class KeyCompare, class KeyOfValue, class Ret = bool
|
||||||
, bool = boost::intrusive::detail::is_same
|
, bool = boost::intrusive::detail::is_same
|
||||||
<typename boost::movelib::pointer_element<ValuePtr>::type, typename KeyOfValue::type>::value >
|
<typename boost::movelib::pointer_element<ValuePtr>::type, typename KeyOfValue::type>::value >
|
||||||
struct tree_value_compare
|
struct tree_value_compare
|
||||||
@@ -80,41 +80,52 @@ struct tree_value_compare
|
|||||||
BOOST_INTRUSIVE_FORCEINLINE const key_compare &key_comp() const
|
BOOST_INTRUSIVE_FORCEINLINE const key_compare &key_comp() const
|
||||||
{ return static_cast<const key_compare &>(*this); }
|
{ return static_cast<const key_compare &>(*this); }
|
||||||
|
|
||||||
BOOST_INTRUSIVE_FORCEINLINE bool operator()(const key_type &key1, const key_type &key2) const
|
BOOST_INTRUSIVE_FORCEINLINE Ret operator()(const key_type &key) const
|
||||||
|
{ return this->key_comp()(key); }
|
||||||
|
|
||||||
|
BOOST_INTRUSIVE_FORCEINLINE Ret operator()(const value_type &value) const
|
||||||
|
{ return this->key_comp()(KeyOfValue()(value)); }
|
||||||
|
|
||||||
|
template<class U>
|
||||||
|
BOOST_INTRUSIVE_FORCEINLINE Ret operator()( const U &nonkey
|
||||||
|
, typename disable_if_smartref_to<U, ValuePtr>::type* = 0) const
|
||||||
|
{ return this->key_comp()(nonkey); }
|
||||||
|
|
||||||
|
BOOST_INTRUSIVE_FORCEINLINE Ret operator()(const key_type &key1, const key_type &key2) const
|
||||||
{ return this->key_comp()(key1, key2); }
|
{ return this->key_comp()(key1, key2); }
|
||||||
|
|
||||||
BOOST_INTRUSIVE_FORCEINLINE bool operator()(const value_type &value1, const value_type &value2) const
|
BOOST_INTRUSIVE_FORCEINLINE Ret operator()(const value_type &value1, const value_type &value2) const
|
||||||
{ return this->key_comp()(KeyOfValue()(value1), KeyOfValue()(value2)); }
|
{ return this->key_comp()(KeyOfValue()(value1), KeyOfValue()(value2)); }
|
||||||
|
|
||||||
BOOST_INTRUSIVE_FORCEINLINE bool operator()(const key_type &key1, const value_type &value2) const
|
BOOST_INTRUSIVE_FORCEINLINE Ret operator()(const key_type &key1, const value_type &value2) const
|
||||||
{ return this->key_comp()(key1, KeyOfValue()(value2)); }
|
{ return this->key_comp()(key1, KeyOfValue()(value2)); }
|
||||||
|
|
||||||
BOOST_INTRUSIVE_FORCEINLINE bool operator()(const value_type &value1, const key_type &key2) const
|
BOOST_INTRUSIVE_FORCEINLINE Ret operator()(const value_type &value1, const key_type &key2) const
|
||||||
{ return this->key_comp()(KeyOfValue()(value1), key2); }
|
{ return this->key_comp()(KeyOfValue()(value1), key2); }
|
||||||
|
|
||||||
template<class U>
|
template<class U>
|
||||||
BOOST_INTRUSIVE_FORCEINLINE bool operator()( const key_type &key1, const U &nonkey2
|
BOOST_INTRUSIVE_FORCEINLINE Ret operator()( const key_type &key1, const U &nonkey2
|
||||||
, typename disable_if_smartref_to<U, ValuePtr>::type* = 0) const
|
, typename disable_if_smartref_to<U, ValuePtr>::type* = 0) const
|
||||||
{ return this->key_comp()(key1, nonkey2); }
|
{ return this->key_comp()(key1, nonkey2); }
|
||||||
|
|
||||||
template<class U>
|
template<class U>
|
||||||
BOOST_INTRUSIVE_FORCEINLINE bool operator()( const U &nonkey1, const key_type &key2
|
BOOST_INTRUSIVE_FORCEINLINE Ret operator()( const U &nonkey1, const key_type &key2
|
||||||
, typename disable_if_smartref_to<U, ValuePtr>::type* = 0) const
|
, typename disable_if_smartref_to<U, ValuePtr>::type* = 0) const
|
||||||
{ return this->key_comp()(nonkey1, key2); }
|
{ return this->key_comp()(nonkey1, key2); }
|
||||||
|
|
||||||
template<class U>
|
template<class U>
|
||||||
BOOST_INTRUSIVE_FORCEINLINE bool operator()( const value_type &value1, const U &nonvalue2
|
BOOST_INTRUSIVE_FORCEINLINE Ret operator()( const value_type &value1, const U &nonvalue2
|
||||||
, typename disable_if_smartref_to<U, ValuePtr>::type* = 0) const
|
, typename disable_if_smartref_to<U, ValuePtr>::type* = 0) const
|
||||||
{ return this->key_comp()(KeyOfValue()(value1), nonvalue2); }
|
{ return this->key_comp()(KeyOfValue()(value1), nonvalue2); }
|
||||||
|
|
||||||
template<class U>
|
template<class U>
|
||||||
BOOST_INTRUSIVE_FORCEINLINE bool operator()( const U &nonvalue1, const value_type &value2
|
BOOST_INTRUSIVE_FORCEINLINE Ret operator()( const U &nonvalue1, const value_type &value2
|
||||||
, typename disable_if_smartref_to<U, ValuePtr>::type* = 0) const
|
, typename disable_if_smartref_to<U, ValuePtr>::type* = 0) const
|
||||||
{ return this->key_comp()(nonvalue1, KeyOfValue()(value2)); }
|
{ return this->key_comp()(nonvalue1, KeyOfValue()(value2)); }
|
||||||
};
|
};
|
||||||
|
|
||||||
template<class ValuePtr, class KeyCompare, class KeyOfValue>
|
template<class ValuePtr, class KeyCompare, class KeyOfValue, class Ret>
|
||||||
struct tree_value_compare<ValuePtr, KeyCompare, KeyOfValue, true>
|
struct tree_value_compare<ValuePtr, KeyCompare, KeyOfValue, Ret, true>
|
||||||
: public boost::intrusive::detail::ebo_functor_holder<KeyCompare>
|
: public boost::intrusive::detail::ebo_functor_holder<KeyCompare>
|
||||||
{
|
{
|
||||||
typedef typename
|
typedef typename
|
||||||
@@ -147,16 +158,24 @@ struct tree_value_compare<ValuePtr, KeyCompare, KeyOfValue, true>
|
|||||||
BOOST_INTRUSIVE_FORCEINLINE const key_compare &key_comp() const
|
BOOST_INTRUSIVE_FORCEINLINE const key_compare &key_comp() const
|
||||||
{ return static_cast<const key_compare &>(*this); }
|
{ return static_cast<const key_compare &>(*this); }
|
||||||
|
|
||||||
BOOST_INTRUSIVE_FORCEINLINE bool operator()(const key_type &key1, const key_type &key2) const
|
BOOST_INTRUSIVE_FORCEINLINE Ret operator()(const key_type &key) const
|
||||||
|
{ return this->key_comp()(key); }
|
||||||
|
|
||||||
|
template<class U>
|
||||||
|
BOOST_INTRUSIVE_FORCEINLINE Ret operator()( const U &nonkey
|
||||||
|
, typename disable_if_smartref_to<U, ValuePtr>::type* = 0) const
|
||||||
|
{ return this->key_comp()(nonkey); }
|
||||||
|
|
||||||
|
BOOST_INTRUSIVE_FORCEINLINE Ret operator()(const key_type &key1, const key_type &key2) const
|
||||||
{ return this->key_comp()(key1, key2); }
|
{ return this->key_comp()(key1, key2); }
|
||||||
|
|
||||||
template<class U>
|
template<class U>
|
||||||
BOOST_INTRUSIVE_FORCEINLINE bool operator()( const key_type &key1, const U &nonkey2
|
BOOST_INTRUSIVE_FORCEINLINE Ret operator()( const key_type &key1, const U &nonkey2
|
||||||
, typename disable_if_smartref_to<U, ValuePtr>::type* = 0) const
|
, typename disable_if_smartref_to<U, ValuePtr>::type* = 0) const
|
||||||
{ return this->key_comp()(key1, nonkey2); }
|
{ return this->key_comp()(key1, nonkey2); }
|
||||||
|
|
||||||
template<class U>
|
template<class U>
|
||||||
BOOST_INTRUSIVE_FORCEINLINE bool operator()(const U &nonkey1, const key_type &key2
|
BOOST_INTRUSIVE_FORCEINLINE Ret operator()(const U &nonkey1, const key_type &key2
|
||||||
, typename disable_if_smartref_to<U, ValuePtr>::type* = 0) const
|
, typename disable_if_smartref_to<U, ValuePtr>::type* = 0) const
|
||||||
{ return this->key_comp()(nonkey1, key2); }
|
{ return this->key_comp()(nonkey1, key2); }
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user