1 21 package com.db4o.reflect.self; 22 23 import com.db4o.reflect.*; 24 25 public class SelfArray implements ReflectArray { 26 27 private final SelfReflectionRegistry _registry; 28 29 SelfArray(Reflector reflector,SelfReflectionRegistry registry) { 30 _registry=registry; 31 } 32 33 public int[] dimensions(Object arr) { 34 return new int[]{getLength(arr)}; 35 } 36 37 public int flatten(Object a_shaped, int[] a_dimensions, 38 int a_currentDimension, Object [] a_flat, int a_flatElement) { 39 if(a_shaped instanceof Object []) { 40 Object [] shaped=(Object [])a_shaped; 41 System.arraycopy(shaped, 0, a_flat, 0, shaped.length); 42 return shaped.length; 43 } 44 return _registry.flattenArray(a_shaped,a_flat); 45 } 46 47 public Object get(Object onArray, int index) { 48 if(onArray instanceof Object []) { 49 return ((Object [])onArray)[index]; 50 } 51 return _registry.getArray(onArray,index); 52 } 53 54 public ReflectClass getComponentType(ReflectClass a_class) { 55 return ((SelfClass)a_class).getComponentType(); 56 } 57 58 public int getLength(Object array) { 59 if(array instanceof Object []) { 60 return ((Object [])array).length; 61 } 62 return _registry.arrayLength(array); 63 } 64 65 public boolean isNDimensional(ReflectClass a_class) { 66 return false; 67 } 68 69 public Object newInstance(ReflectClass componentType, int length) { 70 return _registry.arrayFor(((SelfClass)componentType).getJavaClass(),length); 71 } 72 73 public Object newInstance(ReflectClass componentType, int[] dimensions) { 74 return newInstance(componentType,dimensions[0]); 75 } 76 77 public void set(Object onArray, int index, Object element) { 78 if(onArray instanceof Object []) { 79 ((Object [])onArray)[index]=element; 80 return; 81 } 82 _registry.setArray(onArray,index,element); 83 } 84 85 public int shape(Object [] a_flat, int a_flatElement, Object a_shaped, 86 int[] a_dimensions, int a_currentDimension) { 87 if(a_shaped instanceof Object []) { 88 Object [] shaped=(Object [])a_shaped; 89 System.arraycopy(a_flat, 0, shaped, 0, a_flat.length); 90 return a_flat.length; 91 } 92 return _registry.shapeArray(a_flat,a_shaped); 93 } 94 95 } 96 | Popular Tags |