You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by pa...@apache.org on 2023/01/10 03:21:23 UTC

[groovy] branch master updated: copy transpose DGM primitive array methods to ArrayGroovyMethods

This is an automated email from the ASF dual-hosted git repository.

paulk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git


The following commit(s) were added to refs/heads/master by this push:
     new c8b9afff1f copy transpose DGM primitive array methods to ArrayGroovyMethods
c8b9afff1f is described below

commit c8b9afff1fe2086e4a5d1957c32117c72ba1bf2d
Author: Paul King <pa...@asert.com.au>
AuthorDate: Tue Jan 10 13:21:02 2023 +1000

    copy transpose DGM primitive array methods to ArrayGroovyMethods
---
 .../groovy/runtime/ArrayGroovyMethods.java         | 207 +++++++++++++++++++++
 .../groovy/runtime/DefaultGroovyMethods.java       |  56 +-----
 2 files changed, 214 insertions(+), 49 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/runtime/ArrayGroovyMethods.java b/src/main/java/org/codehaus/groovy/runtime/ArrayGroovyMethods.java
index 68b8d71581..c7f571e3f6 100644
--- a/src/main/java/org/codehaus/groovy/runtime/ArrayGroovyMethods.java
+++ b/src/main/java/org/codehaus/groovy/runtime/ArrayGroovyMethods.java
@@ -2048,6 +2048,213 @@ public class ArrayGroovyMethods {
     // toUnique
     //-------------------------------------------------------------------------
     // transpose
+
+    /**
+     * A transpose method for 2D boolean arrays.
+     * <p>
+     * Example usage:
+     * <pre class="groovyTestCase">
+     * boolean[][] bools = [[false, false], [true, true]]
+     * boolean[][] expected = [[false, true], [false, true]]
+     * def result = bools.transpose()
+     * assert result == expected
+     * assert bools.class.componentType == result.class.componentType
+     * </pre>
+     *
+     * @param self a 2D boolean array
+     * @return the transposed 2D boolean array
+     * @since 5.0.0
+     */
+    public static boolean[][] transpose(boolean[][] self) {
+        boolean[][] result = new boolean[self[0].length][self.length];
+        for (int i = 0; i < self.length; i++) {
+            for (int j = 0; j < self[i].length; j++) {
+                result[j][i] = self[i][j];
+            }
+        }
+        return result;
+    }
+
+    /**
+     * A transpose method for 2D byte arrays.
+     * <p>
+     * Example usage:
+     * <pre class="groovyTestCase">
+     * byte[][] bytes = [[1, 10], [2, 20]]
+     * byte[][] expected = [[1, 2], [10, 20]]
+     * def result = bytes.transpose()
+     * assert result == expected
+     * assert bytes.class.componentType == result.class.componentType
+     * </pre>
+     *
+     * @param self a 2D byte array
+     * @return the transposed 2D byte array
+     * @since 5.0.0
+     */
+    public static byte[][] transpose(byte[][] self) {
+        byte[][] result = new byte[self[0].length][self.length];
+        for (int i = 0; i < self.length; i++) {
+            for (int j = 0; j < self[i].length; j++) {
+                result[j][i] = self[i][j];
+            }
+        }
+        return result;
+    }
+
+    /**
+     * A transpose method for 2D char arrays.
+     * <p>
+     * Example usage:
+     * <pre class="groovyTestCase">
+     * char[][] chars = [['a', 'b'], ['A', 'B']]
+     * char[][] expected = [['a', 'A'], ['b', 'B']]
+     * def result = chars.transpose()
+     * assert result == expected
+     * assert chars.class.componentType == result.class.componentType
+     * </pre>
+     *
+     * @param self a 2D char array
+     * @return the transposed 2D char array
+     * @since 5.0.0
+     */
+    public static char[][] transpose(char[][] self) {
+        char[][] result = new char[self[0].length][self.length];
+        for (int i = 0; i < self.length; i++) {
+            for (int j = 0; j < self[i].length; j++) {
+                result[j][i] = self[i][j];
+            }
+        }
+        return result;
+    }
+
+    /**
+     * A transpose method for 2D short arrays.
+     * <p>
+     * Example usage:
+     * <pre class="groovyTestCase">
+     * boolean[][] shorts = [[false, false], [true, true]]
+     * boolean[][] expected = [[false, true], [false, true]]
+     * def result = shorts.transpose()
+     * assert result == expected
+     * assert shorts.class.componentType == result.class.componentType
+     * </pre>
+     *
+     * @param self a 2D short array
+     * @return the transposed 2D short array
+     * @since 5.0.0
+     */
+    public static short[][] transpose(short[][] self) {
+        short[][] result = new short[self[0].length][self.length];
+        for (int i = 0; i < self.length; i++) {
+            for (int j = 0; j < self[i].length; j++) {
+                result[j][i] = self[i][j];
+            }
+        }
+        return result;
+    }
+
+    /**
+     * A transpose method for 2D int arrays.
+     * <p>
+     * Example usage:
+     * <pre class="groovyTestCase">
+     * int[][] nums = [[10, 15, 20], [30, 35, 40]]
+     * int[][] expected = [[10, 30], [15, 35], [20, 40]]
+     * assert nums.transpose() == expected
+     * </pre>
+     *
+     * @param self a 2D int array
+     * @return the transposed 2D int array
+     * @since 3.0.8
+     */
+    public static int[][] transpose(int[][] self) {
+        int[][] result = new int[self[0].length][self.length];
+        for (int i = 0; i < self.length; i++) {
+            for (int j = 0; j < self[i].length; j++) {
+                result[j][i] = self[i][j];
+            }
+        }
+        return result;
+    }
+
+    /**
+     * A transpose method for 2D long arrays.
+     * <p>
+     * Example usage:
+     * <pre class="groovyTestCase">
+     * long[][] longs = [[1L, 3L, 5L], [2L, 4L, 6L]]
+     * long[][] expected = [[1L, 2L], [3L, 4L], [5L, 6L]]
+     * def result = longs.transpose()
+     * assert result == expected
+     * assert longs.class.componentType == result.class.componentType
+     * </pre>
+     *
+     * @param self a 2D long array
+     * @return the transposed 2D long array
+     * @since 3.0.8
+     */
+    public static long[][] transpose(long[][] self) {
+        long[][] result = new long[self[0].length][self.length];
+        for (int i = 0; i < self.length; i++) {
+            for (int j = 0; j < self[i].length; j++) {
+                result[j][i] = self[i][j];
+            }
+        }
+        return result;
+    }
+
+    /**
+     * A transpose method for 2D float arrays.
+     * <p>
+     * Example usage:
+     * <pre class="groovyTestCase">
+     * float[][] floats = [[1.0f, 10.0f], [2.0f, 20.0f]]
+     * float[][] expected = [[1.0f, 2.0f], [10.0f, 20.0f]]
+     * def result = floats.transpose()
+     * assert result == expected
+     * assert floats.class.componentType == result.class.componentType
+     * </pre>
+     *
+     * @param self a 2D float array
+     * @return the transposed 2D float array
+     * @since 5.0.0
+     */
+    public static float[][] transpose(float[][] self) {
+        float[][] result = new float[self[0].length][self.length];
+        for (int i = 0; i < self.length; i++) {
+            for (int j = 0; j < self[i].length; j++) {
+                result[j][i] = self[i][j];
+            }
+        }
+        return result;
+    }
+
+    /**
+     * A transpose method for 2D double arrays.
+     * <p>
+     * Example usage:
+     * <pre class="groovyTestCase">
+     * double[][] doubles = [[1.0d, 10.0d], [2.0d, 20.0d]]
+     * double[][] expected = [[1.0d, 2.0d], [10.0d, 20.0d]]
+     * def result = doubles.transpose()
+     * assert result == expected
+     * assert doubles.class.componentType == result.class.componentType
+     * </pre>
+     *
+     * @param self a 2D double array
+     * @return the transposed 2D double array
+     * @since 3.0.8
+     */
+    public static double[][] transpose(double[][] self) {
+        double[][] result = new double[self[0].length][self.length];
+        for (int i = 0; i < self.length; i++) {
+            for (int j = 0; j < self[i].length; j++) {
+                result[j][i] = self[i][j];
+            }
+        }
+        return result;
+    }
+
     //-------------------------------------------------------------------------
     // union
 }
