aboutsummaryrefslogtreecommitdiff
path: root/src/cz/crcs/ectester/data/EC_Store.java
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/cz/crcs/ectester/data/EC_Store.java31
1 files changed, 27 insertions, 4 deletions
diff --git a/src/cz/crcs/ectester/data/EC_Store.java b/src/cz/crcs/ectester/data/EC_Store.java
index 63a0275..d2c8224 100644
--- a/src/cz/crcs/ectester/data/EC_Store.java
+++ b/src/cz/crcs/ectester/data/EC_Store.java
@@ -22,6 +22,7 @@ import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
+import java.util.function.Function;
/**
* @author Jan Jancar johny@neuromancer.sk
@@ -318,12 +319,12 @@ public class EC_Store {
return getObject(objClass, query.substring(0, split), query.substring(split + 1));
}
- public static <T extends EC_Key> List<Map.Entry<EC_Curve, List<T>>> mapToCurve(Collection<T> keys) {
+ private static <T extends EC_Data> List<Map.Entry<EC_Curve, List<T>>> mapKeyToCurve(Collection<T> data, Function<T, String> getter) {
Map<EC_Curve, List<T>> curves = new TreeMap<>();
- for (T key : keys) {
- EC_Curve curve = EC_Store.getInstance().getObject(EC_Curve.class, key.getCurve());
+ for (T item : data) {
+ EC_Curve curve = EC_Store.getInstance().getObject(EC_Curve.class, getter.apply(item));
List<T> curveKeys = curves.getOrDefault(curve, new LinkedList<>());
- curveKeys.add(key);
+ curveKeys.add(item);
curves.putIfAbsent(curve, curveKeys);
}
List<Map.Entry<EC_Curve, List<T>>> curveList = new LinkedList<>();
@@ -333,6 +334,28 @@ public class EC_Store {
return curveList;
}
+ public static <T extends EC_Key> List<Map.Entry<EC_Curve, List<T>>> mapKeyToCurve(Collection<T> keys) {
+ return mapKeyToCurve(keys, EC_Key::getCurve);
+ }
+
+ public static List<Map.Entry<EC_Curve, List<EC_KAResult>>> mapResultToCurve(Collection<EC_KAResult> results) {
+ return mapKeyToCurve(results, EC_KAResult::getCurve);
+ }
+
+ public static <T extends EC_Data> List<Map.Entry<String, List<T>>> mapToPrefix(Collection<T> data) {
+ Map<String, List<T>> groups = new TreeMap<>();
+ for (T item : data) {
+ String prefix = item.getId().split("/")[0];
+ List<T> group = groups.getOrDefault(prefix, new LinkedList<>());
+ group.add(item);
+ groups.putIfAbsent(prefix, group);
+ }
+ List<Map.Entry<String, List<T>>> result = new LinkedList<>();
+ result.addAll(groups.entrySet());
+ result.sort(Comparator.comparing(Map.Entry::getKey));
+ return result;
+ }
+
public static EC_Store getInstance() {
if (instance == null) {
instance = new EC_Store();