From 43d68d45ad2a0c82e46c6801dd4f0e4dba38f55d Mon Sep 17 00:00:00 2001 From: zzz Date: Sat, 31 Aug 2024 16:03:11 +0000 Subject: [PATCH] Console: Consolidate hash comparators --- .../router/web/helpers/BanlistRenderer.java | 12 +---- .../router/web/helpers/HashComparator.java | 30 +++++++++++++ .../i2p/router/web/helpers/NetDbRenderer.java | 8 +--- .../i2p/router/web/helpers/PeerHelper.java | 4 +- .../web/helpers/ProfileOrganizerRenderer.java | 8 ++-- .../web/helpers/RouterInfoComparator.java | 44 +++++++++++++++++++ .../i2p/router/web/helpers/UDPSorters.java | 2 +- 7 files changed, 82 insertions(+), 26 deletions(-) create mode 100644 apps/routerconsole/java/src/net/i2p/router/web/helpers/HashComparator.java create mode 100644 apps/routerconsole/java/src/net/i2p/router/web/helpers/RouterInfoComparator.java diff --git a/apps/routerconsole/java/src/net/i2p/router/web/helpers/BanlistRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/BanlistRenderer.java index 8ab9a643e..3d53d9626 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/helpers/BanlistRenderer.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/BanlistRenderer.java @@ -11,7 +11,6 @@ package net.i2p.router.web.helpers; import java.io.IOException; import java.io.Serializable; import java.io.Writer; -import java.util.Comparator; import java.util.Map; import java.util.Set; import java.util.TreeMap; @@ -31,19 +30,10 @@ class BanlistRenderer { public BanlistRenderer(RouterContext context) { _context = context; } - - /** - * As of 0.9.29, sorts in true binary order, not base64 string - */ - private static class HashComparator implements Comparator, Serializable { - public int compare(Hash l, Hash r) { - return DataHelper.compareTo(l.getData(), r.getData()); - } - } public void renderStatusHTML(Writer out) throws IOException { StringBuilder buf = new StringBuilder(1024); - Map entries = new TreeMap(new HashComparator()); + Map entries = new TreeMap(HashComparator.getInstance()); entries.putAll(_context.banlist().getEntries()); buf.append("

").append(_t("Banned Peers")); diff --git a/apps/routerconsole/java/src/net/i2p/router/web/helpers/HashComparator.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/HashComparator.java new file mode 100644 index 000000000..82d5906f2 --- /dev/null +++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/HashComparator.java @@ -0,0 +1,30 @@ +package net.i2p.router.web.helpers; + +import java.io.Serializable; +import java.util.Comparator; + +import net.i2p.data.DataHelper; +import net.i2p.data.Hash; + +/** + * Sorts in true binary order, not Base64 string order. + * A-Z a-z 0-9 -~ + * + * @since 0.9.64 moved from BanlistRenderer + */ +class HashComparator implements Comparator, Serializable { + public static final HashComparator _instance = new HashComparator(); + + /** + * Thread safe, no state + */ + public static HashComparator getInstance() { return _instance; } + + public int compare(Hash l, Hash r) { + return DataHelper.compareTo(l.getData(), r.getData()); + } + + public static int comp(Hash l, Hash r) { + return DataHelper.compareTo(l.getData(), r.getData()); + } +} diff --git a/apps/routerconsole/java/src/net/i2p/router/web/helpers/NetDbRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/NetDbRenderer.java index 75aa60dc2..50bce6315 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/helpers/NetDbRenderer.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/NetDbRenderer.java @@ -92,12 +92,6 @@ class NetDbRenderer { } } - private static class RouterInfoComparator implements Comparator, Serializable { - public int compare(RouterInfo l, RouterInfo r) { - return l.getIdentity().getHash().toBase64().compareTo(r.getIdentity().getHash().toBase64()); - } - } - /** * One String must be non-null * @@ -930,7 +924,7 @@ class NetDbRenderer { boolean showStats = full || shortStats; // this means show the router infos Hash us = _context.routerHash(); - Set routers = new TreeSet(new RouterInfoComparator()); + Set routers = new TreeSet(RouterInfoComparator.getInstance()); routers.addAll(_context.netDb().getRouters()); int toSkip = pageSize * page; boolean nextpg = routers.size() > toSkip + pageSize; diff --git a/apps/routerconsole/java/src/net/i2p/router/web/helpers/PeerHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/PeerHelper.java index 29c0104a9..87e8e7181 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/helpers/PeerHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/PeerHelper.java @@ -549,9 +549,7 @@ public class PeerHelper extends HelperBase { public int compare(NTCPConnection l, NTCPConnection r) { if (l == null || r == null) throw new IllegalArgumentException(); - // base64 retains binary ordering - // UM, no it doesn't, but close enough - return l.getRemotePeer().calculateHash().toBase64().compareTo(r.getRemotePeer().calculateHash().toBase64()); + return HashComparator.comp(l.getRemotePeer().calculateHash(), r.getRemotePeer().calculateHash()); } } diff --git a/apps/routerconsole/java/src/net/i2p/router/web/helpers/ProfileOrganizerRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ProfileOrganizerRenderer.java index 1a268a49b..878fbf4ff 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/helpers/ProfileOrganizerRenderer.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ProfileOrganizerRenderer.java @@ -46,7 +46,7 @@ class ProfileOrganizerRenderer { long now = _context.clock().now(); long hideBefore = now - 45*60*1000; - Set order = new TreeSet(mode == 2 ? new HashComparator() : new ProfileComparator()); + Set order = new TreeSet(mode == 2 ? new ProfComparator() : new ProfileComparator()); int older = 0; int standard = 0; for (Hash peer : peers) { @@ -362,7 +362,7 @@ class ProfileOrganizerRenderer { out.flush(); } - private class ProfileComparator extends HashComparator { + private class ProfileComparator extends ProfComparator { public int compare(PeerProfile left, PeerProfile right) { if (_context.profileOrganizer().isFast(left.getPeer())) { if (_context.profileOrganizer().isFast(right.getPeer())) { @@ -395,9 +395,9 @@ class ProfileOrganizerRenderer { * As of 0.9.29, sorts in true binary order, not base64 string * @since 0.9.8 */ - private static class HashComparator implements Comparator, Serializable { + private static class ProfComparator implements Comparator, Serializable { public int compare(PeerProfile left, PeerProfile right) { - return DataHelper.compareTo(left.getPeer().getData(), right.getPeer().getData()); + return HashComparator.comp(left.getPeer(), right.getPeer()); } } diff --git a/apps/routerconsole/java/src/net/i2p/router/web/helpers/RouterInfoComparator.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/RouterInfoComparator.java new file mode 100644 index 000000000..a6fcb4a38 --- /dev/null +++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/RouterInfoComparator.java @@ -0,0 +1,44 @@ +package net.i2p.router.web.helpers; + +import java.io.Serializable; +import java.util.Comparator; + +import net.i2p.data.DataHelper; +import net.i2p.data.Hash; +import net.i2p.data.router.RouterInfo; + +/** + * Sorts in true binary order, not Base64 string order. + * A-Z a-z 0-9 -~ + * + * @since 0.9.64 + */ +class RouterInfoComparator implements Comparator, Serializable { + private static final long serialVersionUID = 1; + public static final RouterInfoComparator _instance = new RouterInfoComparator(); + + /** + * Thread safe, no state + */ + public static RouterInfoComparator getInstance() { return _instance; } + + /** + * @param l non-null + * @param r non-null + */ + public int compare(RouterInfo l, RouterInfo r) { + Hash lh = l.getIdentity().getHash(); + Hash rh = r.getIdentity().getHash(); + return HashComparator.comp(lh, rh); + } + + /** + * @param l non-null + * @param r non-null + */ + public static int comp(RouterInfo l, RouterInfo r) { + Hash lh = l.getIdentity().getHash(); + Hash rh = r.getIdentity().getHash(); + return HashComparator.comp(lh, rh); + } +} diff --git a/apps/routerconsole/java/src/net/i2p/router/web/helpers/UDPSorters.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/UDPSorters.java index eed809db9..7bbceca59 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/helpers/UDPSorters.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/UDPSorters.java @@ -287,7 +287,7 @@ class UDPSorters { static class PeerComparator implements Comparator, Serializable { public int compare(PeerState l, PeerState r) { - return DataHelper.compareTo(l.getRemotePeer().getData(), r.getRemotePeer().getData()); + return HashComparator.comp(l.getRemotePeer(), r.getRemotePeer()); } }