Reformatted everything. Eclipse built-in Linewrapping/Comments 140 chars
[Mograsim.git] / era.mi / src / era / mi / logic / Util.java
index 6f1b93f..4a03410 100644 (file)
@@ -2,27 +2,24 @@ package era.mi.logic;
 
 import java.util.Arrays;
 
-public final class Util
-{
-       
+public final class Util {
+
        @SuppressWarnings("unchecked")
-       public static <T> T[] concat(T[]... arrays)
-       {
-               if(arrays.length == 0)
+       public static <T> T[] concat(T[]... arrays) {
+               if (arrays.length == 0)
                        throw new IllegalArgumentException("Cannot concatenate 0 arrays.");
-               
+
                int length = 0;
-               for(T[] array : arrays)
+               for (T[] array : arrays)
                        length += array.length;
-               
+
                T[] newArray = Arrays.copyOf(arrays[0], length);
                int appendIndex = arrays[0].length;
-               for(int i = 1; i < arrays.length; i++)
-               {
+               for (int i = 1; i < arrays.length; i++) {
                        System.arraycopy(arrays[i], 0, newArray, appendIndex, arrays[i].length);
                        appendIndex += arrays[i].length;
                }
-               
+
                return newArray;
        }
 
@@ -47,46 +44,52 @@ public final class Util
 //             
 //             return (T[][]) newArray;
 //     }
-       
-       public static Bit[] and(Bit[] a, Bit[] b)
-       {
+
+       public static Bit[] and(Bit[] a, Bit[] b) {
                return binBitOp(a, b, (bA, bB) -> Bit.and(bA, bB));
        }
-       
-       public static Bit[] or(Bit[] a, Bit[] b)
-       {
+
+       public static Bit[] or(Bit[] a, Bit[] b) {
                return binBitOp(a, b, (bA, bB) -> Bit.or(bA, bB));
        }
-       
-       public static Bit[] xor(Bit[] a, Bit[] b)
-       {
+
+       public static Bit[] xor(Bit[] a, Bit[] b) {
                return binBitOp(a, b, (bA, bB) -> Bit.xor(bA, bB));
        }
-       
-       private static Bit[] binBitOp(Bit[] a, Bit[] b, BitOp op)
-       {
-               if(a.length != b.length)
+
+       private static Bit[] binBitOp(Bit[] a, Bit[] b, BitOp op) {
+               if (a.length != b.length)
                        throw new IllegalArgumentException("Bit Arrays were not of equal length.");
                Bit[] out = new Bit[a.length];
-               for(int i = 0; i < a.length; i++)
-               {
+               for (int i = 0; i < a.length; i++) {
                        out[i] = op.execute(a[i], b[i]);
                }
                return out;
        }
-       
-       public static Bit[] not(Bit[] a)
-       {
+
+       public static Bit[] not(Bit[] a) {
                Bit[] out = new Bit[a.length];
-               for(int i = 0; i < a.length; i++)
-               {
+               for (int i = 0; i < a.length; i++) {
                        out[i] = a[i].not();
                }
                return out;
        }
-       
-       interface BitOp
-       {
+
+       /**
+        * uses the {@link Bit#combineWith(Bit)} method, does not create a new array, the result is stored in the first array.
+        * 
+        * @author Christian Femers
+        */
+       public static Bit[] combineInto(Bit[] dest, Bit[] addition) {
+               if (dest.length != addition.length)
+                       throw new IllegalArgumentException("Bit Arrays were not of equal length.");
+               for (int i = 0; i < addition.length; i++) {
+                       dest[i] = dest[i].combineWith(addition[i]);
+               }
+               return dest;
+       }
+
+       interface BitOp {
                Bit execute(Bit a, Bit b);
        }
 }