/*---------------- FILE HEADER ------------------------------------------ This file is part of deegree. Copyright (C) 2001 by: EXSE, Department of Geography, University of Bonn http://www.giub.uni-bonn.de/exse/ lat/lon GmbH http://www.lat-lon.de It has been implemented within SEAGIS - An OpenSource implementation of OpenGIS specification (C) 2001, Institut de Recherche pour le D�veloppement (http://sourceforge.net/projects/seagis/) SEAGIS Contacts: Surveillance de l'Environnement Assist�e par Satellite Institut de Recherche pour le D�veloppement / US-Espace mailto:seasnet@teledetection.fr This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Contact: Andreas Poth lat/lon GmbH Aennchenstr. 19 53115 Bonn Germany E-Mail: poth@lat-lon.de Klaus Greve Department of Geography University of Bonn Meckenheimer Allee 166 53115 Bonn Germany E-Mail: klaus.greve@uni-bonn.de ---------------------------------------------------------------------------*/ package org.deegree.model.csct.resources; // Miscellaneous import java.lang.reflect.Array; /** * Simple operations on arrays. This class provides a central place for inserting and * deleting elements in an array, as well as resizing the array. This class may be * removed if JavaSoft provide some language construct functionally equivalent to * C/C++'s <code>realloc</code>. * * @version 1.0 * @author Martin Desruisseaux */ public final class XArray { /** * Toute construction d'objet * de cette classe est interdites. */ private XArray() { } /** * Renvoie un nouveau tableau qui contiendra les m�mes �l�ments que <code>array</code> mais avec la longueur <code>length</code> * sp�cifi�e. Si la longueur d�sir�e <code>length</code> est plus grande que la longueur initiale du tableau <code>array</code>, * alors le tableau retourn� contiendra tous les �l�ments de <code>array</code> avec en plus des �l�ments initialis�s � <code>null</code> * � la fin du tableau. Si au contraire la longueur d�sir�e <code>length</code> est plus courte que la longueur initiale du tableau * <code>array</code>, alors le tableau sera tronqu� (c'est � dire que les �l�ments en trop de <code>array</code> seront oubli�s). * Si la longueur de <code>array</code> est �gale � <code>length</code>, alors <code>array</code> sera retourn� tel quel. * * @param array Tableau � copier. * @param length Longueur du tableau d�sir�. * @return Tableau du m�me type que <code>array</code>, de longueur <code>length</code> et contenant les donn�es de <code>array</code>. */ private static Object doResize( final Object array, final int length ) { final int current = Array.getLength( array ); if ( current != length ) { final Object newArray = Array.newInstance( array.getClass().getComponentType(), length ); System.arraycopy( array, 0, newArray, 0, Math.min( current, length ) ); return newArray; } return array; } /** * Renvoie un nouveau tableau qui contiendra les m�mes �l�ments que <code>array</code> mais avec la longueur <code>length</code> * sp�cifi�e. Si la longueur d�sir�e <code>length</code> est plus grande que la longueur initiale du tableau <code>array</code>, * alors le tableau retourn� contiendra tous les �l�ments de <code>array</code> avec en plus des �l�ments initialis�s � <code>null</code> * � la fin du tableau. Si au contraire la longueur d�sir�e <code>length</code> est plus courte que la longueur initiale du tableau * <code>array</code>, alors le tableau sera tronqu� (c'est � dire que les �l�ments en trop de <code>array</code> seront oubli�s). * Si la longueur de <code>array</code> est �gale � <code>length</code>, alors <code>array</code> sera retourn� tel quel. * * @param array Tableau � copier. * @param length Longueur du tableau d�sir�. * @return Tableau du m�me type que <code>array</code>, de longueur <code>length</code> et contenant les donn�es de <code>array</code>. */ public static Object[] resize( final Object[] array, final int length ) { return (Object[]) doResize( array, length ); } /** * Renvoie un nouveau tableau qui contiendra les m�mes �l�ments que <code>array</code> mais avec la longueur <code>length</code> * sp�cifi�e. Si la longueur d�sir�e <code>length</code> est plus grande que la longueur initiale du tableau <code>array</code>, * alors le tableau retourn� contiendra tous les �l�ments de <code>array</code> avec en plus des �l�ments initialis�s � 0 * � la fin du tableau. Si au contraire la longueur d�sir�e <code>length</code> est plus courte que la longueur initiale du tableau * <code>array</code>, alors le tableau sera tronqu� (c'est � dire que les �l�ments en trop de <code>array</code> seront oubli�s). * Si la longueur de <code>array</code> est �gale � <code>length</code>, alors <code>array</code> sera retourn� tel quel. * * @param array Tableau � copier. * @param length Longueur du tableau d�sir�. * @return Tableau du m�me type que <code>array</code>, de longueur <code>length</code> et contenant les donn�es de <code>array</code>. */ public static double[] resize( final double[] array, final int length ) { return (double[]) doResize( array, length ); } /** * Renvoie un nouveau tableau qui contiendra les m�mes �l�ments que <code>array</code> mais avec la longueur <code>length</code> * sp�cifi�e. Si la longueur d�sir�e <code>length</code> est plus grande que la longueur initiale du tableau <code>array</code>, * alors le tableau retourn� contiendra tous les �l�ments de <code>array</code> avec en plus des �l�ments initialis�s � 0 * � la fin du tableau. Si au contraire la longueur d�sir�e <code>length</code> est plus courte que la longueur initiale du tableau * <code>array</code>, alors le tableau sera tronqu� (c'est � dire que les �l�ments en trop de <code>array</code> seront oubli�s). * Si la longueur de <code>array</code> est �gale � <code>length</code>, alors <code>array</code> sera retourn� tel quel. * * @param array Tableau � copier. * @param length Longueur du tableau d�sir�. * @return Tableau du m�me type que <code>array</code>, de longueur <code>length</code> et contenant les donn�es de <code>array</code>. */ public static float[] resize( final float[] array, final int length ) { return (float[]) doResize( array, length ); } /** * Renvoie un nouveau tableau qui contiendra les m�mes �l�ments que <code>array</code> mais avec la longueur <code>length</code> * sp�cifi�e. Si la longueur d�sir�e <code>length</code> est plus grande que la longueur initiale du tableau <code>array</code>, * alors le tableau retourn� contiendra tous les �l�ments de <code>array</code> avec en plus des �l�ments initialis�s � 0 * � la fin du tableau. Si au contraire la longueur d�sir�e <code>length</code> est plus courte que la longueur initiale du tableau * <code>array</code>, alors le tableau sera tronqu� (c'est � dire que les �l�ments en trop de <code>array</code> seront oubli�s). * Si la longueur de <code>array</code> est �gale � <code>length</code>, alors <code>array</code> sera retourn� tel quel. * * @param array Tableau � copier. * @param length Longueur du tableau d�sir�. * @return Tableau du m�me type que <code>array</code>, de longueur <code>length</code> et contenant les donn�es de <code>array</code>. */ public static long[] resize( final long[] array, final int length ) { return (long[]) doResize( array, length ); } /** * Renvoie un nouveau tableau qui contiendra les m�mes �l�ments que <code>array</code> mais avec la longueur <code>length</code> * sp�cifi�e. Si la longueur d�sir�e <code>length</code> est plus grande que la longueur initiale du tableau <code>array</code>, * alors le tableau retourn� contiendra tous les �l�ments de <code>array</code> avec en plus des �l�ments initialis�s � 0 * � la fin du tableau. Si au contraire la longueur d�sir�e <code>length</code> est plus courte que la longueur initiale du tableau * <code>array</code>, alors le tableau sera tronqu� (c'est � dire que les �l�ments en trop de <code>array</code> seront oubli�s). * Si la longueur de <code>array</code> est �gale � <code>length</code>, alors <code>array</code> sera retourn� tel quel. * * @param array Tableau � copier. * @param length Longueur du tableau d�sir�. * @return Tableau du m�me type que <code>array</code>, de longueur <code>length</code> et contenant les donn�es de <code>array</code>. */ public static int[] resize( final int[] array, final int length ) { return (int[]) doResize( array, length ); } /** * Renvoie un nouveau tableau qui contiendra les m�mes �l�ments que <code>array</code> mais avec la longueur <code>length</code> * sp�cifi�e. Si la longueur d�sir�e <code>length</code> est plus grande que la longueur initiale du tableau <code>array</code>, * alors le tableau retourn� contiendra tous les �l�ments de <code>array</code> avec en plus des �l�ments initialis�s � 0 * � la fin du tableau. Si au contraire la longueur d�sir�e <code>length</code> est plus courte que la longueur initiale du tableau * <code>array</code>, alors le tableau sera tronqu� (c'est � dire que les �l�ments en trop de <code>array</code> seront oubli�s). * Si la longueur de <code>array</code> est �gale � <code>length</code>, alors <code>array</code> sera retourn� tel quel. * * @param array Tableau � copier. * @param length Longueur du tableau d�sir�. * @return Tableau du m�me type que <code>array</code>, de longueur <code>length</code> et contenant les donn�es de <code>array</code>. */ public static short[] resize( final short[] array, final int length ) { return (short[]) doResize( array, length ); } /** * Renvoie un nouveau tableau qui contiendra les m�mes �l�ments que <code>array</code> mais avec la longueur <code>length</code> * sp�cifi�e. Si la longueur d�sir�e <code>length</code> est plus grande que la longueur initiale du tableau <code>array</code>, * alors le tableau retourn� contiendra tous les �l�ments de <code>array</code> avec en plus des �l�ments initialis�s � 0 * � la fin du tableau. Si au contraire la longueur d�sir�e <code>length</code> est plus courte que la longueur initiale du tableau * <code>array</code>, alors le tableau sera tronqu� (c'est � dire que les �l�ments en trop de <code>array</code> seront oubli�s). * Si la longueur de <code>array</code> est �gale � <code>length</code>, alors <code>array</code> sera retourn� tel quel. * * @param array Tableau � copier. * @param length Longueur du tableau d�sir�. * @return Tableau du m�me type que <code>array</code>, de longueur <code>length</code> et contenant les donn�es de <code>array</code>. */ public static byte[] resize( final byte[] array, final int length ) { return (byte[]) doResize( array, length ); } /** * Renvoie un nouveau tableau qui contiendra les m�mes �l�ments que <code>array</code> mais avec la longueur <code>length</code> * sp�cifi�e. Si la longueur d�sir�e <code>length</code> est plus grande que la longueur initiale du tableau <code>array</code>, * alors le tableau retourn� contiendra tous les �l�ments de <code>array</code> avec en plus des �l�ments initialis�s � 0 * � la fin du tableau. Si au contraire la longueur d�sir�e <code>length</code> est plus courte que la longueur initiale du tableau * <code>array</code>, alors le tableau sera tronqu� (c'est � dire que les �l�ments en trop de <code>array</code> seront oubli�s). * Si la longueur de <code>array</code> est �gale � <code>length</code>, alors <code>array</code> sera retourn� tel quel. * * @param array Tableau � copier. * @param length Longueur du tableau d�sir�. * @return Tableau du m�me type que <code>array</code>, de longueur <code>length</code> et contenant les donn�es de <code>array</code>. */ public static char[] resize( final char[] array, final int length ) { return (char[]) doResize( array, length ); } /** * Renvoie un nouveau tableau qui contiendra les m�mes �l�ments que <code>array</code> mais avec la longueur <code>length</code> * sp�cifi�e. Si la longueur d�sir�e <code>length</code> est plus grande que la longueur initiale du tableau <code>array</code>, * alors le tableau retourn� contiendra tous les �l�ments de <code>array</code> avec en plus des �l�ments initialis�s � <code>false</code> * � la fin du tableau. Si au contraire la longueur d�sir�e <code>length</code> est plus courte que la longueur initiale du tableau * <code>array</code>, alors le tableau sera tronqu� (c'est � dire que les �l�ments en trop de <code>array</code> seront oubli�s). * Si la longueur de <code>array</code> est �gale � <code>length</code>, alors <code>array</code> sera retourn� tel quel. * * @param array Tableau � copier. * @param length Longueur du tableau d�sir�. * @return Tableau du m�me type que <code>array</code>, de longueur <code>length</code> et contenant les donn�es de <code>array</code>. */ public static boolean[] resize( final boolean[] array, final int length ) { return (boolean[]) doResize( array, length ); } /** * Retire des �l�ments au milieu d'un tableau. * * @param array Tableau dans lequel retirer des �l�ments. * @param index Index dans <code>array</code> du premier �l�ment � retirer. * Tous les �l�ments de <code>array</code> qui suivent cet index peuvent �tre d�cal�s. * @param length Nombre d'�l�ments � retirer. * @return Tableau qui contient la donn�es de <code>array</code> avec des �l�ments retir�s. * Cette m�thode peut retourner directement <code>dst</code>, mais la plupart du temps * elle retournera un tableau nouvellement cr��. */ private static Object doRemove( final Object array, final int index, final int length ) { if ( length == 0 ) return array; int array_length = Array.getLength( array ); final Object newArray = Array.newInstance( array.getClass().getComponentType(), array_length -= length ); System.arraycopy( array, 0, newArray, 0, index ); System.arraycopy( array, index + length, newArray, index, array_length - index ); return newArray; } /** * Retire des �l�ments au milieu d'un tableau. * * @param array Tableau dans lequel retirer des �l�ments. * @param index Index dans <code>array</code> du premier �l�ment � retirer. * Tous les �l�ments de <code>array</code> qui suivent cet index peuvent �tre d�cal�s. * @param length Nombre d'�l�ments � retirer. * @return Tableau qui contient la donn�es de <code>array</code> avec des �l�ments retir�s. * Cette m�thode peut retourner directement <code>dst</code>, mais la plupart du temps * elle retournera un tableau nouvellement cr��. */ public static Object[] remove( final Object[] array, final int index, final int length ) { return (Object[]) doRemove( array, index, length ); } /** * Retire des �l�ments au milieu d'un tableau. * * @param array Tableau dans lequel retirer des �l�ments. * @param index Index dans <code>array</code> du premier �l�ment � retirer. * Tous les �l�ments de <code>array</code> qui suivent cet index peuvent �tre d�cal�s. * @param length Nombre d'�l�ments � retirer. * @return Tableau qui contient la donn�es de <code>array</code> avec des �l�ments retir�s. * Cette m�thode peut retourner directement <code>dst</code>, mais la plupart du temps * elle retournera un tableau nouvellement cr��. */ public static double[] remove( final double[] array, final int index, final int length ) { return (double[]) doRemove( array, index, length ); } /** * Retire des �l�ments au milieu d'un tableau. * * @param array Tableau dans lequel retirer des �l�ments. * @param index Index dans <code>array</code> du premier �l�ment � retirer. * Tous les �l�ments de <code>array</code> qui suivent cet index peuvent �tre d�cal�s. * @param length Nombre d'�l�ments � retirer. * @return Tableau qui contient la donn�es de <code>array</code> avec des �l�ments retir�s. * Cette m�thode peut retourner directement <code>dst</code>, mais la plupart du temps * elle retournera un tableau nouvellement cr��. */ public static float[] remove( final float[] array, final int index, final int length ) { return (float[]) doRemove( array, index, length ); } /** * Retire des �l�ments au milieu d'un tableau. * * @param array Tableau dans lequel retirer des �l�ments. * @param index Index dans <code>array</code> du premier �l�ment � retirer. * Tous les �l�ments de <code>array</code> qui suivent cet index peuvent �tre d�cal�s. * @param length Nombre d'�l�ments � retirer. * @return Tableau qui contient la donn�es de <code>array</code> avec des �l�ments retir�s. * Cette m�thode peut retourner directement <code>dst</code>, mais la plupart du temps * elle retournera un tableau nouvellement cr��. */ public static long[] remove( final long[] array, final int index, final int length ) { return (long[]) doRemove( array, index, length ); } /** * Retire des �l�ments au milieu d'un tableau. * * @param array Tableau dans lequel retirer des �l�ments. * @param index Index dans <code>array</code> du premier �l�ment � retirer. * Tous les �l�ments de <code>array</code> qui suivent cet index peuvent �tre d�cal�s. * @param length Nombre d'�l�ments � retirer. * @return Tableau qui contient la donn�es de <code>array</code> avec des �l�ments retir�s. * Cette m�thode peut retourner directement <code>dst</code>, mais la plupart du temps * elle retournera un tableau nouvellement cr��. */ public static int[] remove( final int[] array, final int index, final int length ) { return (int[]) doRemove( array, index, length ); } /** * Retire des �l�ments au milieu d'un tableau. * * @param array Tableau dans lequel retirer des �l�ments. * @param index Index dans <code>array</code> du premier �l�ment � retirer. * Tous les �l�ments de <code>array</code> qui suivent cet index peuvent �tre d�cal�s. * @param length Nombre d'�l�ments � retirer. * @return Tableau qui contient la donn�es de <code>array</code> avec des �l�ments retir�s. * Cette m�thode peut retourner directement <code>dst</code>, mais la plupart du temps * elle retournera un tableau nouvellement cr��. */ public static short[] remove( final short[] array, final int index, final int length ) { return (short[]) doRemove( array, index, length ); } /** * Retire des �l�ments au milieu d'un tableau. * * @param array Tableau dans lequel retirer des �l�ments. * @param index Index dans <code>array</code> du premier �l�ment � retirer. * Tous les �l�ments de <code>array</code> qui suivent cet index peuvent �tre d�cal�s. * @param length Nombre d'�l�ments � retirer. * @return Tableau qui contient la donn�es de <code>array</code> avec des �l�ments retir�s. * Cette m�thode peut retourner directement <code>dst</code>, mais la plupart du temps * elle retournera un tableau nouvellement cr��. */ public static byte[] remove( final byte[] array, final int index, final int length ) { return (byte[]) doRemove( array, index, length ); } /** * Retire des �l�ments au milieu d'un tableau. * * @param array Tableau dans lequel retirer des �l�ments. * @param index Index dans <code>array</code> du premier �l�ment � retirer. * Tous les �l�ments de <code>array</code> qui suivent cet index peuvent �tre d�cal�s. * @param length Nombre d'�l�ments � retirer. * @return Tableau qui contient la donn�es de <code>array</code> avec des �l�ments retir�s. * Cette m�thode peut retourner directement <code>dst</code>, mais la plupart du temps * elle retournera un tableau nouvellement cr��. */ public static char[] remove( final char[] array, final int index, final int length ) { return (char[]) doRemove( array, index, length ); } /** * Retire des �l�ments au milieu d'un tableau. * * @param array Tableau dans lequel retirer des �l�ments. * @param index Index dans <code>array</code> du premier �l�ment � retirer. * Tous les �l�ments de <code>array</code> qui suivent cet index peuvent �tre d�cal�s. * @param length Nombre d'�l�ments � retirer. * @return Tableau qui contient la donn�es de <code>array</code> avec des �l�ments retir�s. * Cette m�thode peut retourner directement <code>dst</code>, mais la plupart du temps * elle retournera un tableau nouvellement cr��. */ public static boolean[] remove( final boolean[] array, final int index, final int length ) { return (boolean[]) doRemove( array, index, length ); } /** * Ins�re des espaces au milieu d'un tableau. * Ces "espaces" seront constitu�s d'�lements nuls. * * @param array Tableau dans lequel ins�rer des espaces. * @param index Index de <code>array</code> o� ins�rer les espaces. * Tous les �l�ments de <code>array</code> dont l'index est * �gal ou sup�rieur � <code>index</code> seront d�cal�s. * @param length Nombre d'espaces � ins�rer. * @return Tableau qui contient la donn�es de <code>array</code> avec l'espace supl�mentaire. * Cette m�thode peut retourner directement <code>dst</code>, mais la plupart du temps * elle retournera un tableau nouvellement cr��. */ private static Object doInsert( final Object array, final int index, final int length ) { if ( length == 0 ) return array; final int array_length = Array.getLength( array ); final Object newArray = Array.newInstance( array.getClass().getComponentType(), array_length + length ); System.arraycopy( array, 0, newArray, 0, index ); System.arraycopy( array, index, newArray, index + length, array_length - index ); return newArray; } /** * Ins�re des espaces au milieu d'un tableau. * Ces "espaces" seront constitu�s d'�lements nuls. * * @param array Tableau dans lequel ins�rer des espaces. * @param index Index de <code>array</code> o� ins�rer les espaces. * Tous les �l�ments de <code>array</code> dont l'index est * �gal ou sup�rieur � <code>index</code> seront d�cal�s. * @param length Nombre d'espaces � ins�rer. * @return Tableau qui contient la donn�es de <code>array</code> avec l'espace supl�mentaire. * Cette m�thode peut retourner directement <code>dst</code>, mais la plupart du temps * elle retournera un tableau nouvellement cr��. */ public static Object[] insert( final Object[] array, final int index, final int length ) { return (Object[]) doInsert( array, index, length ); } /** * Ins�re des espaces au milieu d'un tableau. * Ces "espaces" seront constitu�s de z�ros. * * @param array Tableau dans lequel ins�rer des espaces. * @param index Index de <code>array</code> o� ins�rer les espaces. * Tous les �l�ments de <code>array</code> dont l'index est * �gal ou sup�rieur � <code>index</code> seront d�cal�s. * @param length Nombre d'espaces � ins�rer. * @return Tableau qui contient la donn�es de <code>array</code> avec l'espace supl�mentaire. * Cette m�thode peut retourner directement <code>dst</code>, mais la plupart du temps * elle retournera un tableau nouvellement cr��. */ public static double[] insert( final double[] array, final int index, final int length ) { return (double[]) doInsert( array, index, length ); } /** * Ins�re des espaces au milieu d'un tableau. * Ces "espaces" seront constitu�s de z�ros. * * @param array Tableau dans lequel ins�rer des espaces. * @param index Index de <code>array</code> o� ins�rer les espaces. * Tous les �l�ments de <code>array</code> qui suivent cet index peuvent �tre d�cal�s. * @param length Nombre d'espaces � ins�rer. * @return Tableau qui contient la donn�es de <code>array</code> avec l'espace supl�mentaire. * Cette m�thode peut retourner directement <code>dst</code>, mais la plupart du temps * elle retournera un tableau nouvellement cr��. */ public static float[] insert( final float[] array, final int index, final int length ) { return (float[]) doInsert( array, index, length ); } /** * Ins�re des espaces au milieu d'un tableau. * Ces "espaces" seront constitu�s de z�ros. * * @param array Tableau dans lequel ins�rer des espaces. * @param index Index de <code>array</code> o� ins�rer les espaces. * Tous les �l�ments de <code>array</code> qui suivent cet index peuvent �tre d�cal�s. * @param length Nombre d'espaces � ins�rer. * @return Tableau qui contient la donn�es de <code>array</code> avec l'espace supl�mentaire. * Cette m�thode peut retourner directement <code>dst</code>, mais la plupart du temps * elle retournera un tableau nouvellement cr��. */ public static long[] insert( final long[] array, final int index, final int length ) { return (long[]) doInsert( array, index, length ); } /** * Ins�re des espaces au milieu d'un tableau. * Ces "espaces" seront constitu�s de z�ros. * * @param array Tableau dans lequel ins�rer des espaces. * @param index Index de <code>array</code> o� ins�rer les espaces. * Tous les �l�ments de <code>array</code> dont l'index est * �gal ou sup�rieur � <code>index</code> seront d�cal�s. * @param length Nombre d'espaces � ins�rer. * @return Tableau qui contient la donn�es de <code>array</code> avec l'espace supl�mentaire. * Cette m�thode peut retourner directement <code>dst</code>, mais la plupart du temps * elle retournera un tableau nouvellement cr��. */ public static int[] insert( final int[] array, final int index, final int length ) { return (int[]) doInsert( array, index, length ); } /** * Ins�re des espaces au milieu d'un tableau. * Ces "espaces" seront constitu�s de z�ros. * * @param array Tableau dans lequel ins�rer des espaces. * @param index Index de <code>array</code> o� ins�rer les espaces. * Tous les �l�ments de <code>array</code> dont l'index est * �gal ou sup�rieur � <code>index</code> seront d�cal�s. * @param length Nombre d'espaces � ins�rer. * @return Tableau qui contient la donn�es de <code>array</code> avec l'espace supl�mentaire. * Cette m�thode peut retourner directement <code>dst</code>, mais la plupart du temps * elle retournera un tableau nouvellement cr��. */ public static short[] insert( final short[] array, final int index, final int length ) { return (short[]) doInsert( array, index, length ); } /** * Ins�re des espaces au milieu d'un tableau. * Ces "espaces" seront constitu�s de z�ros. * * @param array Tableau dans lequel ins�rer des espaces. * @param index Index de <code>array</code> o� ins�rer les espaces. * Tous les �l�ments de <code>array</code> dont l'index est * �gal ou sup�rieur � <code>index</code> seront d�cal�s. * @param length Nombre d'espaces � ins�rer. * @return Tableau qui contient la donn�es de <code>array</code> avec l'espace supl�mentaire. * Cette m�thode peut retourner directement <code>dst</code>, mais la plupart du temps * elle retournera un tableau nouvellement cr��. */ public static byte[] insert( final byte[] array, final int index, final int length ) { return (byte[]) doInsert( array, index, length ); } /** * Ins�re des espaces au milieu d'un tableau. * Ces "espaces" seront constitu�s de z�ros. * * @param array Tableau dans lequel ins�rer des espaces. * @param index Index de <code>array</code> o� ins�rer les espaces. * Tous les �l�ments de <code>array</code> dont l'index est * �gal ou sup�rieur � <code>index</code> seront d�cal�s. * @param length Nombre d'espaces � ins�rer. * @return Tableau qui contient la donn�es de <code>array</code> avec l'espace supl�mentaire. * Cette m�thode peut retourner directement <code>dst</code>, mais la plupart du temps * elle retournera un tableau nouvellement cr��. */ public static char[] insert( final char[] array, final int index, final int length ) { return (char[]) doInsert( array, index, length ); } /** * Ins�re des espaces au milieu d'un tableau. * Ces "espaces" seront constitu�s de <code>false</code>. * * @param array Tableau dans lequel ins�rer des espaces. * @param index Index de <code>array</code> o� ins�rer les espaces. * Tous les �l�ments de <code>array</code> dont l'index est * �gal ou sup�rieur � <code>index</code> seront d�cal�s. * @param length Nombre d'espaces � ins�rer. * @return Tableau qui contient la donn�es de <code>array</code> avec l'espace supl�mentaire. * Cette m�thode peut retourner directement <code>dst</code>, mais la plupart du temps * elle retournera un tableau nouvellement cr��. */ public static boolean[] insert( final boolean[] array, final int index, final int length ) { return (boolean[]) doInsert( array, index, length ); } /** * Ins�re une portion de tableau dans un autre tableau. Le tableau <code>src</code> * sera ins�r� en totalit� ou en partie dans le tableau <code>dst</code>. * * @param src Tableau � ins�rer dans <code>dst</code>. * @param src_pos Index de la premi�re donn�e de <code>src</code> � ins�rer dans <code>dst</code>. * @param dst Tableau dans lequel ins�rer des donn�es de <code>src</code>. * @param dst_pos Index de <code>dst</code> o� ins�rer les donn�es de <code>src</code>. * Tous les �l�ments de <code>dst</code> dont l'index est * �gal ou sup�rieur � <code>dst_pos</code> seront d�cal�s. * @param length Nombre de donn�es de <code>src</code> � ins�rer. * @return Tableau qui contient la combinaison de <code>src</code> et <code>dst</code>. Cette * m�thode peut retourner directement <code>dst</code>, mais jamais <code>src</code>. * La plupart du temps, elle retournera un tableau nouvellement cr��. */ private static Object doInsert( final Object src, final int src_pos, final Object dst, final int dst_pos, final int length ) { if ( length == 0 ) return dst; final int dst_length = Array.getLength( dst ); final Object newArray = Array.newInstance( dst.getClass().getComponentType(), dst_length + length ); System.arraycopy( dst, 0, newArray, 0, dst_pos ); System.arraycopy( src, src_pos, newArray, dst_pos, length ); System.arraycopy( dst, dst_pos, newArray, dst_pos + length, dst_length - dst_pos ); return newArray; } /** * Ins�re une portion de tableau dans un autre tableau. Le tableau <code>src</code> * sera ins�r� en totalit� ou en partie dans le tableau <code>dst</code>. * * @param src Tableau � ins�rer dans <code>dst</code>. * @param src_pos Index de la premi�re donn�e de <code>src</code> � ins�rer dans <code>dst</code>. * @param dst Tableau dans lequel ins�rer des donn�es de <code>src</code>. * @param dst_pos Index de <code>dst</code> o� ins�rer les donn�es de <code>src</code>. * Tous les �l�ments de <code>dst</code> dont l'index est * �gal ou sup�rieur � <code>dst_pos</code> seront d�cal�s. * @param length Nombre de donn�es de <code>src</code> � ins�rer. * @return Tableau qui contient la combinaison de <code>src</code> et <code>dst</code>. Cette * m�thode peut retourner directement <code>dst</code>, mais jamais <code>src</code>. * La plupart du temps, elle retournera un tableau nouvellement cr��. */ public static Object[] insert( final Object[] src, final int src_pos, final Object[] dst, final int dst_pos, final int length ) { return (Object[]) doInsert( src, src_pos, dst, dst_pos, length ); } /** * Ins�re une portion de tableau dans un autre tableau. Le tableau <code>src</code> * sera ins�r� en totalit� ou en partie dans le tableau <code>dst</code>. * * @param src Tableau � ins�rer dans <code>dst</code>. * @param src_pos Index de la premi�re donn�e de <code>src</code> � ins�rer dans <code>dst</code>. * @param dst Tableau dans lequel ins�rer des donn�es de <code>src</code>. * @param dst_pos Index de <code>dst</code> o� ins�rer les donn�es de <code>src</code>. * Tous les �l�ments de <code>dst</code> dont l'index est * �gal ou sup�rieur � <code>dst_pos</code> seront d�cal�s. * @param length Nombre de donn�es de <code>src</code> � ins�rer. * @return Tableau qui contient la combinaison de <code>src</code> et <code>dst</code>. Cette * m�thode peut retourner directement <code>dst</code>, mais jamais <code>src</code>. * La plupart du temps, elle retournera un tableau nouvellement cr��. */ public static double[] insert( final double[] src, final int src_pos, final double[] dst, final int dst_pos, final int length ) { return (double[]) doInsert( src, src_pos, dst, dst_pos, length ); } /** * Ins�re une portion de tableau dans un autre tableau. Le tableau <code>src</code> * sera ins�r� en totalit� ou en partie dans le tableau <code>dst</code>. * * @param src Tableau � ins�rer dans <code>dst</code>. * @param src_pos Index de la premi�re donn�e de <code>src</code> � ins�rer dans <code>dst</code>. * @param dst Tableau dans lequel ins�rer des donn�es de <code>src</code>. * @param dst_pos Index de <code>dst</code> o� ins�rer les donn�es de <code>src</code>. * Tous les �l�ments de <code>dst</code> dont l'index est * �gal ou sup�rieur � <code>dst_pos</code> seront d�cal�s. * @param length Nombre de donn�es de <code>src</code> � ins�rer. * @return Tableau qui contient la combinaison de <code>src</code> et <code>dst</code>. Cette * m�thode peut retourner directement <code>dst</code>, mais jamais <code>src</code>. * La plupart du temps, elle retournera un tableau nouvellement cr��. */ public static float[] insert( final float[] src, final int src_pos, final float[] dst, final int dst_pos, final int length ) { return (float[]) doInsert( src, src_pos, dst, dst_pos, length ); } /** * Ins�re une portion de tableau dans un autre tableau. Le tableau <code>src</code> * sera ins�r� en totalit� ou en partie dans le tableau <code>dst</code>. * * @param src Tableau � ins�rer dans <code>dst</code>. * @param src_pos Index de la premi�re donn�e de <code>src</code> � ins�rer dans <code>dst</code>. * @param dst Tableau dans lequel ins�rer des donn�es de <code>src</code>. * @param dst_pos Index de <code>dst</code> o� ins�rer les donn�es de <code>src</code>. * Tous les �l�ments de <code>dst</code> dont l'index est * �gal ou sup�rieur � <code>dst_pos</code> seront d�cal�s. * @param length Nombre de donn�es de <code>src</code> � ins�rer. * @return Tableau qui contient la combinaison de <code>src</code> et <code>dst</code>. Cette * m�thode peut retourner directement <code>dst</code>, mais jamais <code>src</code>. * La plupart du temps, elle retournera un tableau nouvellement cr��. */ public static long[] insert( final long[] src, final int src_pos, final long[] dst, final int dst_pos, final int length ) { return (long[]) doInsert( src, src_pos, dst, dst_pos, length ); } /** * Ins�re une portion de tableau dans un autre tableau. Le tableau <code>src</code> * sera ins�r� en totalit� ou en partie dans le tableau <code>dst</code>. * * @param src Tableau � ins�rer dans <code>dst</code>. * @param src_pos Index de la premi�re donn�e de <code>src</code> � ins�rer dans <code>dst</code>. * @param dst Tableau dans lequel ins�rer des donn�es de <code>src</code>. * @param dst_pos Index de <code>dst</code> o� ins�rer les donn�es de <code>src</code>. * Tous les �l�ments de <code>dst</code> dont l'index est * �gal ou sup�rieur � <code>dst_pos</code> seront d�cal�s. * @param length Nombre de donn�es de <code>src</code> � ins�rer. * @return Tableau qui contient la combinaison de <code>src</code> et <code>dst</code>. Cette * m�thode peut retourner directement <code>dst</code>, mais jamais <code>src</code>. * La plupart du temps, elle retournera un tableau nouvellement cr��. */ public static int[] insert( final int[] src, final int src_pos, final int[] dst, final int dst_pos, final int length ) { return (int[]) doInsert( src, src_pos, dst, dst_pos, length ); } /** * Ins�re une portion de tableau dans un autre tableau. Le tableau <code>src</code> * sera ins�r� en totalit� ou en partie dans le tableau <code>dst</code>. * * @param src Tableau � ins�rer dans <code>dst</code>. * @param src_pos Index de la premi�re donn�e de <code>src</code> � ins�rer dans <code>dst</code>. * @param dst Tableau dans lequel ins�rer des donn�es de <code>src</code>. * @param dst_pos Index de <code>dst</code> o� ins�rer les donn�es de <code>src</code>. * Tous les �l�ments de <code>dst</code> dont l'index est * �gal ou sup�rieur � <code>dst_pos</code> seront d�cal�s. * @param length Nombre de donn�es de <code>src</code> � ins�rer. * @return Tableau qui contient la combinaison de <code>src</code> et <code>dst</code>. Cette * m�thode peut retourner directement <code>dst</code>, mais jamais <code>src</code>. * La plupart du temps, elle retournera un tableau nouvellement cr��. */ public static short[] insert( final short[] src, final int src_pos, final short[] dst, final int dst_pos, final int length ) { return (short[]) doInsert( src, src_pos, dst, dst_pos, length ); } /** * Ins�re une portion de tableau dans un autre tableau. Le tableau <code>src</code> * sera ins�r� en totalit� ou en partie dans le tableau <code>dst</code>. * * @param src Tableau � ins�rer dans <code>dst</code>. * @param src_pos Index de la premi�re donn�e de <code>src</code> � ins�rer dans <code>dst</code>. * @param dst Tableau dans lequel ins�rer des donn�es de <code>src</code>. * @param dst_pos Index de <code>dst</code> o� ins�rer les donn�es de <code>src</code>. * Tous les �l�ments de <code>dst</code> dont l'index est * �gal ou sup�rieur � <code>dst_pos</code> seront d�cal�s. * @param length Nombre de donn�es de <code>src</code> � ins�rer. * @return Tableau qui contient la combinaison de <code>src</code> et <code>dst</code>. Cette * m�thode peut retourner directement <code>dst</code>, mais jamais <code>src</code>. * La plupart du temps, elle retournera un tableau nouvellement cr��. */ public static byte[] insert( final byte[] src, final int src_pos, final byte[] dst, final int dst_pos, final int length ) { return (byte[]) doInsert( src, src_pos, dst, dst_pos, length ); } /** * Ins�re une portion de tableau dans un autre tableau. Le tableau <code>src</code> * sera ins�r� en totalit� ou en partie dans le tableau <code>dst</code>. * * @param src Tableau � ins�rer dans <code>dst</code>. * @param src_pos Index de la premi�re donn�e de <code>src</code> � ins�rer dans <code>dst</code>. * @param dst Tableau dans lequel ins�rer des donn�es de <code>src</code>. * @param dst_pos Index de <code>dst</code> o� ins�rer les donn�es de <code>src</code>. * Tous les �l�ments de <code>dst</code> dont l'index est * �gal ou sup�rieur � <code>dst_pos</code> seront d�cal�s. * @param length Nombre de donn�es de <code>src</code> � ins�rer. * @return Tableau qui contient la combinaison de <code>src</code> et <code>dst</code>. Cette * m�thode peut retourner directement <code>dst</code>, mais jamais <code>src</code>. * La plupart du temps, elle retournera un tableau nouvellement cr��. */ public static char[] insert( final char[] src, final int src_pos, final char[] dst, final int dst_pos, final int length ) { return (char[]) doInsert( src, src_pos, dst, dst_pos, length ); } /** * Ins�re une portion de tableau dans un autre tableau. Le tableau <code>src</code> * sera ins�r� en totalit� ou en partie dans le tableau <code>dst</code>. * * @param src Tableau � ins�rer dans <code>dst</code>. * @param src_pos Index de la premi�re donn�e de <code>src</code> � ins�rer dans <code>dst</code>. * @param dst Tableau dans lequel ins�rer des donn�es de <code>src</code>. * @param dst_pos Index de <code>dst</code> o� ins�rer les donn�es de <code>src</code>. * Tous les �l�ments de <code>dst</code> dont l'index est * �gal ou sup�rieur � <code>dst_pos</code> seront d�cal�s. * @param length Nombre de donn�es de <code>src</code> � ins�rer. * @return Tableau qui contient la combinaison de <code>src</code> et <code>dst</code>. Cette * m�thode peut retourner directement <code>dst</code>, mais jamais <code>src</code>. * La plupart du temps, elle retournera un tableau nouvellement cr��. */ public static boolean[] insert( final boolean[] src, final int src_pos, final boolean[] dst, final int dst_pos, final int length ) { return (boolean[]) doInsert( src, src_pos, dst, dst_pos, length ); } }