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