From 5dad41034b46f77b1f0ef5f972f354419f1f3287 Mon Sep 17 00:00:00 2001 From: md_5 Date: Sat, 31 May 2025 12:54:26 +1000 Subject: [PATCH] Migrate from trove to fastutil --- .../util/CaseInsensitiveHashingStrategy.java | 12 ++++++------ .../net/md_5/bungee/util/CaseInsensitiveMap.java | 6 +++--- .../net/md_5/bungee/util/CaseInsensitiveSet.java | 6 +++--- .../net/md_5/bungee/util/CaseInsensitiveTest.java | 4 ++-- protocol/pom.xml | 6 +++--- .../java/net/md_5/bungee/protocol/Protocol.java | 14 +++++++------- .../java/net/md_5/bungee/conf/Configuration.java | 3 +-- .../net/md_5/bungee/scheduler/BungeeScheduler.java | 8 ++++---- 8 files changed, 29 insertions(+), 30 deletions(-) diff --git a/api/src/main/java/net/md_5/bungee/util/CaseInsensitiveHashingStrategy.java b/api/src/main/java/net/md_5/bungee/util/CaseInsensitiveHashingStrategy.java index 72882d1a..5460cbfa 100644 --- a/api/src/main/java/net/md_5/bungee/util/CaseInsensitiveHashingStrategy.java +++ b/api/src/main/java/net/md_5/bungee/util/CaseInsensitiveHashingStrategy.java @@ -1,22 +1,22 @@ package net.md_5.bungee.util; -import gnu.trove.strategy.HashingStrategy; +import it.unimi.dsi.fastutil.Hash; import java.util.Locale; -class CaseInsensitiveHashingStrategy implements HashingStrategy +class CaseInsensitiveHashingStrategy implements Hash.Strategy { static final CaseInsensitiveHashingStrategy INSTANCE = new CaseInsensitiveHashingStrategy(); @Override - public int computeHashCode(Object object) + public int hashCode(String object) { - return ( (String) object ).toLowerCase( Locale.ROOT ).hashCode(); + return object.toLowerCase( Locale.ROOT ).hashCode(); } @Override - public boolean equals(Object o1, Object o2) + public boolean equals(String o1, String o2) { - return o1.equals( o2 ) || ( o1 instanceof String && o2 instanceof String && ( (String) o1 ).toLowerCase( Locale.ROOT ).equals( ( (String) o2 ).toLowerCase( Locale.ROOT ) ) ); + return o1.equals( o2 ) || ( o1 instanceof String && o2 instanceof String && o1.toLowerCase( Locale.ROOT ).equals( o2.toLowerCase( Locale.ROOT ) ) ); } } diff --git a/api/src/main/java/net/md_5/bungee/util/CaseInsensitiveMap.java b/api/src/main/java/net/md_5/bungee/util/CaseInsensitiveMap.java index ddfa7f52..7db76bf4 100644 --- a/api/src/main/java/net/md_5/bungee/util/CaseInsensitiveMap.java +++ b/api/src/main/java/net/md_5/bungee/util/CaseInsensitiveMap.java @@ -1,9 +1,9 @@ package net.md_5.bungee.util; -import gnu.trove.map.hash.TCustomHashMap; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenCustomHashMap; import java.util.Map; -public class CaseInsensitiveMap extends TCustomHashMap +public class CaseInsensitiveMap extends Object2ObjectOpenCustomHashMap { public CaseInsensitiveMap() @@ -13,6 +13,6 @@ public class CaseInsensitiveMap extends TCustomHashMap public CaseInsensitiveMap(Map map) { - super( CaseInsensitiveHashingStrategy.INSTANCE, map ); + super( map, CaseInsensitiveHashingStrategy.INSTANCE ); } } diff --git a/api/src/main/java/net/md_5/bungee/util/CaseInsensitiveSet.java b/api/src/main/java/net/md_5/bungee/util/CaseInsensitiveSet.java index 579c6fd9..d331abed 100644 --- a/api/src/main/java/net/md_5/bungee/util/CaseInsensitiveSet.java +++ b/api/src/main/java/net/md_5/bungee/util/CaseInsensitiveSet.java @@ -1,9 +1,9 @@ package net.md_5.bungee.util; -import gnu.trove.set.hash.TCustomHashSet; +import it.unimi.dsi.fastutil.objects.ObjectOpenCustomHashSet; import java.util.Collection; -public class CaseInsensitiveSet extends TCustomHashSet +public class CaseInsensitiveSet extends ObjectOpenCustomHashSet { public CaseInsensitiveSet() @@ -13,6 +13,6 @@ public class CaseInsensitiveSet extends TCustomHashSet public CaseInsensitiveSet(Collection collection) { - super( CaseInsensitiveHashingStrategy.INSTANCE, collection ); + super( collection, CaseInsensitiveHashingStrategy.INSTANCE ); } } diff --git a/api/src/test/java/net/md_5/bungee/util/CaseInsensitiveTest.java b/api/src/test/java/net/md_5/bungee/util/CaseInsensitiveTest.java index 7c6ec2f0..6d086ee8 100644 --- a/api/src/test/java/net/md_5/bungee/util/CaseInsensitiveTest.java +++ b/api/src/test/java/net/md_5/bungee/util/CaseInsensitiveTest.java @@ -13,12 +13,12 @@ public class CaseInsensitiveTest CaseInsensitiveMap map = new CaseInsensitiveMap<>(); map.put( "FOO", obj ); - assertTrue( map.contains( "foo" ) ); // Assert that contains is case insensitive + assertTrue( map.containsKey( "foo" ) ); // Assert that contains is case insensitive assertTrue( map.entrySet().iterator().next().getKey().equals( "FOO" ) ); // Assert that case is preserved // Assert that remove is case insensitive map.remove( "FoO" ); - assertFalse( map.contains( "foo" ) ); + assertFalse( map.containsKey( "foo" ) ); } @Test diff --git a/protocol/pom.xml b/protocol/pom.xml index beb3834f..9d68f817 100644 --- a/protocol/pom.xml +++ b/protocol/pom.xml @@ -52,9 +52,9 @@ compile - net.sf.trove4j - core - 3.1.0 + it.unimi.dsi + fastutil-core + 8.5.15 compile diff --git a/protocol/src/main/java/net/md_5/bungee/protocol/Protocol.java b/protocol/src/main/java/net/md_5/bungee/protocol/Protocol.java index 32ffa28f..c9600df5 100644 --- a/protocol/src/main/java/net/md_5/bungee/protocol/Protocol.java +++ b/protocol/src/main/java/net/md_5/bungee/protocol/Protocol.java @@ -2,10 +2,10 @@ package net.md_5.bungee.protocol; import com.google.common.base.Preconditions; import com.google.common.collect.Iterables; -import gnu.trove.map.TIntObjectMap; -import gnu.trove.map.TObjectIntMap; -import gnu.trove.map.hash.TIntObjectHashMap; -import gnu.trove.map.hash.TObjectIntHashMap; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; +import it.unimi.dsi.fastutil.objects.Object2IntMap; +import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import java.util.function.Supplier; import lombok.Data; import lombok.Getter; @@ -922,7 +922,7 @@ public enum Protocol { private final int protocolVersion; - private final TObjectIntMap> packetMap = new TObjectIntHashMap<>( MAX_PACKET_ID ); + private final Object2IntMap> packetMap = new Object2IntOpenHashMap<>( MAX_PACKET_ID ); @SuppressWarnings("unchecked") private final Supplier[] packetConstructors = new Supplier[ MAX_PACKET_ID ]; } @@ -944,7 +944,7 @@ public enum Protocol public static final class DirectionData { - private final TIntObjectMap protocols = new TIntObjectHashMap<>(); + private final Int2ObjectMap protocols = new Int2ObjectOpenHashMap<>(); // private final Protocol protocolPhase; @Getter @@ -966,7 +966,7 @@ public enum Protocol ProtocolData protocol = protocols.get( version ); if ( protocol == null && ( protocolPhase != Protocol.GAME ) ) { - protocol = Iterables.getFirst( protocols.valueCollection(), null ); + protocol = Iterables.getFirst( protocols.values(), null ); } return protocol; } diff --git a/proxy/src/main/java/net/md_5/bungee/conf/Configuration.java b/proxy/src/main/java/net/md_5/bungee/conf/Configuration.java index 95320050..b16d24e1 100644 --- a/proxy/src/main/java/net/md_5/bungee/conf/Configuration.java +++ b/proxy/src/main/java/net/md_5/bungee/conf/Configuration.java @@ -1,7 +1,6 @@ package net.md_5.bungee.conf; import com.google.common.base.Preconditions; -import gnu.trove.map.TMap; import java.io.File; import java.io.IOException; import java.util.Arrays; @@ -42,7 +41,7 @@ public class Configuration implements ProxyConfig /** * Set of all servers. */ - private TMap servers; + private Map servers; /** * Should we check minecraft.net auth. */ diff --git a/proxy/src/main/java/net/md_5/bungee/scheduler/BungeeScheduler.java b/proxy/src/main/java/net/md_5/bungee/scheduler/BungeeScheduler.java index fd0dabcf..db811f4e 100644 --- a/proxy/src/main/java/net/md_5/bungee/scheduler/BungeeScheduler.java +++ b/proxy/src/main/java/net/md_5/bungee/scheduler/BungeeScheduler.java @@ -4,9 +4,9 @@ import com.google.common.base.Preconditions; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; import com.google.common.collect.Multimaps; -import gnu.trove.TCollections; -import gnu.trove.map.TIntObjectMap; -import gnu.trove.map.hash.TIntObjectHashMap; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import it.unimi.dsi.fastutil.ints.Int2ObjectMaps; +import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import java.util.HashSet; import java.util.Set; import java.util.concurrent.ExecutorService; @@ -21,7 +21,7 @@ public class BungeeScheduler implements TaskScheduler private final Object lock = new Object(); private final AtomicInteger taskCounter = new AtomicInteger(); - private final TIntObjectMap tasks = TCollections.synchronizedMap( new TIntObjectHashMap() ); + private final Int2ObjectMap tasks = Int2ObjectMaps.synchronize( new Int2ObjectOpenHashMap<>() ); private final Multimap tasksByPlugin = Multimaps.synchronizedMultimap( HashMultimap.create() ); // private final Unsafe unsafe = new Unsafe()