Arrays.java revision a198e1ecc615e26a167d0f2dca9fa7e5fc62de10
179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanovpackage org.bouncycastle.util; 279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanovimport java.math.BigInteger; 479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov/** 679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov * General array utilities. 779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov */ 879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanovpublic final class Arrays 979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov{ 1079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov private Arrays() 1179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 1279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov // static class, hide constructor 1379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 1479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 1579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov public static boolean areEqual( 1679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov boolean[] a, 1779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov boolean[] b) 1879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 1979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov if (a == b) 2079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 2179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return true; 2279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 2379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 2479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov if (a == null || b == null) 2579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 2679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return false; 2779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 2879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 2979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov if (a.length != b.length) 3079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 3179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return false; 3279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 3379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 3479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov for (int i = 0; i != a.length; i++) 3579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 3679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov if (a[i] != b[i]) 3779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 3879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return false; 3979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 400f92deb81207c80481ff0257fbaba640fe669633Reid Kleckner } 4179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 422d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines return true; 432d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines } 442d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 452d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines public static boolean areEqual( 462d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines char[] a, 472d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines char[] b) 482d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines { 492d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines if (a == b) 502d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines { 512d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines return true; 522d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines } 5379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 5479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov if (a == null || b == null) 552d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines { 5679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return false; 572d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines } 5879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 5979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov if (a.length != b.length) 6079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 6179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return false; 6279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 6379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 6479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov for (int i = 0; i != a.length; i++) 6579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 6679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov if (a[i] != b[i]) 6779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 6879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return false; 6979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 7079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 7179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 7279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return true; 7379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 744b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov 754b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov public static boolean areEqual( 764b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov byte[] a, 774b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov byte[] b) 784b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov { 794b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov if (a == b) 804b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov { 814b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov return true; 824b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov } 834b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov 844b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov if (a == null || b == null) 854b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov { 864b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov return false; 874b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov } 884b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov 894b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov if (a.length != b.length) 904b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov { 914b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov return false; 924b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov } 934b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov 944b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov for (int i = 0; i != a.length; i++) 952d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines { 962d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines if (a[i] != b[i]) 972d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines { 9879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return false; 992d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines } 10088732a3c78d8f46bebd4a519a1cf927edf28e2cbEvgeniy Stepanov } 10188732a3c78d8f46bebd4a519a1cf927edf28e2cbEvgeniy Stepanov 10288732a3c78d8f46bebd4a519a1cf927edf28e2cbEvgeniy Stepanov return true; 10388732a3c78d8f46bebd4a519a1cf927edf28e2cbEvgeniy Stepanov } 10488732a3c78d8f46bebd4a519a1cf927edf28e2cbEvgeniy Stepanov 10579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov /** 10679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov * A constant time equals comparison - does not terminate early if 10779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov * test will fail. 10879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov * 10979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov * @param a first array 11079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov * @param b second array 11179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov * @return true if arrays equal, false otherwise. 11279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov */ 11379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov public static boolean constantTimeAreEqual( 11479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov byte[] a, 1152ecccf8aca0f3f67d43e6395699aab0bb19ee277Evgeniy Stepanov byte[] b) 11679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 11779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov if (a == b) 11879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 11979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return true; 12079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 12179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 12279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov if (a == null || b == null) 12379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 12479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return false; 12579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 12679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 12779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov if (a.length != b.length) 12879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 12979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return false; 13079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 13179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 13279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov int nonEqual = 0; 13379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 13479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov for (int i = 0; i != a.length; i++) 13579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 13679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov nonEqual |= (a[i] ^ b[i]); 13788732a3c78d8f46bebd4a519a1cf927edf28e2cbEvgeniy Stepanov } 13879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 13979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return nonEqual == 0; 14079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 1410f92deb81207c80481ff0257fbaba640fe669633Reid Kleckner 1420f92deb81207c80481ff0257fbaba640fe669633Reid Kleckner public static boolean areEqual( 1430f92deb81207c80481ff0257fbaba640fe669633Reid Kleckner int[] a, 1444b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov int[] b) 1454b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov { 1464b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov if (a == b) 1474b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov { 1484b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov return true; 1494b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov } 1504b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov 1514b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov if (a == null || b == null) 1524b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov { 1534b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov return false; 1544b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov } 1554b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov 1564b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov if (a.length != b.length) 1574b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov { 1584b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov return false; 1594b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov } 1604b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov 1614b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov for (int i = 0; i != a.length; i++) 1624b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov { 1634b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov if (a[i] != b[i]) 1640f92deb81207c80481ff0257fbaba640fe669633Reid Kleckner { 1654b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov return false; 1664b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov } 1674b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov } 1684b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov 1694b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov return true; 1704b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov } 1714b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov 1724b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov public static boolean areEqual( 1734b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov long[] a, 1744b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov long[] b) 1754b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov { 1764b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov if (a == b) 1774b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov { 1780f92deb81207c80481ff0257fbaba640fe669633Reid Kleckner return true; 1790f92deb81207c80481ff0257fbaba640fe669633Reid Kleckner } 1800f92deb81207c80481ff0257fbaba640fe669633Reid Kleckner 1810f92deb81207c80481ff0257fbaba640fe669633Reid Kleckner if (a == null || b == null) 1820f92deb81207c80481ff0257fbaba640fe669633Reid Kleckner { 1830f92deb81207c80481ff0257fbaba640fe669633Reid Kleckner return false; 1844b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov } 1850f92deb81207c80481ff0257fbaba640fe669633Reid Kleckner 18679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov if (a.length != b.length) 18779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 18879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return false; 18979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 19079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 19179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov for (int i = 0; i != a.length; i++) 19279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 19379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov if (a[i] != b[i]) 19479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 1950f92deb81207c80481ff0257fbaba640fe669633Reid Kleckner return false; 1960f92deb81207c80481ff0257fbaba640fe669633Reid Kleckner } 1970f92deb81207c80481ff0257fbaba640fe669633Reid Kleckner } 1980f92deb81207c80481ff0257fbaba640fe669633Reid Kleckner 1990f92deb81207c80481ff0257fbaba640fe669633Reid Kleckner return true; 2000f92deb81207c80481ff0257fbaba640fe669633Reid Kleckner } 2010f92deb81207c80481ff0257fbaba640fe669633Reid Kleckner 2020f92deb81207c80481ff0257fbaba640fe669633Reid Kleckner public static boolean areEqual( 20379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov BigInteger[] a, 2040f92deb81207c80481ff0257fbaba640fe669633Reid Kleckner BigInteger[] b) 20579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 20679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov if (a == b) 20779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 20879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return true; 20979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 21079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 21179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov if (a == null || b == null) 21279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 21379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return false; 21479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 21579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 21679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov if (a.length != b.length) 21779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 21879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return false; 21979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 22079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 22179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov for (int i = 0; i != a.length; i++) 22279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 22379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov if (!a[i].equals(b[i])) 22479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 22579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return false; 22679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 22779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 22879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 22979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return true; 23079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 23179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 23279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov public static void fill( 23379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov byte[] array, 23479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov byte value) 23579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 23679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov for (int i = 0; i < array.length; i++) 23779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 23879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov array[i] = value; 23979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 24079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 24179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 24279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov public static void fill( 24379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov char[] array, 24479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov char value) 24579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 24679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov for (int i = 0; i < array.length; i++) 24779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 24879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov array[i] = value; 24979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 25079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 25179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 25279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov public static void fill( 25379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov long[] array, 25479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov long value) 25579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 25679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov for (int i = 0; i < array.length; i++) 25779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 25879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov array[i] = value; 25979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 26079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 26179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 26279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov public static void fill( 26379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov short[] array, 26479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov short value) 26579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 26679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov for (int i = 0; i < array.length; i++) 26779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 26879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov array[i] = value; 26979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 27079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 27179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 27279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov public static void fill( 27379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov int[] array, 27479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov int value) 27579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 27679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov for (int i = 0; i < array.length; i++) 27779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 27879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov array[i] = value; 27979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 28079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 28179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 28279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov public static int hashCode(byte[] data) 28379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 28479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov if (data == null) 28579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 28679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return 0; 28779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 28879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 289a0475713cdac8a55ed2a62cf9553ae6fbb2dbbc2Evgeniy Stepanov int i = data.length; 290a0475713cdac8a55ed2a62cf9553ae6fbb2dbbc2Evgeniy Stepanov int hc = i + 1; 291a0475713cdac8a55ed2a62cf9553ae6fbb2dbbc2Evgeniy Stepanov 292a0475713cdac8a55ed2a62cf9553ae6fbb2dbbc2Evgeniy Stepanov while (--i >= 0) 293a0475713cdac8a55ed2a62cf9553ae6fbb2dbbc2Evgeniy Stepanov { 294a0475713cdac8a55ed2a62cf9553ae6fbb2dbbc2Evgeniy Stepanov hc *= 257; 29579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov hc ^= data[i]; 296a0475713cdac8a55ed2a62cf9553ae6fbb2dbbc2Evgeniy Stepanov } 29779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 29879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return hc; 29979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 30079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 30179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov public static int hashCode(char[] data) 30279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 30379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov if (data == null) 30479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 30579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return 0; 3064b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov } 30779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 3084b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov int i = data.length; 3094b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov int hc = i + 1; 3104b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov 3114b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov while (--i >= 0) 31279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 31379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov hc *= 257; 31479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov hc ^= data[i]; 31579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 3164b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov 3179afa4528e02c1531885ccaad903acd28dda54556Evgeniy Stepanov return hc; 3189afa4528e02c1531885ccaad903acd28dda54556Evgeniy Stepanov } 3199afa4528e02c1531885ccaad903acd28dda54556Evgeniy Stepanov 3209afa4528e02c1531885ccaad903acd28dda54556Evgeniy Stepanov public static int hashCode(int[][] ints) 3219afa4528e02c1531885ccaad903acd28dda54556Evgeniy Stepanov { 3229afa4528e02c1531885ccaad903acd28dda54556Evgeniy Stepanov int hc = 0; 3239afa4528e02c1531885ccaad903acd28dda54556Evgeniy Stepanov 3249afa4528e02c1531885ccaad903acd28dda54556Evgeniy Stepanov for (int i = 0; i != ints.length; i++) 3259afa4528e02c1531885ccaad903acd28dda54556Evgeniy Stepanov { 3269afa4528e02c1531885ccaad903acd28dda54556Evgeniy Stepanov hc = hc * 257 + hashCode(ints[i]); 3279afa4528e02c1531885ccaad903acd28dda54556Evgeniy Stepanov } 3289afa4528e02c1531885ccaad903acd28dda54556Evgeniy Stepanov 3299afa4528e02c1531885ccaad903acd28dda54556Evgeniy Stepanov return hc; 3309afa4528e02c1531885ccaad903acd28dda54556Evgeniy Stepanov } 3319afa4528e02c1531885ccaad903acd28dda54556Evgeniy Stepanov 33279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov public static int hashCode(int[] data) 33379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 33479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov if (data == null) 3359afa4528e02c1531885ccaad903acd28dda54556Evgeniy Stepanov { 3369afa4528e02c1531885ccaad903acd28dda54556Evgeniy Stepanov return 0; 3379afa4528e02c1531885ccaad903acd28dda54556Evgeniy Stepanov } 3389afa4528e02c1531885ccaad903acd28dda54556Evgeniy Stepanov 3399afa4528e02c1531885ccaad903acd28dda54556Evgeniy Stepanov int i = data.length; 3409afa4528e02c1531885ccaad903acd28dda54556Evgeniy Stepanov int hc = i + 1; 34179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 34279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov while (--i >= 0) 34379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 34479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov hc *= 257; 34579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov hc ^= data[i]; 34679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 34779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 348a0475713cdac8a55ed2a62cf9553ae6fbb2dbbc2Evgeniy Stepanov return hc; 34979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 35079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 35179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov public static int hashCode(short[][][] shorts) 35279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 35379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov int hc = 0; 35479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 35579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov for (int i = 0; i != shorts.length; i++) 35679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 35779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov hc = hc * 257 + hashCode(shorts[i]); 35879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 35979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 36079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return hc; 36179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 36279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 36379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov public static int hashCode(short[][] shorts) 3644b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov { 3654b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov int hc = 0; 3664b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov 3674b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov for (int i = 0; i != shorts.length; i++) 3684b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov { 3694b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov hc = hc * 257 + hashCode(shorts[i]); 3704b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov } 3714b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov 3724b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov return hc; 3732d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines } 3742d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 3752d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines public static int hashCode(short[] data) 3762d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines { 3772d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines if (data == null) 3782d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines { 3792d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines return 0; 3802d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines } 3812d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 3822d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines int i = data.length; 3834b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov int hc = i + 1; 3842d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 3854b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov while (--i >= 0) 38679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 38779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov hc *= 257; 38879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov hc ^= (data[i] & 0xff); 38979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 39079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 39179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return hc; 39279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 39379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 39479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov public static int hashCode(BigInteger[] data) 39579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 39679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov if (data == null) 39779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 39879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return 0; 3992d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines } 40079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 40179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov int i = data.length; 4024b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov int hc = i + 1; 40379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 40479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov while (--i >= 0) 40579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 40679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov hc *= 257; 4074b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov hc ^= data[i].hashCode(); 4084b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov } 4094b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov 4104b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov return hc; 4114b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov } 4124b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov 4134b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov public static byte[] clone(byte[] data) 4144b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov { 4154b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov if (data == null) 4164b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov { 4174b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov return null; 4184b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov } 4194b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov byte[] copy = new byte[data.length]; 4202d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 4212d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines System.arraycopy(data, 0, copy, 0, data.length); 4222d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 4232d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines return copy; 4242d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines } 4252d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 4262d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines public static byte[][] clone(byte[][] data) 4272d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines { 4282d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines if (data == null) 4292d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines { 4304b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov return null; 4314b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov } 4324b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov 43379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov byte[][] copy = new byte[data.length][]; 43479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 43579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov for (int i = 0; i != copy.length; i++) 43679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 43779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov copy[i] = clone(data[i]); 43879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 43979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 44079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return copy; 4414b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov } 44279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 44379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov public static byte[][][] clone(byte[][][] data) 44479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 44579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov if (data == null) 44679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 44779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return null; 44879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 4492d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 45079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov byte[][][] copy = new byte[data.length][][]; 45179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 4524b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov for (int i = 0; i != copy.length; i++) 45379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 45479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov copy[i] = clone(data[i]); 45588732a3c78d8f46bebd4a519a1cf927edf28e2cbEvgeniy Stepanov } 45679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 45779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return copy; 45879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 45979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 46079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov public static int[] clone(int[] data) 46179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 46279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov if (data == null) 46379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 46479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return null; 46579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 46679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov int[] copy = new int[data.length]; 46779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 46879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov System.arraycopy(data, 0, copy, 0, data.length); 46979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 47079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return copy; 47179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 47279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 47379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov public static short[] clone(short[] data) 47479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 47579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov if (data == null) 47679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 47779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return null; 47879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 47979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov short[] copy = new short[data.length]; 48079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 48179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov System.arraycopy(data, 0, copy, 0, data.length); 48279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 48379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return copy; 48479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 48579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 48679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov public static BigInteger[] clone(BigInteger[] data) 48779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 48879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov if (data == null) 48979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 49079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return null; 49179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 49279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov BigInteger[] copy = new BigInteger[data.length]; 49379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 49479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov System.arraycopy(data, 0, copy, 0, data.length); 49579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 49679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return copy; 49779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 49879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 49979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov public static byte[] copyOf(byte[] data, int newLength) 50079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 50179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov byte[] tmp = new byte[newLength]; 50279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 50379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov if (newLength < data.length) 50479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 50579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov System.arraycopy(data, 0, tmp, 0, newLength); 50679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 50779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov else 50879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 50979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov System.arraycopy(data, 0, tmp, 0, data.length); 5104b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov } 51179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 51279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return tmp; 51379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 51479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 51579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov public static char[] copyOf(char[] data, int newLength) 51688732a3c78d8f46bebd4a519a1cf927edf28e2cbEvgeniy Stepanov { 51779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov char[] tmp = new char[newLength]; 51879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 51979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov if (newLength < data.length) 52088732a3c78d8f46bebd4a519a1cf927edf28e2cbEvgeniy Stepanov { 52188732a3c78d8f46bebd4a519a1cf927edf28e2cbEvgeniy Stepanov System.arraycopy(data, 0, tmp, 0, newLength); 52288732a3c78d8f46bebd4a519a1cf927edf28e2cbEvgeniy Stepanov } 52379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov else 52479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 52579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov System.arraycopy(data, 0, tmp, 0, data.length); 52679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 52779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 52879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return tmp; 52988732a3c78d8f46bebd4a519a1cf927edf28e2cbEvgeniy Stepanov } 53079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 53179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov public static int[] copyOf(int[] data, int newLength) 53279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 53379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov int[] tmp = new int[newLength]; 53479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 53579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov if (newLength < data.length) 53679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 53779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov System.arraycopy(data, 0, tmp, 0, newLength); 5382ecccf8aca0f3f67d43e6395699aab0bb19ee277Evgeniy Stepanov } 53979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov else 54079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 54179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov System.arraycopy(data, 0, tmp, 0, data.length); 54279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 54379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 54479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return tmp; 54579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 54679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 54779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov public static long[] copyOf(long[] data, int newLength) 54879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 54979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov long[] tmp = new long[newLength]; 55079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 55179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov if (newLength < data.length) 55288732a3c78d8f46bebd4a519a1cf927edf28e2cbEvgeniy Stepanov { 55388732a3c78d8f46bebd4a519a1cf927edf28e2cbEvgeniy Stepanov System.arraycopy(data, 0, tmp, 0, newLength); 55479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 55579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov else 55679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 55779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov System.arraycopy(data, 0, tmp, 0, data.length); 55879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 55979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 56079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return tmp; 56179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 56279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 56379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov public static BigInteger[] copyOf(BigInteger[] data, int newLength) 56479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 56579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov BigInteger[] tmp = new BigInteger[newLength]; 56679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 56779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov if (newLength < data.length) 56879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 56979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov System.arraycopy(data, 0, tmp, 0, newLength); 57079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 57179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov else 57279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 57379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov System.arraycopy(data, 0, tmp, 0, data.length); 57479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 57579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 57679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return tmp; 57779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 57879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 57979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov public static byte[] copyOfRange(byte[] data, int from, int to) 58079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 58179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov int newLength = getLength(from, to); 58279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 58379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov byte[] tmp = new byte[newLength]; 58479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 58579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov if (data.length - from < newLength) 58679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 58779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov System.arraycopy(data, from, tmp, 0, data.length - from); 58879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 58979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov else 59079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 59179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov System.arraycopy(data, from, tmp, 0, newLength); 59279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 59379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 59479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return tmp; 59579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 59679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 59779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov public static int[] copyOfRange(int[] data, int from, int to) 59879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 59979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov int newLength = getLength(from, to); 60079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 60179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov int[] tmp = new int[newLength]; 60279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 60379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov if (data.length - from < newLength) 60479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 60579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov System.arraycopy(data, from, tmp, 0, data.length - from); 60679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 60779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov else 60879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 60979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov System.arraycopy(data, from, tmp, 0, newLength); 61079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 61179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 61279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return tmp; 61379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 61479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 61579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov public static long[] copyOfRange(long[] data, int from, int to) 61679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 61788732a3c78d8f46bebd4a519a1cf927edf28e2cbEvgeniy Stepanov int newLength = getLength(from, to); 61879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 61979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov long[] tmp = new long[newLength]; 62079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 62179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov if (data.length - from < newLength) 62279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 62379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov System.arraycopy(data, from, tmp, 0, data.length - from); 62479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 62579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov else 62679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 62779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov System.arraycopy(data, from, tmp, 0, newLength); 62879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 62979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 63079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return tmp; 63179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 63279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 63379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov public static BigInteger[] copyOfRange(BigInteger[] data, int from, int to) 63479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 63579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov int newLength = getLength(from, to); 63679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 63779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov BigInteger[] tmp = new BigInteger[newLength]; 63879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 63979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov if (data.length - from < newLength) 64079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 64179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov System.arraycopy(data, from, tmp, 0, data.length - from); 64279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 64379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov else 64479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 64579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov System.arraycopy(data, from, tmp, 0, newLength); 64679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 64779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 64879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return tmp; 64979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 65079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 65188732a3c78d8f46bebd4a519a1cf927edf28e2cbEvgeniy Stepanov private static int getLength(int from, int to) 65279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 65379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov int newLength = to - from; 6547a53bca1db2adfb22c9e830f3e91833214b12663Reid Kleckner if (newLength < 0) 6557a53bca1db2adfb22c9e830f3e91833214b12663Reid Kleckner { 6567a53bca1db2adfb22c9e830f3e91833214b12663Reid Kleckner StringBuffer sb = new StringBuffer(from); 6577a53bca1db2adfb22c9e830f3e91833214b12663Reid Kleckner sb.append(" > ").append(to); 6587a53bca1db2adfb22c9e830f3e91833214b12663Reid Kleckner throw new IllegalArgumentException(sb.toString()); 6594b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov } 6604b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov return newLength; 6614b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov } 6624b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov 6634b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov public static byte[] concatenate(byte[] a, byte[] b) 6644b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov { 6654b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov if (a != null && b != null) 6664b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov { 6674b26afda2f4c7465260b22f1094c6699886cc55dEvgeniy Stepanov byte[] rv = new byte[a.length + b.length]; 66879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 66979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov System.arraycopy(a, 0, rv, 0, a.length); 67079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov System.arraycopy(b, 0, rv, a.length, b.length); 67179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 67279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return rv; 67379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 67479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov else if (b != null) 67579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 67679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return clone(b); 67779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 67879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov else 67979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 68079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return clone(a); 68179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 6820f92deb81207c80481ff0257fbaba640fe669633Reid Kleckner } 68379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 68479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov public static byte[] concatenate(byte[] a, byte[] b, byte[] c) 68579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 68679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov if (a != null && b != null && c != null) 68779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 68879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov byte[] rv = new byte[a.length + b.length + c.length]; 68979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 69079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov System.arraycopy(a, 0, rv, 0, a.length); 69179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov System.arraycopy(b, 0, rv, a.length, b.length); 69279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov System.arraycopy(c, 0, rv, a.length + b.length, c.length); 69379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 69479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return rv; 69579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 69679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov else if (b == null) 69779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 69879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return concatenate(a, c); 69979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 7000f92deb81207c80481ff0257fbaba640fe669633Reid Kleckner else 7010f92deb81207c80481ff0257fbaba640fe669633Reid Kleckner { 7020f92deb81207c80481ff0257fbaba640fe669633Reid Kleckner return concatenate(a, b); 7030f92deb81207c80481ff0257fbaba640fe669633Reid Kleckner } 7040f92deb81207c80481ff0257fbaba640fe669633Reid Kleckner } 70588732a3c78d8f46bebd4a519a1cf927edf28e2cbEvgeniy Stepanov 7060f92deb81207c80481ff0257fbaba640fe669633Reid Kleckner public static byte[] concatenate(byte[] a, byte[] b, byte[] c, byte[] d) 7070f92deb81207c80481ff0257fbaba640fe669633Reid Kleckner { 7080f92deb81207c80481ff0257fbaba640fe669633Reid Kleckner if (a != null && b != null && c != null && d != null) 7090f92deb81207c80481ff0257fbaba640fe669633Reid Kleckner { 7100f92deb81207c80481ff0257fbaba640fe669633Reid Kleckner byte[] rv = new byte[a.length + b.length + c.length + d.length]; 7110f92deb81207c80481ff0257fbaba640fe669633Reid Kleckner 7120f92deb81207c80481ff0257fbaba640fe669633Reid Kleckner System.arraycopy(a, 0, rv, 0, a.length); 7130f92deb81207c80481ff0257fbaba640fe669633Reid Kleckner System.arraycopy(b, 0, rv, a.length, b.length); 71479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov System.arraycopy(c, 0, rv, a.length + b.length, c.length); 71579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov System.arraycopy(d, 0, rv, a.length + b.length + c.length, d.length); 71679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov 71779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return rv; 71879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 71979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov else if (d == null) 72079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 72179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return concatenate(a, b, c); 72279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 72379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov else if (c == null) 72479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 72579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return concatenate(a, b, d); 72679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 72779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov else if (b == null) 72879b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 72979b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return concatenate(a, c, d); 73079b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 73179b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov else 73279b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov { 73379b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov return concatenate(b, c, d); 73479b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 73579b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov } 73679b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov} 73779b2d17fbaed2afa1a5a8f7bda42e45322709636Evgeniy Stepanov