From 6ca61f000f507833bd90db76a36dd4f920c63d87 Mon Sep 17 00:00:00 2001 From: SquidDev Date: Mon, 16 Apr 2018 15:30:44 +0100 Subject: [PATCH] Minor performance improvements to WiredNetworkChange This should improve the performance of the common case, where one peripheral set is empty. --- .../shared/wired/WiredNetworkChange.java | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/main/java/dan200/computercraft/shared/wired/WiredNetworkChange.java b/src/main/java/dan200/computercraft/shared/wired/WiredNetworkChange.java index 4b53d24da..8cc20683d 100644 --- a/src/main/java/dan200/computercraft/shared/wired/WiredNetworkChange.java +++ b/src/main/java/dan200/computercraft/shared/wired/WiredNetworkChange.java @@ -10,6 +10,8 @@ import java.util.Map; public class WiredNetworkChange implements IWiredNetworkChange { + private static final WiredNetworkChange EMPTY = new WiredNetworkChange( Collections.emptyMap(), Collections.emptyMap() ); + private final Map removed; private final Map added; @@ -26,16 +28,30 @@ public class WiredNetworkChange implements IWiredNetworkChange public static WiredNetworkChange added( Map added ) { - return new WiredNetworkChange( Collections.emptyMap(), Collections.unmodifiableMap( added ) ); + return added.isEmpty() ? EMPTY : new WiredNetworkChange( Collections.emptyMap(), Collections.unmodifiableMap( added ) ); } public static WiredNetworkChange removed( Map removed ) { - return new WiredNetworkChange( Collections.unmodifiableMap( removed ), Collections.emptyMap() ); + return removed.isEmpty() ? EMPTY : new WiredNetworkChange( Collections.unmodifiableMap( removed ), Collections.emptyMap() ); } public static WiredNetworkChange changeOf( Map oldPeripherals, Map newPeripherals ) { + // Handle the trivial cases, where all peripherals have been added or removed. + if( oldPeripherals.isEmpty() && newPeripherals.isEmpty() ) + { + return EMPTY; + } + else if( oldPeripherals.isEmpty() ) + { + return new WiredNetworkChange( Collections.emptyMap(), newPeripherals ); + } + else if( newPeripherals.isEmpty() ) + { + return new WiredNetworkChange( oldPeripherals, Collections.emptyMap() ); + } + Map added = new HashMap<>( newPeripherals ); Map removed = new HashMap<>();