001/**
002 *
003 * Copyright 2019 Florian Schmaus
004 *
005 * Licensed under the Apache License, Version 2.0 (the "License");
006 * you may not use this file except in compliance with the License.
007 * You may obtain a copy of the License at
008 *
009 *     http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017package org.jxmpp.util;
018
019import java.lang.reflect.Array;
020
021public class ArraysUtil {
022
023        /**
024         * Concatenate two arrays.
025         *
026         * @param arrayOne the first input array.
027         * @param arrayTwo the second input array.
028         * @param <T> the type of the arrays.
029         * @return a new array where the first and second array are concatenated.
030         */
031        public static <T> T concatenate(T arrayOne, T arrayTwo) {
032                if (!arrayOne.getClass().isArray() || !arrayTwo.getClass().isArray()) {
033                        throw new IllegalArgumentException();
034                }
035
036                int arrayOneLength = Array.getLength(arrayOne);
037                int arrayTwoLength = Array.getLength(arrayTwo);
038
039                @SuppressWarnings("unchecked")
040                T res = (T) Array.newInstance(arrayOne.getClass().getComponentType(), arrayOneLength + arrayTwoLength);
041                System.arraycopy(arrayOne, 0, res, 0, arrayOneLength);
042                System.arraycopy(arrayTwo, 0, res, arrayOneLength, arrayTwoLength);
043
044                return res;
045        }
046
047}