// :tabSize=2:indentSize=2:noTabs=false:folding=explicit:collapseFolds=1:
import java.lang.reflect.Array ;
/**
* Builds rectangular java arrays
*/
public class RectangularArrayBuilder extends RJavaArrayIterator {
// {{{ constructors
/**
* constructor
*
* @param payload one dimensional array
* @param dimensions target dimensions
* @throws NotAnArrayException if payload is not an array
*/
public RectangularArrayBuilder( Object payload, int[] dimensions) throws NotAnArrayException, ArrayDimensionException {
super( dimensions ) ;
if( !RJavaArrayTools.isArray(payload) ){
throw new NotAnArrayException( payload.getClass() ) ;
}
if( !RJavaArrayTools.isSingleDimensionArray(payload)){
throw new ArrayDimensionException( "not a single dimension array : " + payload.getClass() ) ;
}
if( dimensions.length == 1 ){
array = payload ;
} else{
String typeName = RJavaArrayTools.getObjectTypeName( payload );
Class clazz = null ;
try{
clazz = RJavaArrayTools.getClassForSignature( typeName, payload.getClass().getClassLoader() );
} catch( ClassNotFoundException e){/* should not happen */}
array = Array.newInstance( clazz , dimensions ) ;
if( typeName.equals( "I" ) ){
fill_int( (int[])payload ) ;
} else if( typeName.equals( "Z" ) ){
fill_boolean( (boolean[])payload ) ;
} else if( typeName.equals( "B" ) ){
fill_byte( (byte[])payload ) ;
} else if( typeName.equals( "J" ) ){
fill_long( (long[])payload ) ;
} else if( typeName.equals( "S" ) ){
fill_short( (short[])payload ) ;
} else if( typeName.equals( "D" ) ){
fill_double( (double[])payload ) ;
} else if( typeName.equals( "C" ) ){
fill_char( (char[])payload ) ;
} else if( typeName.equals( "F" ) ){
fill_float( (float[])payload ) ;
} else{
fill_Object( (Object[])payload ) ;
}
}
}
public RectangularArrayBuilder( Object payload, int length ) throws NotAnArrayException, ArrayDimensionException{
this( payload, new int[]{ length } ) ;
}
// java < 1.5 kept happy
public RectangularArrayBuilder(int x , int[] dim ) throws NotAnArrayException { throw new NotAnArrayException("primitive type : int ") ; }
public RectangularArrayBuilder(boolean x, int[] dim ) throws NotAnArrayException { throw new NotAnArrayException("primitive type : boolean ") ; }
public RectangularArrayBuilder(byte x , int[] dim ) throws NotAnArrayException { throw new NotAnArrayException("primitive type : byte ") ; }
public RectangularArrayBuilder(long x , int[] dim ) throws NotAnArrayException { throw new NotAnArrayException("primitive type : long ") ; }
public RectangularArrayBuilder(short x , int[] dim ) throws NotAnArrayException { throw new NotAnArrayException("primitive type : short ") ; }
public RectangularArrayBuilder(double x , int[] dim ) throws NotAnArrayException { throw new NotAnArrayException("primitive type : double ") ; }
public RectangularArrayBuilder(char x , int[] dim ) throws NotAnArrayException { throw new NotAnArrayException("primitive type : char ") ; }
public RectangularArrayBuilder(float x , int[] dim ) throws NotAnArrayException { throw new NotAnArrayException("primitive type : float ") ; }
public RectangularArrayBuilder(int x , int length ) throws NotAnArrayException { throw new NotAnArrayException("primitive type : int ") ; }
public RectangularArrayBuilder(boolean x, int length ) throws NotAnArrayException { throw new NotAnArrayException("primitive type : boolean ") ; }
public RectangularArrayBuilder(byte x , int length ) throws NotAnArrayException { throw new NotAnArrayException("primitive type : byte ") ; }
public RectangularArrayBuilder(long x , int length ) throws NotAnArrayException { throw new NotAnArrayException("primitive type : long ") ; }
public RectangularArrayBuilder(short x , int length ) throws NotAnArrayException { throw new NotAnArrayException("primitive type : short ") ; }
public RectangularArrayBuilder(double x , int length ) throws NotAnArrayException { throw new NotAnArrayException("primitive type : double ") ; }
public RectangularArrayBuilder(char x , int length ) throws NotAnArrayException { throw new NotAnArrayException("primitive type : char ") ; }
public RectangularArrayBuilder(float x , int length ) throws NotAnArrayException { throw new NotAnArrayException("primitive type : float ") ; }
// }}}
// {{{ fill_**
private void fill_int( int[] payload ){
int k;
while( hasNext() ){
int[] current = (int[])next() ;
k = start ;
for( int j=0; j