Integrated new types, tests still work, not used yet
[Mograsim.git] / era.mi / src / era / mi / logic / Util.java
index 6f1b93f..d621a44 100644 (file)
@@ -2,27 +2,29 @@ package era.mi.logic;
 
 import java.util.Arrays;
 
+import era.mi.logic.types.Bit;
+
 public final class Util
 {
-       
+
        @SuppressWarnings("unchecked")
        public static <T> T[] concat(T[]... arrays)
        {
-               if(arrays.length == 0)
+               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,44 +49,60 @@ public final class Util
 //             
 //             return (T[][]) newArray;
 //     }
-       
+
        public static Bit[] and(Bit[] a, Bit[] b)
        {
-               return binBitOp(a, b, (bA, bB) -> Bit.and(bA, bB));
+               return binBitOp(a, b, Bit::and);
        }
-       
+
        public static Bit[] or(Bit[] a, Bit[] b)
        {
-               return binBitOp(a, b, (bA, bB) -> Bit.or(bA, bB));
+               return binBitOp(a, b, Bit::or);
        }
-       
+
        public static Bit[] xor(Bit[] a, Bit[] b)
        {
-               return binBitOp(a, b, (bA, bB) -> Bit.xor(bA, bB));
+               return binBitOp(a, b, Bit::xor);
        }
-       
+
        private static Bit[] binBitOp(Bit[] a, Bit[] b, BitOp op)
        {
-               if(a.length != b.length)
+               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)
        {
                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;
        }
-       
+
+       /**
+        * 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].join(addition[i]);
+               }
+               return dest;
+       }
+
        interface BitOp
        {
                Bit execute(Bit a, Bit b);