Index: lutinutil/src/java/org/codelutin/util/ArrayUtil.java diff -u lutinutil/src/java/org/codelutin/util/ArrayUtil.java:1.4 lutinutil/src/java/org/codelutin/util/ArrayUtil.java:1.5 --- lutinutil/src/java/org/codelutin/util/ArrayUtil.java:1.4 Thu Aug 25 21:16:51 2005 +++ lutinutil/src/java/org/codelutin/util/ArrayUtil.java Fri Sep 2 17:12:56 2005 @@ -23,9 +23,9 @@ * Created: 31 oct. 2004 * * @author Benjamin Poussin - * @version $Revision: 1.4 $ + * @version $Revision: 1.5 $ * - * Mise a jour: $Date: 2005/08/25 21:16:51 $ + * Mise a jour: $Date: 2005/09/02 17:12:56 $ * par : $Author: bpoussin $ */ @@ -90,22 +90,62 @@ return result; } - static public int [] concat(int [] a, int [] b){ - int [] result = new int[a.length+b.length]; - System.arraycopy(a, 0, result, 0, a.length); - System.arraycopy(b, 0, result, a.length, b.length); + static public int [] concat(int [] ... tabs){ + int length = 0; + for(int[] tab: tabs){ + if(tab != null){ + length += tab.length; + } + } + int [] result = new int[length]; + length = 0; + for(int[] tab: tabs){ + if(tab != null){ + System.arraycopy(tab, 0, result, length, tab.length); + length += tab.length; + } + } return result; } - static public Object [] concat(Object [] a, Object [] b){ - Object [] result; - if(a.getClass().getComponentType().equals(b.getClass().getComponentType())){ - result = (Object[])Array.newInstance(a.getClass().getComponentType(), a.length+b.length); - } else { - result = new Object[a.length+b.length]; + /** + * Retourne un nouveau tableau qui est la concatenation des deux autres. + * Essai de garder pour le tableau resultat le type des tableaux en entré + * si possible. [Double], [Number] -> [Number]; [Double], [Long] -> [Object] + * @param a le premier tableau ou null + * @param b le deuxieme tableau ou null + * @return le nouveau tableau ou null, si les deux tableaux sont null + * @todo essayer de retourner le meilleur type de tableau possible + * [Double], [Long] -> [Number] + */ + static public Object [] concat(Object [] ... tabs){ + Object [] result = null; + Class clazz = null; + int length = 0; + for(Object[] tab:tabs){ + if(tab != null){ + length += tab.length; + Class tmp = tab.getClass().getComponentType(); + if(clazz == null){ + clazz = tmp; + } else if(tmp.isAssignableFrom(clazz)){ + clazz = tmp; + } else { + clazz = Object.class; + } + } + } + + if(clazz != null){ + result = (Object[])Array.newInstance(clazz, length); + length = 0; + for(Object[] tab:tabs){ + if(tab != null){ + System.arraycopy(tab, 0, result, length, tab.length); + length += tab.length; + } + } } - System.arraycopy(a, 0, result, 0, a.length); - System.arraycopy(b, 0, result, a.length, b.length); return result; }