From 413a98eb218d85ca57d8e12c47406aee58800bef Mon Sep 17 00:00:00 2001 From: Joerg Schaible Date: Thu, 27 Sep 2012 22:53:46 +0000 Subject: [PATCH] Use conversion tables for boolean arrays. git-svn-id: https://svn.apache.org/repos/asf/commons/proper/lang/trunk@1391258 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/commons/lang3/Conversion.java | 125 ++++++++++++------ 1 file changed, 88 insertions(+), 37 deletions(-) diff --git a/src/main/java/org/apache/commons/lang3/Conversion.java b/src/main/java/org/apache/commons/lang3/Conversion.java index 9fce15753..1505f496e 100644 --- a/src/main/java/org/apache/commons/lang3/Conversion.java +++ b/src/main/java/org/apache/commons/lang3/Conversion.java @@ -18,7 +18,6 @@ *******************************************************************************/ package org.apache.commons.lang3; - /** *

* Static methods to convert a type into another, with endianness and bit ordering awareness. @@ -56,6 +55,24 @@ package org.apache.commons.lang3; */ public class Conversion { + + private static final boolean[] BOOL_FFFF = {false, false, false, false}; + private static final boolean[] BOOL_TFFF = {true, false, false, false}; + private static final boolean[] BOOL_FTFF = {false, true, false, false}; + private static final boolean[] BOOL_TTFF = {true, true, false, false}; + private static final boolean[] BOOL_FFTF = {false, false, true, false}; + private static final boolean[] BOOL_TFTF = {true, false, true, false}; + private static final boolean[] BOOL_FTTF = {false, true, true, false}; + private static final boolean[] BOOL_TTTF = {true, true, true, false}; + private static final boolean[] BOOL_FFFT = {false, false, false, true}; + private static final boolean[] BOOL_TFFT = {true, false, false, true}; + private static final boolean[] BOOL_FTFT = {false, true, false, true}; + private static final boolean[] BOOL_TTFT = {true, true, false, true}; + private static final boolean[] BOOL_FFTT = {false, false, true, true}; + private static final boolean[] BOOL_TFTT = {true, false, true, true}; + private static final boolean[] BOOL_FTTT = {false, true, true, true}; + private static final boolean[] BOOL_TTTT = {true, true, true, true}; + /** *

* Converts a hexadecimal digit into an int using the default (Lsb0) bit ordering. @@ -184,50 +201,68 @@ public class Conversion { * @return a boolean array with the binary representation of hexDigit */ public static boolean[] hexDigitToBools(char hexDigit) { + final boolean[] array; switch (hexDigit) { case '0': - return new boolean[]{false, false, false, false}; + array = BOOL_FFFF; + break; case '1': - return new boolean[]{true, false, false, false}; + array = BOOL_TFFF; + break; case '2': - return new boolean[]{false, true, false, false}; + array = BOOL_FTFF; + break; case '3': - return new boolean[]{true, true, false, false}; + array = BOOL_TTFF; + break; case '4': - return new boolean[]{false, false, true, false}; + array = BOOL_FFTF; + break; case '5': - return new boolean[]{true, false, true, false}; + array = BOOL_TFTF; + break; case '6': - return new boolean[]{false, true, true, false}; + array = BOOL_FTTF; + break; case '7': - return new boolean[]{true, true, true, false}; + array = BOOL_TTTF; + break; case '8': - return new boolean[]{false, false, false, true}; + array = BOOL_FFFT; + break; case '9': - return new boolean[]{true, false, false, true}; + array = BOOL_TFFT; + break; case 'a':// fall through case 'A': - return new boolean[]{false, true, false, true}; + array = BOOL_FTFT; + break; case 'b':// fall through case 'B': - return new boolean[]{true, true, false, true}; + array = BOOL_TTFT; + break; case 'c':// fall through case 'C': - return new boolean[]{false, false, true, true}; + array = BOOL_FFTT; + break; case 'd':// fall through case 'D': - return new boolean[]{true, false, true, true}; + array = BOOL_TFTT; + break; case 'e':// fall through case 'E': - return new boolean[]{false, true, true, true}; + array = BOOL_FTTT; + break; case 'f':// fall through case 'F': - return new boolean[]{true, true, true, true}; + array = BOOL_TTTT; + break; default: throw new IllegalArgumentException("Cannot interpret '" + hexDigit + "' as a hexadecimal digit"); } + return array.clone(); } /** @@ -242,50 +277,68 @@ public class Conversion { * @return a boolean array with the binary representation of hexDigit */ public static boolean[] hexDigitM0ToBools(char hexDigit) { + final boolean[] array; switch (hexDigit) { case '0': - return new boolean[]{false, false, false, false}; + array = BOOL_FFFF; + break; case '1': - return new boolean[]{false, false, false, true}; + array = BOOL_FFFT; + break; case '2': - return new boolean[]{false, false, true, false}; + array = BOOL_FFTF; + break; case '3': - return new boolean[]{false, false, true, true}; + array = BOOL_FFTT; + break; case '4': - return new boolean[]{false, true, false, false}; + array = BOOL_FTFF; + break; case '5': - return new boolean[]{false, true, false, true}; + array = BOOL_FTFT; + break; case '6': - return new boolean[]{false, true, true, false}; + array = BOOL_FTTF; + break; case '7': - return new boolean[]{false, true, true, true}; + array = BOOL_FTTT; + break; case '8': - return new boolean[]{true, false, false, false}; + array = BOOL_TFFF; + break; case '9': - return new boolean[]{true, false, false, true}; + array = BOOL_TFFT; + break; case 'a':// fall through case 'A': - return new boolean[]{true, false, true, false}; + array = BOOL_TFTF; + break; case 'b':// fall through case 'B': - return new boolean[]{true, false, true, true}; + array = BOOL_TFTT; + break; case 'c':// fall through case 'C': - return new boolean[]{true, true, false, false}; + array = BOOL_TTFF; + break; case 'd':// fall through case 'D': - return new boolean[]{true, true, false, true}; + array = BOOL_TTFT; + break; case 'e':// fall through case 'E': - return new boolean[]{true, true, true, false}; + array = BOOL_TTTF; + break; case 'f':// fall through case 'F': - return new boolean[]{true, true, true, true}; + array = BOOL_TTTT; + break; default: throw new IllegalArgumentException("Cannot interpret '" + hexDigit + "' as a hexadecimal digit"); } + return array.clone(); } /** @@ -562,8 +615,7 @@ public class Conversion { case 0xF: return 'F'; default: - throw new IllegalArgumentException("nibble value not between 0 and 15: " - + nibble); + throw new IllegalArgumentException("nibble value not between 0 and 15: " + nibble); } } @@ -619,8 +671,7 @@ public class Conversion { case 0xF: return 'F'; default: - throw new IllegalArgumentException("nibble value not between 0 and 15: " - + nibble); + throw new IllegalArgumentException("nibble value not between 0 and 15: " + nibble); } }