diff --git a/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java b/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
index 7a55a993a5..54534da62a 100644
--- a/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
+++ b/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
@@ -5868,62 +5868,20 @@ public class DefaultGroovyMethods extends DefaultGroovyMethodsSupport {
         return GroovyCollections.transpose(self);
     }
 
-    /**
-     * A transpose method for 2D int arrays.
-     * <p>
-     * Example usage:
-     * <pre class="groovyTestCase">
-     * int[][] nums = [[10, 15, 20], [30, 35, 40]]
-     * int[][] expected = [[10, 30], [15, 35], [20, 40]]
-     * assert nums.transpose() == expected
-     * </pre>
-     *
-     * @param self a 2D int array
-     * @return the transposed 2D int array
-     * @since 3.0.8
-     */
+
+    @Deprecated
     public static int[][] transpose(int[][] self) {
-        int[][] result = new int[self[0].length][self.length];
-        for (int i = 0; i < self.length; i++) {
-            for (int j = 0; j < self[i].length; j++) {
-                result[j][i] = self[i][j];
-            }
-        }
-        return result;
+        return ArrayGroovyMethods.transpose(self);
     }
 
-    /**
-     * A transpose method for 2D long arrays.
-     *
-     * @param self a 2D long array
-     * @return the transposed 2D long array
-     * @since 3.0.8
-     */
+    @Deprecated
     public static long[][] transpose(long[][] self) {
-        long[][] result = new long[self[0].length][self.length];
-        for (int i = 0; i < self.length; i++) {
-            for (int j = 0; j < self[i].length; j++) {
-                result[j][i] = self[i][j];
-            }
-        }
-        return result;
+        return ArrayGroovyMethods.transpose(self);
     }
 
-    /**
-     * A transpose method for 2D double arrays.
-     *
-     * @param self a 2D double array
-     * @return the transposed 2D double array
-     * @since 3.0.8
-     */
+    @Deprecated
     public static double[][] transpose(double[][] self) {
-        double[][] result = new double[self[0].length][self.length];
-        for (int i = 0; i < self.length; i++) {
-            for (int j = 0; j < self[i].length; j++) {
-                result[j][i] = self[i][j];
-            }
-        }
-        return result;
+        return ArrayGroovyMethods.transpose(self);
     }
 
     /**