Author: joehni
Date: Thu Sep 27 22:53:46 2012
New Revision: 1391258

URL: http://svn.apache.org/viewvc?rev=1391258&view=rev
Log:
Use conversion tables for boolean arrays.

Modified:
    
commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/Conversion.java

Modified: 
commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/Conversion.java
URL: 
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/Conversion.java?rev=1391258&r1=1391257&r2=1391258&view=diff
==============================================================================
--- 
commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/Conversion.java
 (original)
+++ 
commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/Conversion.java
 Thu Sep 27 22:53:46 2012
@@ -18,7 +18,6 @@
  
*******************************************************************************/
 package org.apache.commons.lang3;
 
-
 /**
  * <p>
  * 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};
+
     /**
      * <p>
      * 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 
<code>hexDigit</code>
      */
     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 
<code>hexDigit</code>
      */
     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);
         }
     }
 


Reply via email to