X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Fcore%2Falgorithm.h;h=51c2369d623b58790f4ca556018d0162cb96a185;hp=d295d00ab844c02e943f8795904ee8f35367dfd4;hb=HEAD;hpb=01844ee2ba101c25655dd5eacf62ca9365f26f21 diff --git a/source/core/algorithm.h b/source/core/algorithm.h index d295d00..43bbaee 100644 --- a/source/core/algorithm.h +++ b/source/core/algorithm.h @@ -30,6 +30,20 @@ inline typename Container::const_iterator find_if(const Container &cont, Predica return std::find_if(cont.begin(), cont.end(), pred); } +template +struct ValueMatch +{ + const T &value; + + bool operator()(const T &v) { return v==value; } +}; + +template +inline bool any_equals(Container &cont, const T &value) +{ + return std::any_of(cont.begin(), cont.end(), ValueMatch{value}); +} + template inline typename Container::iterator lower_bound(Container &cont, const T &value) { @@ -108,21 +122,19 @@ 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>