Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/jangernert/FeedReader.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/backend/decsync/libdecsync/src/Utils.vala')
-rw-r--r--plugins/backend/decsync/libdecsync/src/Utils.vala27
1 files changed, 27 insertions, 0 deletions
diff --git a/plugins/backend/decsync/libdecsync/src/Utils.vala b/plugins/backend/decsync/libdecsync/src/Utils.vala
index c9c9a4ae..92d17042 100644
--- a/plugins/backend/decsync/libdecsync/src/Utils.vala
+++ b/plugins/backend/decsync/libdecsync/src/Utils.vala
@@ -54,6 +54,7 @@ public Json.Node objectToNode(Json.Object input)
return node;
}
+[Version (deprecated = true, deprecated_since = "1.1.1", replacement = "groupByPath")]
public Gee.MultiMap<K, V> groupBy<T, K, V>(Gee.Collection<T> inputs, Gee.MapFunc<K, T> k, Gee.MapFunc<V, T>? f = null)
{
var resultsMap = new Gee.HashMultiMap<K, V>();
@@ -66,3 +67,29 @@ public Gee.MultiMap<K, V> groupBy<T, K, V>(Gee.Collection<T> inputs, Gee.MapFunc
return resultsMap;
}
+
+public int pathCompare(Gee.List<string> lhs, Gee.List<string> rhs)
+{
+ for (int i = 0; i < lhs.size && i < rhs.size; ++i) {
+ if (lhs[i] < rhs[i]) return -1;
+ if (lhs[i] > rhs[i]) return 1;
+ }
+ if (lhs.size < rhs.size) return -1;
+ if (lhs.size > rhs.size) return 1;
+ return 0;
+}
+
+public Gee.MultiMap<Gee.List<string>, V> groupByPath<T, V>(
+ Gee.Collection<T> inputs,
+ Gee.MapFunc<Gee.List<string>, T> toPath,
+ Gee.MapFunc<V, T>? f = null)
+{
+ var resultsMap = new Gee.TreeMultiMap<Gee.List<string>, V>(pathCompare);
+ foreach (var input in inputs)
+ {
+ var path = toPath(input);
+ var value = f == null ? input : f(input);
+ resultsMap.@set(path, value);
+ }
+ return resultsMap;
+}