From be8004a2473bc09f4d0e279ce4961e421198b8d9 Mon Sep 17 00:00:00 2001 From: Yoav Sternberg Date: Thu, 11 Oct 2018 14:00:08 +0300 Subject: [PATCH] drop baseReverseDic since there are only 2 dicts Improve performance of code by dropping unneeded dict of dicts, hopefully allowing to `getCharFromInt.doFunc` to be inlined by the JVM. --- src/rufus/lzstring4java/LZString.java | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/src/rufus/lzstring4java/LZString.java b/src/rufus/lzstring4java/LZString.java index cdf66fe..6e4ac4a 100644 --- a/src/rufus/lzstring4java/LZString.java +++ b/src/rufus/lzstring4java/LZString.java @@ -15,18 +15,16 @@ public class LZString { private static char[] keyStrBase64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".toCharArray(); private static char[] keyStrUriSafe = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$".toCharArray(); - private static Map> baseReverseDic = new HashMap>(); + private static Map baseValueForBase64 = new HashMap(); + private static Map baseValueForUriSafe = new HashMap(); - private static char getBaseValue(char[] alphabet, Character character) { - Map map = baseReverseDic.get(alphabet); - if (map == null) { - map = new HashMap(); - baseReverseDic.put(alphabet, map); - for (int i = 0; i < alphabet.length; i++) { - map.put(alphabet[i], i); - } + static { + for (int i = 0; i < keyStrBase64.length; i++) { + baseValueForBase64.put(keyStrBase64[i], i); + } + for (int i = 0; i < keyStrUriSafe.length; i++) { + baseValueForUriSafe.put(keyStrUriSafe[i], i); } - return (char) map.get(character).intValue(); } public static String compressToBase64(String input) { @@ -59,7 +57,7 @@ public static String decompressFromBase64(final String inputStr) { return LZString._decompress(inputStr.length(), 32, new DecompressFunctionWrapper() { @Override public char doFunc(int index) { - return getBaseValue(keyStrBase64, inputStr.charAt(index)); + return (char) baseValueForBase64.get(inputStr.charAt(index)).intValue(); } }); } @@ -108,7 +106,7 @@ public static String decompressFromEncodedURIComponent(String inputStr) { return LZString._decompress(urlEncodedInputStr.length(), 32, new DecompressFunctionWrapper() { @Override public char doFunc(int index) { - return getBaseValue(keyStrUriSafe, urlEncodedInputStr.charAt(index)); + return (char) baseValueForUriSafe.get(urlEncodedInputStr.charAt(index)).intValue(); } }); } @@ -392,7 +390,7 @@ private static String _decompress(int length, int resetValue, DecompressFunction } bits = 0; - maxpower = (int) powerOf2(2); + maxpower = powerOf2(2); power = 1; while (power != maxpower) { resb = data.val & data.position; @@ -408,7 +406,7 @@ private static String _decompress(int length, int resetValue, DecompressFunction switch (next = bits) { case 0: bits = 0; - maxpower = (int) powerOf2(8); + maxpower = powerOf2(8); power=1; while (power != maxpower) { resb = data.val & data.position;