]> git.tdb.fi Git - libs/core.git/blobdiff - source/core/algorithm.h
Add dllimport to the declaration of getenv_s on Windows
[libs/core.git] / source / core / algorithm.h
index b79114e9d7a8de906b7be40e4c684e1a9758280a..d295d00ab844c02e943f8795904ee8f35367dfd4 100644 (file)
@@ -2,6 +2,7 @@
 #define MSP_CORE_ALGORITHM_H_
 
 #include <algorithm>
+#include <functional>
 
 namespace Msp {
 
@@ -124,15 +125,17 @@ inline typename Container::const_iterator find_member(const Container &cont, con
        return find_if(cont, MemberMatch<typename Container::value_type, T>(value, mp));
 }
 
-template<typename C, typename T>
+template<typename C, typename T, typename P=std::less<T>>
 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<v; }
-       bool operator()(const C &obj1, const C &obj2) { return obj1.*mem_ptr<obj2.*mem_ptr; }
+       bool operator()(const C &obj, const T &v) { return pred(obj.*mem_ptr, v); }
+       bool operator()(const T &v, const C &obj) { return pred(v, obj.*mem_ptr); }
+       bool operator()(const C &obj1, const C &obj2) { return pred(obj1.*mem_ptr, obj2.*mem_ptr); }
 };
 
 template<typename Container, typename T>
@@ -171,6 +174,12 @@ inline void stable_sort_member(Container &cont, T Container::value_type::*mp)
        stable_sort(cont, MemberCompare<typename Container::value_type, T>(mp));
 }
 
+template<typename Container, typename Predicate>
+inline void transform(Container &cont, Predicate pred)
+{
+       transform(cont.begin(), cont.end(), cont.begin(), pred);
+}
+
 } // namespace Msp
 
 #endif