diff options
Diffstat (limited to 'Swiften/Base/Algorithm.h')
-rw-r--r-- | Swiften/Base/Algorithm.h | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/Swiften/Base/Algorithm.h b/Swiften/Base/Algorithm.h index 108dbe3..ee761b7 100644 --- a/Swiften/Base/Algorithm.h +++ b/Swiften/Base/Algorithm.h @@ -1,32 +1,32 @@ /* - * Copyright (c) 2011-2014 Isode Limited. + * Copyright (c) 2011-2018 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ #pragma once #include <algorithm> #include <list> #include <map> #include <string> #include <vector> namespace Swift { /* * Generic erase() */ namespace Detail { struct VectorCategory {}; struct ListCategory {}; struct MapCategory {}; template<typename T> struct ContainerTraits; template<typename A, typename B> struct ContainerTraits< std::vector<A, B> > { typedef VectorCategory Category; }; @@ -133,31 +133,55 @@ namespace Swift { bool operator()(const std::pair<K,V>& pair) const { return pair.first == value; } private: K value; }; template<typename K, typename V> class PairSecondEquals { public: PairSecondEquals(const V& value) : value(value) { } bool operator()(const std::pair<K,V>& pair) const { return pair.second == value; } private: V value; }; template <typename Map> bool key_compare(Map const& lhs, Map const& rhs) { auto pred = [](decltype(*lhs.begin()) a, decltype(a) b) { return a.first == b.first; }; return lhs.size() == rhs.size() && std::equal(lhs.begin(), lhs.end(), rhs.begin(), pred); } + + /** + * Ranges + */ + template <typename T> + class range_t { + public: + range_t(T b, T e) : b_(b), e_(e) {} + + T begin() { + return b_; + } + T end() { + return e_; + } + private: + T b_; + T e_; + }; + + template <typename T> + range_t<T> range(T b, T e) { + return range_t<T>(b, e); + } } |