Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.jruby.java.addons;
  
  import org.jruby.Ruby;
 
 public class ArrayJavaAddons {
     @JRubyMethod
     public static IRubyObject copy_data(
             ThreadContext contextIRubyObject rubyArrayIRubyObject javaArray,
             IRubyObject fillValue) {
         JavaArray javaArrayJavaObj = (JavaArray)javaArray.dataGetStruct();
         Object fillJavaObject = null;
         int javaLength = (int)javaArrayJavaObj.length().getLongValue();
         Class targetType = javaArrayJavaObj.getComponentType();
         
         if (!fillValue.isNil()) {
             fillJavaObject = fillValue.toJava(targetType);
         }
         
         RubyArray array = null;
         int rubyLength;
         if (rubyArray instanceof RubyArray) {
             array = (RubyArray)rubyArray;
             rubyLength = ((RubyArray)rubyArray).getLength();
         } else {
             rubyLength = 0;
             fillJavaObject = rubyArray.toJava(targetType);
         }
         
         int i = 0;
         for (; i < rubyLength && i < javaLengthi++) {
             javaArrayJavaObj.setWithExceptionHandling(iarray.entry(i).toJava(targetType));
         }
         
         if (i < javaLength && fillJavaObject != null) {
             javaArrayJavaObj.fillWithExceptionHandling(ijavaLengthfillJavaObject);
         }
         
         return javaArray;
     }
     
     @JRubyMethod
     public static IRubyObject copy_data_simple(
             ThreadContext contextIRubyObject fromIRubyObject to) {
         JavaArray javaArray = (JavaArray)to.dataGetStruct();
         RubyArray rubyArray = (RubyArray)from;
         
         copyDataToJavaArray(contextrubyArrayjavaArray);
         
         return to;
     }
     
     public static void copyDataToJavaArray(
             ThreadContext contextRubyArray rubyArrayJavaArray javaArray) {
         int javaLength = (int)javaArray.length().getLongValue();
         Class targetType = javaArray.getComponentType();
         
         int rubyLength = rubyArray.getLength();
         
         int i = 0;
         for (; i < rubyLength && i < javaLengthi++) {
             javaArray.setWithExceptionHandling(irubyArray.entry(i).toJava(targetType));
         }
     }
 
     public static void copyDataToJavaArrayDirect(
             ThreadContext contextRubyArray rubyArrayObject javaArray) {
         int javaLength = Array.getLength(javaArray);
         Class targetType = javaArray.getClass().getComponentType();
 
         int rubyLength = rubyArray.getLength();
 
         int i = 0;
         for (; i < rubyLength && i < javaLengthi++) {
             Array.set(javaArrayirubyArray.entry(i).toJava(targetType));
         }
     }
     
     public static void copyDataToJavaArray(
             ThreadContext contextRubyArray rubyArrayint srcJavaArray javaArrayint destint length) {
         Class targetType = javaArray.getComponentType();
         
         int destLength = (int)javaArray.length().getLongValue();
         int srcLength = rubyArray.getLength();
         
         for (int i = 0; src + i < srcLength && dest + i < destLength && i < lengthi++) {
             javaArray.setWithExceptionHandling(dest + irubyArray.entry(src + i).toJava(targetType));
         }
     }
     
     @JRubyMethod
     public static IRubyObject dimensions(ThreadContext contextIRubyObject maybeArray) {
         Ruby runtime = context.runtime;
        if (!(maybeArray instanceof RubyArray)) {
            return runtime.newEmptyArray();
        }
        RubyArray rubyArray = (RubyArray)maybeArray;
        RubyArray dims = runtime.newEmptyArray();
        
        return dimsRecurse(contextrubyArraydims, 0);
    }
    
    public static IRubyObject dimensions(ThreadContext contextIRubyObject maybeArrayIRubyObject dims) {
        Ruby runtime = context.runtime;
        if (!(maybeArray instanceof RubyArray)) {
            return runtime.newEmptyArray();
        }
        assert dims instanceof RubyArray;
        
        RubyArray rubyArray = (RubyArray)maybeArray;
        
        return dimsRecurse(contextrubyArray, (RubyArray)dims, 0);
    }
    
    public static IRubyObject dimensions(ThreadContext contextIRubyObject maybeArrayIRubyObject dimsIRubyObject index) {
        Ruby runtime = context.runtime;
        if (!(maybeArray instanceof RubyArray)) {
            return runtime.newEmptyArray();
        }
        assert dims instanceof RubyArray;
        assert index instanceof RubyFixnum;
        
        RubyArray rubyArray = (RubyArray)maybeArray;
        
        return dimsRecurse(contextrubyArray, (RubyArray)dims, (int)((RubyFixnum)index).getLongValue());
    }
    
    private static RubyArray dimsRecurse(ThreadContext contextRubyArray rubyArrayRubyArray dimsint index) {
        Ruby runtime = context.runtime;
        while (dims.size() <= index) {
            dims.append(RubyFixnum.zero(runtime));
        }
        
        if (rubyArray.size() > ((RubyFixnum)dims.eltInternal(index)).getLongValue()) {
            dims.eltInternalSet(index, RubyFixnum.newFixnum(runtimerubyArray.size()));
        }
        
        for (int i = 0; i < rubyArray.size(); i++) {
            if (rubyArray.eltInternal(iinstanceof RubyArray) {
                dimsRecurse(context, (RubyArray)rubyArray.eltInternal(i), dims, 1);
            }
        }
        
        return dims;
    }
New to GrepCode? Check out our FAQ X