001 //$HeadURL: svn+ssh://rbezema@svn.wald.intevation.org/deegree/base/tags/2.1/src/org/deegree/model/csct/resources/XArray.java $ 002 /*---------------- FILE HEADER ------------------------------------------ 003 004 This file is part of deegree. 005 Copyright (C) 2001 by: 006 EXSE, Department of Geography, University of Bonn 007 http://www.giub.uni-bonn.de/exse/ 008 lat/lon GmbH 009 http://www.lat-lon.de 010 011 It has been implemented within SEAGIS - An OpenSource implementation of OpenGIS specification 012 (C) 2001, Institut de Recherche pour le D�veloppement (http://sourceforge.net/projects/seagis/) 013 SEAGIS Contacts: Surveillance de l'Environnement Assist�e par Satellite 014 Institut de Recherche pour le D�veloppement / US-Espace 015 mailto:seasnet@teledetection.fr 016 017 018 This library is free software; you can redistribute it and/or 019 modify it under the terms of the GNU Lesser General Public 020 License as published by the Free Software Foundation; either 021 version 2.1 of the License, or (at your option) any later version. 022 023 This library is distributed in the hope that it will be useful, 024 but WITHOUT ANY WARRANTY; without even the implied warranty of 025 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 026 Lesser General Public License for more details. 027 028 You should have received a copy of the GNU Lesser General Public 029 License along with this library; if not, write to the Free Software 030 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 031 032 Contact: 033 034 Andreas Poth 035 lat/lon GmbH 036 Aennchenstr. 19 037 53115 Bonn 038 Germany 039 E-Mail: poth@lat-lon.de 040 041 Klaus Greve 042 Department of Geography 043 University of Bonn 044 Meckenheimer Allee 166 045 53115 Bonn 046 Germany 047 E-Mail: klaus.greve@uni-bonn.de 048 049 050 ---------------------------------------------------------------------------*/ 051 package org.deegree.model.csct.resources; 052 053 // Miscellaneous 054 import java.lang.reflect.Array; 055 056 /** 057 * Simple operations on arrays. This class provides a central place for inserting and 058 * deleting elements in an array, as well as resizing the array. This class may be 059 * removed if JavaSoft provide some language construct functionally equivalent to 060 * C/C++'s <code>realloc</code>. 061 * 062 * @version 1.0 063 * @author Martin Desruisseaux 064 */ 065 public final class XArray { 066 /** 067 * Toute construction d'objet 068 * de cette classe est interdites. 069 */ 070 private XArray() { 071 } 072 073 /** 074 * Renvoie un nouveau tableau qui contiendra les m�mes �l�ments que <code>array</code> mais avec la longueur <code>length</code> 075 * sp�cifi�e. Si la longueur d�sir�e <code>length</code> est plus grande que la longueur initiale du tableau <code>array</code>, 076 * alors le tableau retourn� contiendra tous les �l�ments de <code>array</code> avec en plus des �l�ments initialis�s � <code>null</code> 077 * � la fin du tableau. Si au contraire la longueur d�sir�e <code>length</code> est plus courte que la longueur initiale du tableau 078 * <code>array</code>, alors le tableau sera tronqu� (c'est � dire que les �l�ments en trop de <code>array</code> seront oubli�s). 079 * Si la longueur de <code>array</code> est �gale � <code>length</code>, alors <code>array</code> sera retourn� tel quel. 080 * 081 * @param array Tableau � copier. 082 * @param length Longueur du tableau d�sir�. 083 * @return Tableau du m�me type que <code>array</code>, de longueur <code>length</code> et contenant les donn�es de <code>array</code>. 084 */ 085 private static Object doResize( final Object array, final int length ) { 086 final int current = Array.getLength( array ); 087 if ( current != length ) { 088 final Object newArray = Array.newInstance( array.getClass().getComponentType(), length ); 089 System.arraycopy( array, 0, newArray, 0, Math.min( current, length ) ); 090 return newArray; 091 } 092 return array; 093 } 094 095 /** 096 * Renvoie un nouveau tableau qui contiendra les m�mes �l�ments que <code>array</code> mais avec la longueur <code>length</code> 097 * sp�cifi�e. Si la longueur d�sir�e <code>length</code> est plus grande que la longueur initiale du tableau <code>array</code>, 098 * alors le tableau retourn� contiendra tous les �l�ments de <code>array</code> avec en plus des �l�ments initialis�s � <code>null</code> 099 * � la fin du tableau. Si au contraire la longueur d�sir�e <code>length</code> est plus courte que la longueur initiale du tableau 100 * <code>array</code>, alors le tableau sera tronqu� (c'est � dire que les �l�ments en trop de <code>array</code> seront oubli�s). 101 * Si la longueur de <code>array</code> est �gale � <code>length</code>, alors <code>array</code> sera retourn� tel quel. 102 * 103 * @param array Tableau � copier. 104 * @param length Longueur du tableau d�sir�. 105 * @return Tableau du m�me type que <code>array</code>, de longueur <code>length</code> et contenant les donn�es de <code>array</code>. 106 */ 107 public static Object[] resize( final Object[] array, final int length ) { 108 return (Object[]) doResize( array, length ); 109 } 110 111 /** 112 * Renvoie un nouveau tableau qui contiendra les m�mes �l�ments que <code>array</code> mais avec la longueur <code>length</code> 113 * sp�cifi�e. Si la longueur d�sir�e <code>length</code> est plus grande que la longueur initiale du tableau <code>array</code>, 114 * alors le tableau retourn� contiendra tous les �l�ments de <code>array</code> avec en plus des �l�ments initialis�s � 0 115 * � la fin du tableau. Si au contraire la longueur d�sir�e <code>length</code> est plus courte que la longueur initiale du tableau 116 * <code>array</code>, alors le tableau sera tronqu� (c'est � dire que les �l�ments en trop de <code>array</code> seront oubli�s). 117 * Si la longueur de <code>array</code> est �gale � <code>length</code>, alors <code>array</code> sera retourn� tel quel. 118 * 119 * @param array Tableau � copier. 120 * @param length Longueur du tableau d�sir�. 121 * @return Tableau du m�me type que <code>array</code>, de longueur <code>length</code> et contenant les donn�es de <code>array</code>. 122 */ 123 public static double[] resize( final double[] array, final int length ) { 124 return (double[]) doResize( array, length ); 125 } 126 127 /** 128 * Renvoie un nouveau tableau qui contiendra les m�mes �l�ments que <code>array</code> mais avec la longueur <code>length</code> 129 * sp�cifi�e. Si la longueur d�sir�e <code>length</code> est plus grande que la longueur initiale du tableau <code>array</code>, 130 * alors le tableau retourn� contiendra tous les �l�ments de <code>array</code> avec en plus des �l�ments initialis�s � 0 131 * � la fin du tableau. Si au contraire la longueur d�sir�e <code>length</code> est plus courte que la longueur initiale du tableau 132 * <code>array</code>, alors le tableau sera tronqu� (c'est � dire que les �l�ments en trop de <code>array</code> seront oubli�s). 133 * Si la longueur de <code>array</code> est �gale � <code>length</code>, alors <code>array</code> sera retourn� tel quel. 134 * 135 * @param array Tableau � copier. 136 * @param length Longueur du tableau d�sir�. 137 * @return Tableau du m�me type que <code>array</code>, de longueur <code>length</code> et contenant les donn�es de <code>array</code>. 138 */ 139 public static float[] resize( final float[] array, final int length ) { 140 return (float[]) doResize( array, length ); 141 } 142 143 /** 144 * Renvoie un nouveau tableau qui contiendra les m�mes �l�ments que <code>array</code> mais avec la longueur <code>length</code> 145 * sp�cifi�e. Si la longueur d�sir�e <code>length</code> est plus grande que la longueur initiale du tableau <code>array</code>, 146 * alors le tableau retourn� contiendra tous les �l�ments de <code>array</code> avec en plus des �l�ments initialis�s � 0 147 * � la fin du tableau. Si au contraire la longueur d�sir�e <code>length</code> est plus courte que la longueur initiale du tableau 148 * <code>array</code>, alors le tableau sera tronqu� (c'est � dire que les �l�ments en trop de <code>array</code> seront oubli�s). 149 * Si la longueur de <code>array</code> est �gale � <code>length</code>, alors <code>array</code> sera retourn� tel quel. 150 * 151 * @param array Tableau � copier. 152 * @param length Longueur du tableau d�sir�. 153 * @return Tableau du m�me type que <code>array</code>, de longueur <code>length</code> et contenant les donn�es de <code>array</code>. 154 */ 155 public static long[] resize( final long[] array, final int length ) { 156 return (long[]) doResize( array, length ); 157 } 158 159 /** 160 * Renvoie un nouveau tableau qui contiendra les m�mes �l�ments que <code>array</code> mais avec la longueur <code>length</code> 161 * sp�cifi�e. Si la longueur d�sir�e <code>length</code> est plus grande que la longueur initiale du tableau <code>array</code>, 162 * alors le tableau retourn� contiendra tous les �l�ments de <code>array</code> avec en plus des �l�ments initialis�s � 0 163 * � la fin du tableau. Si au contraire la longueur d�sir�e <code>length</code> est plus courte que la longueur initiale du tableau 164 * <code>array</code>, alors le tableau sera tronqu� (c'est � dire que les �l�ments en trop de <code>array</code> seront oubli�s). 165 * Si la longueur de <code>array</code> est �gale � <code>length</code>, alors <code>array</code> sera retourn� tel quel. 166 * 167 * @param array Tableau � copier. 168 * @param length Longueur du tableau d�sir�. 169 * @return Tableau du m�me type que <code>array</code>, de longueur <code>length</code> et contenant les donn�es de <code>array</code>. 170 */ 171 public static int[] resize( final int[] array, final int length ) { 172 return (int[]) doResize( array, length ); 173 } 174 175 /** 176 * Renvoie un nouveau tableau qui contiendra les m�mes �l�ments que <code>array</code> mais avec la longueur <code>length</code> 177 * sp�cifi�e. Si la longueur d�sir�e <code>length</code> est plus grande que la longueur initiale du tableau <code>array</code>, 178 * alors le tableau retourn� contiendra tous les �l�ments de <code>array</code> avec en plus des �l�ments initialis�s � 0 179 * � la fin du tableau. Si au contraire la longueur d�sir�e <code>length</code> est plus courte que la longueur initiale du tableau 180 * <code>array</code>, alors le tableau sera tronqu� (c'est � dire que les �l�ments en trop de <code>array</code> seront oubli�s). 181 * Si la longueur de <code>array</code> est �gale � <code>length</code>, alors <code>array</code> sera retourn� tel quel. 182 * 183 * @param array Tableau � copier. 184 * @param length Longueur du tableau d�sir�. 185 * @return Tableau du m�me type que <code>array</code>, de longueur <code>length</code> et contenant les donn�es de <code>array</code>. 186 */ 187 public static short[] resize( final short[] array, final int length ) { 188 return (short[]) doResize( array, length ); 189 } 190 191 /** 192 * Renvoie un nouveau tableau qui contiendra les m�mes �l�ments que <code>array</code> mais avec la longueur <code>length</code> 193 * sp�cifi�e. Si la longueur d�sir�e <code>length</code> est plus grande que la longueur initiale du tableau <code>array</code>, 194 * alors le tableau retourn� contiendra tous les �l�ments de <code>array</code> avec en plus des �l�ments initialis�s � 0 195 * � la fin du tableau. Si au contraire la longueur d�sir�e <code>length</code> est plus courte que la longueur initiale du tableau 196 * <code>array</code>, alors le tableau sera tronqu� (c'est � dire que les �l�ments en trop de <code>array</code> seront oubli�s). 197 * Si la longueur de <code>array</code> est �gale � <code>length</code>, alors <code>array</code> sera retourn� tel quel. 198 * 199 * @param array Tableau � copier. 200 * @param length Longueur du tableau d�sir�. 201 * @return Tableau du m�me type que <code>array</code>, de longueur <code>length</code> et contenant les donn�es de <code>array</code>. 202 */ 203 public static byte[] resize( final byte[] array, final int length ) { 204 return (byte[]) doResize( array, length ); 205 } 206 207 /** 208 * Renvoie un nouveau tableau qui contiendra les m�mes �l�ments que <code>array</code> mais avec la longueur <code>length</code> 209 * sp�cifi�e. Si la longueur d�sir�e <code>length</code> est plus grande que la longueur initiale du tableau <code>array</code>, 210 * alors le tableau retourn� contiendra tous les �l�ments de <code>array</code> avec en plus des �l�ments initialis�s � 0 211 * � la fin du tableau. Si au contraire la longueur d�sir�e <code>length</code> est plus courte que la longueur initiale du tableau 212 * <code>array</code>, alors le tableau sera tronqu� (c'est � dire que les �l�ments en trop de <code>array</code> seront oubli�s). 213 * Si la longueur de <code>array</code> est �gale � <code>length</code>, alors <code>array</code> sera retourn� tel quel. 214 * 215 * @param array Tableau � copier. 216 * @param length Longueur du tableau d�sir�. 217 * @return Tableau du m�me type que <code>array</code>, de longueur <code>length</code> et contenant les donn�es de <code>array</code>. 218 */ 219 public static char[] resize( final char[] array, final int length ) { 220 return (char[]) doResize( array, length ); 221 } 222 223 /** 224 * Renvoie un nouveau tableau qui contiendra les m�mes �l�ments que <code>array</code> mais avec la longueur <code>length</code> 225 * sp�cifi�e. Si la longueur d�sir�e <code>length</code> est plus grande que la longueur initiale du tableau <code>array</code>, 226 * alors le tableau retourn� contiendra tous les �l�ments de <code>array</code> avec en plus des �l�ments initialis�s � <code>false</code> 227 * � la fin du tableau. Si au contraire la longueur d�sir�e <code>length</code> est plus courte que la longueur initiale du tableau 228 * <code>array</code>, alors le tableau sera tronqu� (c'est � dire que les �l�ments en trop de <code>array</code> seront oubli�s). 229 * Si la longueur de <code>array</code> est �gale � <code>length</code>, alors <code>array</code> sera retourn� tel quel. 230 * 231 * @param array Tableau � copier. 232 * @param length Longueur du tableau d�sir�. 233 * @return Tableau du m�me type que <code>array</code>, de longueur <code>length</code> et contenant les donn�es de <code>array</code>. 234 */ 235 public static boolean[] resize( final boolean[] array, final int length ) { 236 return (boolean[]) doResize( array, length ); 237 } 238 239 /** 240 * Retire des �l�ments au milieu d'un tableau. 241 * 242 * @param array Tableau dans lequel retirer des �l�ments. 243 * @param index Index dans <code>array</code> du premier �l�ment � retirer. 244 * Tous les �l�ments de <code>array</code> qui suivent cet index peuvent �tre d�cal�s. 245 * @param length Nombre d'�l�ments � retirer. 246 * @return Tableau qui contient la donn�es de <code>array</code> avec des �l�ments retir�s. 247 * Cette m�thode peut retourner directement <code>dst</code>, mais la plupart du temps 248 * elle retournera un tableau nouvellement cr��. 249 */ 250 private static Object doRemove( final Object array, final int index, final int length ) { 251 if ( length == 0 ) 252 return array; 253 int array_length = Array.getLength( array ); 254 final Object newArray = Array.newInstance( array.getClass().getComponentType(), 255 array_length -= length ); 256 System.arraycopy( array, 0, newArray, 0, index ); 257 System.arraycopy( array, index + length, newArray, index, array_length - index ); 258 return newArray; 259 } 260 261 /** 262 * Retire des �l�ments au milieu d'un tableau. 263 * 264 * @param array Tableau dans lequel retirer des �l�ments. 265 * @param index Index dans <code>array</code> du premier �l�ment � retirer. 266 * Tous les �l�ments de <code>array</code> qui suivent cet index peuvent �tre d�cal�s. 267 * @param length Nombre d'�l�ments � retirer. 268 * @return Tableau qui contient la donn�es de <code>array</code> avec des �l�ments retir�s. 269 * Cette m�thode peut retourner directement <code>dst</code>, mais la plupart du temps 270 * elle retournera un tableau nouvellement cr��. 271 */ 272 public static Object[] remove( final Object[] array, final int index, final int length ) { 273 return (Object[]) doRemove( array, index, length ); 274 } 275 276 /** 277 * Retire des �l�ments au milieu d'un tableau. 278 * 279 * @param array Tableau dans lequel retirer des �l�ments. 280 * @param index Index dans <code>array</code> du premier �l�ment � retirer. 281 * Tous les �l�ments de <code>array</code> qui suivent cet index peuvent �tre d�cal�s. 282 * @param length Nombre d'�l�ments � retirer. 283 * @return Tableau qui contient la donn�es de <code>array</code> avec des �l�ments retir�s. 284 * Cette m�thode peut retourner directement <code>dst</code>, mais la plupart du temps 285 * elle retournera un tableau nouvellement cr��. 286 */ 287 public static double[] remove( final double[] array, final int index, final int length ) { 288 return (double[]) doRemove( array, index, length ); 289 } 290 291 /** 292 * Retire des �l�ments au milieu d'un tableau. 293 * 294 * @param array Tableau dans lequel retirer des �l�ments. 295 * @param index Index dans <code>array</code> du premier �l�ment � retirer. 296 * Tous les �l�ments de <code>array</code> qui suivent cet index peuvent �tre d�cal�s. 297 * @param length Nombre d'�l�ments � retirer. 298 * @return Tableau qui contient la donn�es de <code>array</code> avec des �l�ments retir�s. 299 * Cette m�thode peut retourner directement <code>dst</code>, mais la plupart du temps 300 * elle retournera un tableau nouvellement cr��. 301 */ 302 public static float[] remove( final float[] array, final int index, final int length ) { 303 return (float[]) doRemove( array, index, length ); 304 } 305 306 /** 307 * Retire des �l�ments au milieu d'un tableau. 308 * 309 * @param array Tableau dans lequel retirer des �l�ments. 310 * @param index Index dans <code>array</code> du premier �l�ment � retirer. 311 * Tous les �l�ments de <code>array</code> qui suivent cet index peuvent �tre d�cal�s. 312 * @param length Nombre d'�l�ments � retirer. 313 * @return Tableau qui contient la donn�es de <code>array</code> avec des �l�ments retir�s. 314 * Cette m�thode peut retourner directement <code>dst</code>, mais la plupart du temps 315 * elle retournera un tableau nouvellement cr��. 316 */ 317 public static long[] remove( final long[] array, final int index, final int length ) { 318 return (long[]) doRemove( array, index, length ); 319 } 320 321 /** 322 * Retire des �l�ments au milieu d'un tableau. 323 * 324 * @param array Tableau dans lequel retirer des �l�ments. 325 * @param index Index dans <code>array</code> du premier �l�ment � retirer. 326 * Tous les �l�ments de <code>array</code> qui suivent cet index peuvent �tre d�cal�s. 327 * @param length Nombre d'�l�ments � retirer. 328 * @return Tableau qui contient la donn�es de <code>array</code> avec des �l�ments retir�s. 329 * Cette m�thode peut retourner directement <code>dst</code>, mais la plupart du temps 330 * elle retournera un tableau nouvellement cr��. 331 */ 332 public static int[] remove( final int[] array, final int index, final int length ) { 333 return (int[]) doRemove( array, index, length ); 334 } 335 336 /** 337 * Retire des �l�ments au milieu d'un tableau. 338 * 339 * @param array Tableau dans lequel retirer des �l�ments. 340 * @param index Index dans <code>array</code> du premier �l�ment � retirer. 341 * Tous les �l�ments de <code>array</code> qui suivent cet index peuvent �tre d�cal�s. 342 * @param length Nombre d'�l�ments � retirer. 343 * @return Tableau qui contient la donn�es de <code>array</code> avec des �l�ments retir�s. 344 * Cette m�thode peut retourner directement <code>dst</code>, mais la plupart du temps 345 * elle retournera un tableau nouvellement cr��. 346 */ 347 public static short[] remove( final short[] array, final int index, final int length ) { 348 return (short[]) doRemove( array, index, length ); 349 } 350 351 /** 352 * Retire des �l�ments au milieu d'un tableau. 353 * 354 * @param array Tableau dans lequel retirer des �l�ments. 355 * @param index Index dans <code>array</code> du premier �l�ment � retirer. 356 * Tous les �l�ments de <code>array</code> qui suivent cet index peuvent �tre d�cal�s. 357 * @param length Nombre d'�l�ments � retirer. 358 * @return Tableau qui contient la donn�es de <code>array</code> avec des �l�ments retir�s. 359 * Cette m�thode peut retourner directement <code>dst</code>, mais la plupart du temps 360 * elle retournera un tableau nouvellement cr��. 361 */ 362 public static byte[] remove( final byte[] array, final int index, final int length ) { 363 return (byte[]) doRemove( array, index, length ); 364 } 365 366 /** 367 * Retire des �l�ments au milieu d'un tableau. 368 * 369 * @param array Tableau dans lequel retirer des �l�ments. 370 * @param index Index dans <code>array</code> du premier �l�ment � retirer. 371 * Tous les �l�ments de <code>array</code> qui suivent cet index peuvent �tre d�cal�s. 372 * @param length Nombre d'�l�ments � retirer. 373 * @return Tableau qui contient la donn�es de <code>array</code> avec des �l�ments retir�s. 374 * Cette m�thode peut retourner directement <code>dst</code>, mais la plupart du temps 375 * elle retournera un tableau nouvellement cr��. 376 */ 377 public static char[] remove( final char[] array, final int index, final int length ) { 378 return (char[]) doRemove( array, index, length ); 379 } 380 381 /** 382 * Retire des �l�ments au milieu d'un tableau. 383 * 384 * @param array Tableau dans lequel retirer des �l�ments. 385 * @param index Index dans <code>array</code> du premier �l�ment � retirer. 386 * Tous les �l�ments de <code>array</code> qui suivent cet index peuvent �tre d�cal�s. 387 * @param length Nombre d'�l�ments � retirer. 388 * @return Tableau qui contient la donn�es de <code>array</code> avec des �l�ments retir�s. 389 * Cette m�thode peut retourner directement <code>dst</code>, mais la plupart du temps 390 * elle retournera un tableau nouvellement cr��. 391 */ 392 public static boolean[] remove( final boolean[] array, final int index, final int length ) { 393 return (boolean[]) doRemove( array, index, length ); 394 } 395 396 /** 397 * Ins�re des espaces au milieu d'un tableau. 398 * Ces "espaces" seront constitu�s d'�lements nuls. 399 * 400 * @param array Tableau dans lequel ins�rer des espaces. 401 * @param index Index de <code>array</code> o� ins�rer les espaces. 402 * Tous les �l�ments de <code>array</code> dont l'index est 403 * �gal ou sup�rieur � <code>index</code> seront d�cal�s. 404 * @param length Nombre d'espaces � ins�rer. 405 * @return Tableau qui contient la donn�es de <code>array</code> avec l'espace supl�mentaire. 406 * Cette m�thode peut retourner directement <code>dst</code>, mais la plupart du temps 407 * elle retournera un tableau nouvellement cr��. 408 */ 409 private static Object doInsert( final Object array, final int index, final int length ) { 410 if ( length == 0 ) 411 return array; 412 final int array_length = Array.getLength( array ); 413 final Object newArray = Array.newInstance( array.getClass().getComponentType(), 414 array_length + length ); 415 System.arraycopy( array, 0, newArray, 0, index ); 416 System.arraycopy( array, index, newArray, index + length, array_length - index ); 417 return newArray; 418 } 419 420 /** 421 * Ins�re des espaces au milieu d'un tableau. 422 * Ces "espaces" seront constitu�s d'�lements nuls. 423 * 424 * @param array Tableau dans lequel ins�rer des espaces. 425 * @param index Index de <code>array</code> o� ins�rer les espaces. 426 * Tous les �l�ments de <code>array</code> dont l'index est 427 * �gal ou sup�rieur � <code>index</code> seront d�cal�s. 428 * @param length Nombre d'espaces � ins�rer. 429 * @return Tableau qui contient la donn�es de <code>array</code> avec l'espace supl�mentaire. 430 * Cette m�thode peut retourner directement <code>dst</code>, mais la plupart du temps 431 * elle retournera un tableau nouvellement cr��. 432 */ 433 public static Object[] insert( final Object[] array, final int index, final int length ) { 434 return (Object[]) doInsert( array, index, length ); 435 } 436 437 /** 438 * Ins�re des espaces au milieu d'un tableau. 439 * Ces "espaces" seront constitu�s de z�ros. 440 * 441 * @param array Tableau dans lequel ins�rer des espaces. 442 * @param index Index de <code>array</code> o� ins�rer les espaces. 443 * Tous les �l�ments de <code>array</code> dont l'index est 444 * �gal ou sup�rieur � <code>index</code> seront d�cal�s. 445 * @param length Nombre d'espaces � ins�rer. 446 * @return Tableau qui contient la donn�es de <code>array</code> avec l'espace supl�mentaire. 447 * Cette m�thode peut retourner directement <code>dst</code>, mais la plupart du temps 448 * elle retournera un tableau nouvellement cr��. 449 */ 450 public static double[] insert( final double[] array, final int index, final int length ) { 451 return (double[]) doInsert( array, index, length ); 452 } 453 454 /** 455 * Ins�re des espaces au milieu d'un tableau. 456 * Ces "espaces" seront constitu�s de z�ros. 457 * 458 * @param array Tableau dans lequel ins�rer des espaces. 459 * @param index Index de <code>array</code> o� ins�rer les espaces. 460 * Tous les �l�ments de <code>array</code> qui suivent cet index peuvent �tre d�cal�s. 461 * @param length Nombre d'espaces � ins�rer. 462 * @return Tableau qui contient la donn�es de <code>array</code> avec l'espace supl�mentaire. 463 * Cette m�thode peut retourner directement <code>dst</code>, mais la plupart du temps 464 * elle retournera un tableau nouvellement cr��. 465 */ 466 public static float[] insert( final float[] array, final int index, final int length ) { 467 return (float[]) doInsert( array, index, length ); 468 } 469 470 /** 471 * Ins�re des espaces au milieu d'un tableau. 472 * Ces "espaces" seront constitu�s de z�ros. 473 * 474 * @param array Tableau dans lequel ins�rer des espaces. 475 * @param index Index de <code>array</code> o� ins�rer les espaces. 476 * Tous les �l�ments de <code>array</code> qui suivent cet index peuvent �tre d�cal�s. 477 * @param length Nombre d'espaces � ins�rer. 478 * @return Tableau qui contient la donn�es de <code>array</code> avec l'espace supl�mentaire. 479 * Cette m�thode peut retourner directement <code>dst</code>, mais la plupart du temps 480 * elle retournera un tableau nouvellement cr��. 481 */ 482 public static long[] insert( final long[] array, final int index, final int length ) { 483 return (long[]) doInsert( array, index, length ); 484 } 485 486 /** 487 * Ins�re des espaces au milieu d'un tableau. 488 * Ces "espaces" seront constitu�s de z�ros. 489 * 490 * @param array Tableau dans lequel ins�rer des espaces. 491 * @param index Index de <code>array</code> o� ins�rer les espaces. 492 * Tous les �l�ments de <code>array</code> dont l'index est 493 * �gal ou sup�rieur � <code>index</code> seront d�cal�s. 494 * @param length Nombre d'espaces � ins�rer. 495 * @return Tableau qui contient la donn�es de <code>array</code> avec l'espace supl�mentaire. 496 * Cette m�thode peut retourner directement <code>dst</code>, mais la plupart du temps 497 * elle retournera un tableau nouvellement cr��. 498 */ 499 public static int[] insert( final int[] array, final int index, final int length ) { 500 return (int[]) doInsert( array, index, length ); 501 } 502 503 /** 504 * Ins�re des espaces au milieu d'un tableau. 505 * Ces "espaces" seront constitu�s de z�ros. 506 * 507 * @param array Tableau dans lequel ins�rer des espaces. 508 * @param index Index de <code>array</code> o� ins�rer les espaces. 509 * Tous les �l�ments de <code>array</code> dont l'index est 510 * �gal ou sup�rieur � <code>index</code> seront d�cal�s. 511 * @param length Nombre d'espaces � ins�rer. 512 * @return Tableau qui contient la donn�es de <code>array</code> avec l'espace supl�mentaire. 513 * Cette m�thode peut retourner directement <code>dst</code>, mais la plupart du temps 514 * elle retournera un tableau nouvellement cr��. 515 */ 516 public static short[] insert( final short[] array, final int index, final int length ) { 517 return (short[]) doInsert( array, index, length ); 518 } 519 520 /** 521 * Ins�re des espaces au milieu d'un tableau. 522 * Ces "espaces" seront constitu�s de z�ros. 523 * 524 * @param array Tableau dans lequel ins�rer des espaces. 525 * @param index Index de <code>array</code> o� ins�rer les espaces. 526 * Tous les �l�ments de <code>array</code> dont l'index est 527 * �gal ou sup�rieur � <code>index</code> seront d�cal�s. 528 * @param length Nombre d'espaces � ins�rer. 529 * @return Tableau qui contient la donn�es de <code>array</code> avec l'espace supl�mentaire. 530 * Cette m�thode peut retourner directement <code>dst</code>, mais la plupart du temps 531 * elle retournera un tableau nouvellement cr��. 532 */ 533 public static byte[] insert( final byte[] array, final int index, final int length ) { 534 return (byte[]) doInsert( array, index, length ); 535 } 536 537 /** 538 * Ins�re des espaces au milieu d'un tableau. 539 * Ces "espaces" seront constitu�s de z�ros. 540 * 541 * @param array Tableau dans lequel ins�rer des espaces. 542 * @param index Index de <code>array</code> o� ins�rer les espaces. 543 * Tous les �l�ments de <code>array</code> dont l'index est 544 * �gal ou sup�rieur � <code>index</code> seront d�cal�s. 545 * @param length Nombre d'espaces � ins�rer. 546 * @return Tableau qui contient la donn�es de <code>array</code> avec l'espace supl�mentaire. 547 * Cette m�thode peut retourner directement <code>dst</code>, mais la plupart du temps 548 * elle retournera un tableau nouvellement cr��. 549 */ 550 public static char[] insert( final char[] array, final int index, final int length ) { 551 return (char[]) doInsert( array, index, length ); 552 } 553 554 /** 555 * Ins�re des espaces au milieu d'un tableau. 556 * Ces "espaces" seront constitu�s de <code>false</code>. 557 * 558 * @param array Tableau dans lequel ins�rer des espaces. 559 * @param index Index de <code>array</code> o� ins�rer les espaces. 560 * Tous les �l�ments de <code>array</code> dont l'index est 561 * �gal ou sup�rieur � <code>index</code> seront d�cal�s. 562 * @param length Nombre d'espaces � ins�rer. 563 * @return Tableau qui contient la donn�es de <code>array</code> avec l'espace supl�mentaire. 564 * Cette m�thode peut retourner directement <code>dst</code>, mais la plupart du temps 565 * elle retournera un tableau nouvellement cr��. 566 */ 567 public static boolean[] insert( final boolean[] array, final int index, final int length ) { 568 return (boolean[]) doInsert( array, index, length ); 569 } 570 571 /** 572 * Ins�re une portion de tableau dans un autre tableau. Le tableau <code>src</code> 573 * sera ins�r� en totalit� ou en partie dans le tableau <code>dst</code>. 574 * 575 * @param src Tableau � ins�rer dans <code>dst</code>. 576 * @param src_pos Index de la premi�re donn�e de <code>src</code> � ins�rer dans <code>dst</code>. 577 * @param dst Tableau dans lequel ins�rer des donn�es de <code>src</code>. 578 * @param dst_pos Index de <code>dst</code> o� ins�rer les donn�es de <code>src</code>. 579 * Tous les �l�ments de <code>dst</code> dont l'index est 580 * �gal ou sup�rieur � <code>dst_pos</code> seront d�cal�s. 581 * @param length Nombre de donn�es de <code>src</code> � ins�rer. 582 * @return Tableau qui contient la combinaison de <code>src</code> et <code>dst</code>. Cette 583 * m�thode peut retourner directement <code>dst</code>, mais jamais <code>src</code>. 584 * La plupart du temps, elle retournera un tableau nouvellement cr��. 585 */ 586 private static Object doInsert( final Object src, final int src_pos, final Object dst, 587 final int dst_pos, final int length ) { 588 if ( length == 0 ) 589 return dst; 590 final int dst_length = Array.getLength( dst ); 591 final Object newArray = Array.newInstance( dst.getClass().getComponentType(), dst_length 592 + length ); 593 System.arraycopy( dst, 0, newArray, 0, dst_pos ); 594 System.arraycopy( src, src_pos, newArray, dst_pos, length ); 595 System.arraycopy( dst, dst_pos, newArray, dst_pos + length, dst_length - dst_pos ); 596 return newArray; 597 } 598 599 /** 600 * Ins�re une portion de tableau dans un autre tableau. Le tableau <code>src</code> 601 * sera ins�r� en totalit� ou en partie dans le tableau <code>dst</code>. 602 * 603 * @param src Tableau � ins�rer dans <code>dst</code>. 604 * @param src_pos Index de la premi�re donn�e de <code>src</code> � ins�rer dans <code>dst</code>. 605 * @param dst Tableau dans lequel ins�rer des donn�es de <code>src</code>. 606 * @param dst_pos Index de <code>dst</code> o� ins�rer les donn�es de <code>src</code>. 607 * Tous les �l�ments de <code>dst</code> dont l'index est 608 * �gal ou sup�rieur � <code>dst_pos</code> seront d�cal�s. 609 * @param length Nombre de donn�es de <code>src</code> � ins�rer. 610 * @return Tableau qui contient la combinaison de <code>src</code> et <code>dst</code>. Cette 611 * m�thode peut retourner directement <code>dst</code>, mais jamais <code>src</code>. 612 * La plupart du temps, elle retournera un tableau nouvellement cr��. 613 */ 614 public static Object[] insert( final Object[] src, final int src_pos, final Object[] dst, 615 final int dst_pos, final int length ) { 616 return (Object[]) doInsert( src, src_pos, dst, dst_pos, length ); 617 } 618 619 /** 620 * Ins�re une portion de tableau dans un autre tableau. Le tableau <code>src</code> 621 * sera ins�r� en totalit� ou en partie dans le tableau <code>dst</code>. 622 * 623 * @param src Tableau � ins�rer dans <code>dst</code>. 624 * @param src_pos Index de la premi�re donn�e de <code>src</code> � ins�rer dans <code>dst</code>. 625 * @param dst Tableau dans lequel ins�rer des donn�es de <code>src</code>. 626 * @param dst_pos Index de <code>dst</code> o� ins�rer les donn�es de <code>src</code>. 627 * Tous les �l�ments de <code>dst</code> dont l'index est 628 * �gal ou sup�rieur � <code>dst_pos</code> seront d�cal�s. 629 * @param length Nombre de donn�es de <code>src</code> � ins�rer. 630 * @return Tableau qui contient la combinaison de <code>src</code> et <code>dst</code>. Cette 631 * m�thode peut retourner directement <code>dst</code>, mais jamais <code>src</code>. 632 * La plupart du temps, elle retournera un tableau nouvellement cr��. 633 */ 634 public static double[] insert( final double[] src, final int src_pos, final double[] dst, 635 final int dst_pos, final int length ) { 636 return (double[]) doInsert( src, src_pos, dst, dst_pos, length ); 637 } 638 639 /** 640 * Ins�re une portion de tableau dans un autre tableau. Le tableau <code>src</code> 641 * sera ins�r� en totalit� ou en partie dans le tableau <code>dst</code>. 642 * 643 * @param src Tableau � ins�rer dans <code>dst</code>. 644 * @param src_pos Index de la premi�re donn�e de <code>src</code> � ins�rer dans <code>dst</code>. 645 * @param dst Tableau dans lequel ins�rer des donn�es de <code>src</code>. 646 * @param dst_pos Index de <code>dst</code> o� ins�rer les donn�es de <code>src</code>. 647 * Tous les �l�ments de <code>dst</code> dont l'index est 648 * �gal ou sup�rieur � <code>dst_pos</code> seront d�cal�s. 649 * @param length Nombre de donn�es de <code>src</code> � ins�rer. 650 * @return Tableau qui contient la combinaison de <code>src</code> et <code>dst</code>. Cette 651 * m�thode peut retourner directement <code>dst</code>, mais jamais <code>src</code>. 652 * La plupart du temps, elle retournera un tableau nouvellement cr��. 653 */ 654 public static float[] insert( final float[] src, final int src_pos, final float[] dst, 655 final int dst_pos, final int length ) { 656 return (float[]) doInsert( src, src_pos, dst, dst_pos, length ); 657 } 658 659 /** 660 * Ins�re une portion de tableau dans un autre tableau. Le tableau <code>src</code> 661 * sera ins�r� en totalit� ou en partie dans le tableau <code>dst</code>. 662 * 663 * @param src Tableau � ins�rer dans <code>dst</code>. 664 * @param src_pos Index de la premi�re donn�e de <code>src</code> � ins�rer dans <code>dst</code>. 665 * @param dst Tableau dans lequel ins�rer des donn�es de <code>src</code>. 666 * @param dst_pos Index de <code>dst</code> o� ins�rer les donn�es de <code>src</code>. 667 * Tous les �l�ments de <code>dst</code> dont l'index est 668 * �gal ou sup�rieur � <code>dst_pos</code> seront d�cal�s. 669 * @param length Nombre de donn�es de <code>src</code> � ins�rer. 670 * @return Tableau qui contient la combinaison de <code>src</code> et <code>dst</code>. Cette 671 * m�thode peut retourner directement <code>dst</code>, mais jamais <code>src</code>. 672 * La plupart du temps, elle retournera un tableau nouvellement cr��. 673 */ 674 public static long[] insert( final long[] src, final int src_pos, final long[] dst, 675 final int dst_pos, final int length ) { 676 return (long[]) doInsert( src, src_pos, dst, dst_pos, length ); 677 } 678 679 /** 680 * Ins�re une portion de tableau dans un autre tableau. Le tableau <code>src</code> 681 * sera ins�r� en totalit� ou en partie dans le tableau <code>dst</code>. 682 * 683 * @param src Tableau � ins�rer dans <code>dst</code>. 684 * @param src_pos Index de la premi�re donn�e de <code>src</code> � ins�rer dans <code>dst</code>. 685 * @param dst Tableau dans lequel ins�rer des donn�es de <code>src</code>. 686 * @param dst_pos Index de <code>dst</code> o� ins�rer les donn�es de <code>src</code>. 687 * Tous les �l�ments de <code>dst</code> dont l'index est 688 * �gal ou sup�rieur � <code>dst_pos</code> seront d�cal�s. 689 * @param length Nombre de donn�es de <code>src</code> � ins�rer. 690 * @return Tableau qui contient la combinaison de <code>src</code> et <code>dst</code>. Cette 691 * m�thode peut retourner directement <code>dst</code>, mais jamais <code>src</code>. 692 * La plupart du temps, elle retournera un tableau nouvellement cr��. 693 */ 694 public static int[] insert( final int[] src, final int src_pos, final int[] dst, 695 final int dst_pos, final int length ) { 696 return (int[]) doInsert( src, src_pos, dst, dst_pos, length ); 697 } 698 699 /** 700 * Ins�re une portion de tableau dans un autre tableau. Le tableau <code>src</code> 701 * sera ins�r� en totalit� ou en partie dans le tableau <code>dst</code>. 702 * 703 * @param src Tableau � ins�rer dans <code>dst</code>. 704 * @param src_pos Index de la premi�re donn�e de <code>src</code> � ins�rer dans <code>dst</code>. 705 * @param dst Tableau dans lequel ins�rer des donn�es de <code>src</code>. 706 * @param dst_pos Index de <code>dst</code> o� ins�rer les donn�es de <code>src</code>. 707 * Tous les �l�ments de <code>dst</code> dont l'index est 708 * �gal ou sup�rieur � <code>dst_pos</code> seront d�cal�s. 709 * @param length Nombre de donn�es de <code>src</code> � ins�rer. 710 * @return Tableau qui contient la combinaison de <code>src</code> et <code>dst</code>. Cette 711 * m�thode peut retourner directement <code>dst</code>, mais jamais <code>src</code>. 712 * La plupart du temps, elle retournera un tableau nouvellement cr��. 713 */ 714 public static short[] insert( final short[] src, final int src_pos, final short[] dst, 715 final int dst_pos, final int length ) { 716 return (short[]) doInsert( src, src_pos, dst, dst_pos, length ); 717 } 718 719 /** 720 * Ins�re une portion de tableau dans un autre tableau. Le tableau <code>src</code> 721 * sera ins�r� en totalit� ou en partie dans le tableau <code>dst</code>. 722 * 723 * @param src Tableau � ins�rer dans <code>dst</code>. 724 * @param src_pos Index de la premi�re donn�e de <code>src</code> � ins�rer dans <code>dst</code>. 725 * @param dst Tableau dans lequel ins�rer des donn�es de <code>src</code>. 726 * @param dst_pos Index de <code>dst</code> o� ins�rer les donn�es de <code>src</code>. 727 * Tous les �l�ments de <code>dst</code> dont l'index est 728 * �gal ou sup�rieur � <code>dst_pos</code> seront d�cal�s. 729 * @param length Nombre de donn�es de <code>src</code> � ins�rer. 730 * @return Tableau qui contient la combinaison de <code>src</code> et <code>dst</code>. Cette 731 * m�thode peut retourner directement <code>dst</code>, mais jamais <code>src</code>. 732 * La plupart du temps, elle retournera un tableau nouvellement cr��. 733 */ 734 public static byte[] insert( final byte[] src, final int src_pos, final byte[] dst, 735 final int dst_pos, final int length ) { 736 return (byte[]) doInsert( src, src_pos, dst, dst_pos, length ); 737 } 738 739 /** 740 * Ins�re une portion de tableau dans un autre tableau. Le tableau <code>src</code> 741 * sera ins�r� en totalit� ou en partie dans le tableau <code>dst</code>. 742 * 743 * @param src Tableau � ins�rer dans <code>dst</code>. 744 * @param src_pos Index de la premi�re donn�e de <code>src</code> � ins�rer dans <code>dst</code>. 745 * @param dst Tableau dans lequel ins�rer des donn�es de <code>src</code>. 746 * @param dst_pos Index de <code>dst</code> o� ins�rer les donn�es de <code>src</code>. 747 * Tous les �l�ments de <code>dst</code> dont l'index est 748 * �gal ou sup�rieur � <code>dst_pos</code> seront d�cal�s. 749 * @param length Nombre de donn�es de <code>src</code> � ins�rer. 750 * @return Tableau qui contient la combinaison de <code>src</code> et <code>dst</code>. Cette 751 * m�thode peut retourner directement <code>dst</code>, mais jamais <code>src</code>. 752 * La plupart du temps, elle retournera un tableau nouvellement cr��. 753 */ 754 public static char[] insert( final char[] src, final int src_pos, final char[] dst, 755 final int dst_pos, final int length ) { 756 return (char[]) doInsert( src, src_pos, dst, dst_pos, length ); 757 } 758 759 /** 760 * Ins�re une portion de tableau dans un autre tableau. Le tableau <code>src</code> 761 * sera ins�r� en totalit� ou en partie dans le tableau <code>dst</code>. 762 * 763 * @param src Tableau � ins�rer dans <code>dst</code>. 764 * @param src_pos Index de la premi�re donn�e de <code>src</code> � ins�rer dans <code>dst</code>. 765 * @param dst Tableau dans lequel ins�rer des donn�es de <code>src</code>. 766 * @param dst_pos Index de <code>dst</code> o� ins�rer les donn�es de <code>src</code>. 767 * Tous les �l�ments de <code>dst</code> dont l'index est 768 * �gal ou sup�rieur � <code>dst_pos</code> seront d�cal�s. 769 * @param length Nombre de donn�es de <code>src</code> � ins�rer. 770 * @return Tableau qui contient la combinaison de <code>src</code> et <code>dst</code>. Cette 771 * m�thode peut retourner directement <code>dst</code>, mais jamais <code>src</code>. 772 * La plupart du temps, elle retournera un tableau nouvellement cr��. 773 */ 774 public static boolean[] insert( final boolean[] src, final int src_pos, final boolean[] dst, 775 final int dst_pos, final int length ) { 776 return (boolean[]) doInsert( src, src_pos, dst, dst_pos, length ); 777 } 778 }