@Deprecated public static void copyDataToJavaArrayDirect(ThreadContext context, final RubyArray rubyArray, final Object javaArray) { copyDataToJavaArrayDirect(rubyArray, javaArray); }
@Deprecated public static void copyDataToJavaArrayDirect(ThreadContext context, final RubyArray rubyArray, final Object javaArray) { copyDataToJavaArrayDirect(rubyArray, javaArray); }
public static void copyDataToJavaArrayDirect(final RubyArray rubyArray, final Object javaArray) { Class targetType = javaArray.getClass().getComponentType(); // 'premature' optimizations as reflected Array.set is (still) noticeably slower if ( ! targetType.isPrimitive() ) { copyDataToJavaArrayDirect(targetType, rubyArray, (Object[]) javaArray); return; } else if ( Integer.TYPE == targetType ) { copyDataToJavaArrayDirect(targetType, rubyArray, (int[]) javaArray); return; } else if ( Long.TYPE == targetType ) { copyDataToJavaArrayDirect(targetType, rubyArray, (long[]) javaArray); return; } else if ( Byte.TYPE == targetType ) { copyDataToJavaArrayDirect(targetType, rubyArray, (byte[]) javaArray); return; } int length = rubyArray.getLength(); final int javaLength = Array.getLength(javaArray); if ( javaLength < length ) length = javaLength; for ( int i = 0; i < length; i++ ) { Array.set(javaArray, i, rubyArray.eltInternal(i).toJava(targetType)); } }
public static void copyDataToJavaArrayDirect(final RubyArray rubyArray, final Object javaArray) { Class targetType = javaArray.getClass().getComponentType(); // 'premature' optimizations as reflected Array.set is (still) noticeably slower if ( ! targetType.isPrimitive() ) { copyDataToJavaArrayDirect(targetType, rubyArray, (Object[]) javaArray); return; } else if ( Integer.TYPE == targetType ) { copyDataToJavaArrayDirect(targetType, rubyArray, (int[]) javaArray); return; } else if ( Long.TYPE == targetType ) { copyDataToJavaArrayDirect(targetType, rubyArray, (long[]) javaArray); return; } else if ( Byte.TYPE == targetType ) { copyDataToJavaArrayDirect(targetType, rubyArray, (byte[]) javaArray); return; } int length = rubyArray.getLength(); final int javaLength = Array.getLength(javaArray); if ( javaLength < length ) length = javaLength; for ( int i = 0; i < length; i++ ) { Array.set(javaArray, i, rubyArray.eltInternal(i).toJava(targetType)); } }
@Override public <T> T toJava(Class<T> target) { if (target.isArray()) { Class type = target.getComponentType(); Object rawJavaArray = Array.newInstance(type, realLength); try { ArrayUtils.copyDataToJavaArrayDirect(this, rawJavaArray); } catch (ArrayIndexOutOfBoundsException ex) { throw concurrentModification(getRuntime(), ex); } return target.cast(rawJavaArray); } else { return super.toJava(target); } }
@Override public <T> T toJava(Class<T> target) { if (target.isArray()) { Class type = target.getComponentType(); Object rawJavaArray = Array.newInstance(type, realLength); try { ArrayUtils.copyDataToJavaArrayDirect(this, rawJavaArray); } catch (ArrayIndexOutOfBoundsException ex) { throw concurrentModification(getRuntime(), ex); } return target.cast(rawJavaArray); } else { return super.toJava(target); } }
@Override public Object toJava(Class target) { if (target.isArray()) { Class type = target.getComponentType(); Object rawJavaArray = Array.newInstance(type, realLength); try { ArrayUtils.copyDataToJavaArrayDirect(getRuntime().getCurrentContext(), this, rawJavaArray); } catch (ArrayIndexOutOfBoundsException aioob) { concurrentModification(); } return rawJavaArray; } else { return super.toJava(target); } }
@Override public Object toJava(Class target) { if (target.isArray()) { Class type = target.getComponentType(); Object rawJavaArray = Array.newInstance(type, realLength); try { ArrayUtils.copyDataToJavaArrayDirect(getRuntime().getCurrentContext(), this, rawJavaArray); } catch (ArrayIndexOutOfBoundsException aioob) { concurrentModification(); } return rawJavaArray; } else { return super.toJava(target); } }
public final Object javaArrayFromRubyArrayDirect(ThreadContext context, RubyArray fromArray) { final Ruby runtime = context.runtime; final Class<?> type = javaClass(); final Object newArray = Array.newInstance(type, fromArray.size()); if ( type.isArray() ) { // if it's an array of arrays, recurse with the component type for ( int i = 0; i < fromArray.size(); i++ ) { final Class<?> nestedType = type.getComponentType(); final IRubyObject element = fromArray.eltInternal(i); final Object nestedArray; if ( element instanceof RubyArray ) { // recurse JavaClass componentType = JavaClass.get(runtime, nestedType); nestedArray = componentType.javaArrayFromRubyArrayDirect(context, element); } else if ( type.isInstance(element) ) { nestedArray = element; } else { // still try (nested) toJava conversion : nestedArray = element.toJava(type); } ArrayUtils.setWithExceptionHandlingDirect(runtime, newArray, i, nestedArray); } } else { ArrayUtils.copyDataToJavaArrayDirect(fromArray, newArray); } return newArray; }
public final Object javaArrayFromRubyArrayDirect(ThreadContext context, RubyArray fromArray) { final Ruby runtime = context.runtime; final Class<?> type = javaClass(); final Object newArray = Array.newInstance(type, fromArray.size()); if ( type.isArray() ) { // if it's an array of arrays, recurse with the component type for ( int i = 0; i < fromArray.size(); i++ ) { final Class<?> nestedType = type.getComponentType(); final IRubyObject element = fromArray.eltInternal(i); final Object nestedArray; if ( element instanceof RubyArray ) { // recurse JavaClass componentType = JavaClass.get(runtime, nestedType); nestedArray = componentType.javaArrayFromRubyArrayDirect(context, element); } else if ( type.isInstance(element) ) { nestedArray = element; } else { // still try (nested) toJava conversion : nestedArray = element.toJava(type); } ArrayUtils.setWithExceptionHandlingDirect(runtime, newArray, i, nestedArray); } } else { ArrayUtils.copyDataToJavaArrayDirect(fromArray, newArray); } return newArray; }
public Object javaArrayFromRubyArrayDirect(ThreadContext context, IRubyObject fromArray) { Ruby runtime = context.runtime; if (!(fromArray instanceof RubyArray)) { throw runtime.newTypeError(fromArray, runtime.getArray()); } RubyArray rubyArray = (RubyArray)fromArray; Object newArray = Array.newInstance(javaClass(), rubyArray.size()); if (javaClass().isArray()) { // if it's an array of arrays, recurse with the component type for (int i = 0; i < rubyArray.size(); i++) { JavaClass componentType = component_type(); Object componentArray = componentType.javaArrayFromRubyArrayDirect(context, rubyArray.eltInternal(i)); ArrayUtils.setWithExceptionHandlingDirect(runtime, newArray, i, componentArray); } } else { ArrayUtils.copyDataToJavaArrayDirect(context, rubyArray, newArray); } return newArray; }
public Object javaArrayFromRubyArrayDirect(ThreadContext context, IRubyObject fromArray) { Ruby runtime = context.runtime; if (!(fromArray instanceof RubyArray)) { throw runtime.newTypeError(fromArray, runtime.getArray()); } RubyArray rubyArray = (RubyArray)fromArray; Object newArray = Array.newInstance(javaClass(), rubyArray.size()); if (javaClass().isArray()) { // if it's an array of arrays, recurse with the component type for (int i = 0; i < rubyArray.size(); i++) { JavaClass componentType = component_type(); Object componentArray = componentType.javaArrayFromRubyArrayDirect(context, rubyArray.eltInternal(i)); ArrayUtils.setWithExceptionHandlingDirect(runtime, newArray, i, componentArray); } } else { ArrayUtils.copyDataToJavaArrayDirect(context, rubyArray, newArray); } return newArray; }