X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcore%2Falgorithm.h;h=251a81ef1113b7f63cc849d1e78302bf5c941449;hb=39da82b967c70282973025e4b12186625e29fe26;hp=268bf7b89f9ca54ac56ae6ff7d51e4f2fbfb64cc;hpb=31ab69904294bcbc0f38e4d401fcca620f7c6f61;p=libs%2Fcore.git diff --git a/source/core/algorithm.h b/source/core/algorithm.h index 268bf7b..251a81e 100644 --- a/source/core/algorithm.h +++ b/source/core/algorithm.h @@ -2,6 +2,7 @@ #define MSP_CORE_ALGORITHM_H_ #include +#include namespace Msp { @@ -107,68 +108,66 @@ struct MemberMatch const T &value; T C::*mem_ptr; - MemberMatch(const T &v, T C::*p): value(v), mem_ptr(p) { } - bool operator()(const C &obj) { return obj.*mem_ptr==value; } }; template inline typename Container::iterator find_member(Container &cont, const T &value, T Container::value_type::*mp) { - return find_if(cont, MemberMatch(value, mp)); + return find_if(cont, MemberMatch{ value, mp }); } template inline typename Container::const_iterator find_member(const Container &cont, const T &value, T Container::value_type::*mp) { - return find_if(cont, MemberMatch(value, mp)); + return find_if(cont, MemberMatch{ value, mp }); } -template +template> struct MemberCompare { T C::*mem_ptr; + P pred; - MemberCompare(T C::*p): mem_ptr(p) { } - - bool operator()(const C &obj, const T &v) { return obj.*mem_ptr inline typename Container::iterator lower_bound_member(Container &cont, const T &value, T Container::value_type::*mp) { - return lower_bound(cont, value, MemberCompare(mp)); + return lower_bound(cont, value, MemberCompare{ mp }); } template inline typename Container::const_iterator lower_bound_member(const Container &cont, const T &value, T Container::value_type::*mp) { - return lower_bound(cont, value, MemberCompare(mp)); + return lower_bound(cont, value, MemberCompare{ mp }); } template inline typename Container::iterator upper_bound_member(Container &cont, const T &value, T Container::value_type::*mp) { - return upper_bound(cont, value, MemberCompare(mp)); + return upper_bound(cont, value, MemberCompare{ mp }); } template inline typename Container::const_iterator upper_bound_member(const Container &cont, const T &value, T Container::value_type::*mp) { - return upper_bound(cont, value, MemberCompare(mp)); + return upper_bound(cont, value, MemberCompare{ mp }); } template inline void sort_member(Container &cont, T Container::value_type::*mp) { - sort(cont, MemberCompare(mp)); + sort(cont, MemberCompare{ mp }); } template inline void stable_sort_member(Container &cont, T Container::value_type::*mp) { - stable_sort(cont, MemberCompare(mp)); + stable_sort(cont, MemberCompare{ mp }); } template