summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swiften/Base/Algorithm.h')
-rw-r--r--Swiften/Base/Algorithm.h26
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);
+ }
}