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 }