@JRubyMethod(name = {"to_h", "to_hash"}) public IRubyObject toHash(ThreadContext context) { Ruby runtime = context.runtime; RubyHash ret = RubyHash.newHash(runtime); for (Descriptors.FieldDescriptor fdef : this.descriptor.getFields()) { IRubyObject value = getField(context, fdef); if (!value.isNil()) { if (fdef.isRepeated() && !fdef.isMapField()) { if (fdef.getType() != Descriptors.FieldDescriptor.Type.MESSAGE) { value = Helpers.invoke(context, value, "to_a"); } else { RubyArray ary = value.convertToArray(); for (int i = 0; i < ary.size(); i++) { IRubyObject submsg = Helpers.invoke(context, ary.eltInternal(i), "to_h"); ary.eltInternalSet(i, submsg); } value = ary.to_ary(); } } else if (value.respondsTo("to_h")) { value = Helpers.invoke(context, value, "to_h"); } else if (value.respondsTo("to_a")) { value = Helpers.invoke(context, value, "to_a"); } } ret.fastASet(runtime.newSymbol(fdef.getName()), value); } return ret; }
public T eltSetOk(int offset, T value) { try { return eltInternalSet(offset, value); } catch (ArrayIndexOutOfBoundsException ex) { throw concurrentModification(getRuntime(), ex); } }
public T eltSetOk(int offset, T value) { try { return eltInternalSet(offset, value); } catch (ArrayIndexOutOfBoundsException ex) { throw concurrentModification(getRuntime(), ex); } }
/** rb_ary_reverse_bang * */ @JRubyMethod(name = "reverse!") public IRubyObject reverse_bang() { modify(); try { if (realLength > 1) { int len = realLength; for (int i = 0; i < len >> 1; i++) { T tmp = eltInternal(i); eltInternalSet(i, eltInternal(len - i - 1)); eltInternalSet(len - i - 1, tmp); } } } catch (ArrayIndexOutOfBoundsException e) { throw concurrentModification(getRuntime(), e); } return this; }
/** rb_ary_reverse_bang * */ @JRubyMethod(name = "reverse!") public IRubyObject reverse_bang() { modify(); try { if (realLength > 1) { int len = realLength; for (int i = 0; i < len >> 1; i++) { T tmp = eltInternal(i); eltInternalSet(i, eltInternal(len - i - 1)); eltInternalSet(len - i - 1, tmp); } } } catch (ArrayIndexOutOfBoundsException e) { throw concurrentModification(getRuntime(), e); } return this; }
private static RubyArray calcDimensions(final Ruby runtime, final RubyArray array, final RubyArray dims, final int index) { while ( dims.size() <= index ) { dims.append( RubyFixnum.zero(runtime) ); } final long dim = ((RubyFixnum) dims.eltInternal(index)).getLongValue(); if ( array.size() > dim ) { dims.eltInternalSet(index, RubyFixnum.newFixnum(runtime, array.size())); } for ( int i = 0; i < array.size(); i++ ) { final IRubyObject element = array.eltInternal(i); if ( element instanceof RubyArray ) { calcDimensions(runtime, (RubyArray) element, dims, 1); } } return dims; } }
private static RubyArray calcDimensions(final Ruby runtime, final RubyArray array, final RubyArray dims, final int index) { while ( dims.size() <= index ) { dims.append( RubyFixnum.zero(runtime) ); } final long dim = ((RubyFixnum) dims.eltInternal(index)).getLongValue(); if ( array.size() > dim ) { dims.eltInternalSet(index, RubyFixnum.newFixnum(runtime, array.size())); } for ( int i = 0; i < array.size(); i++ ) { final IRubyObject element = array.eltInternal(i); if ( element instanceof RubyArray ) { calcDimensions(runtime, (RubyArray) element, dims, 1); } } return dims; } }
private static RubyArray dimsRecurse(ThreadContext context, RubyArray rubyArray, RubyArray dims, int 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(runtime, rubyArray.size())); } for (int i = 0; i < rubyArray.size(); i++) { if (rubyArray.eltInternal(i) instanceof RubyArray) { dimsRecurse(context, (RubyArray)rubyArray.eltInternal(i), dims, 1); } } return dims; } }
private static RubyArray dimsRecurse(ThreadContext context, RubyArray rubyArray, RubyArray dims, int 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(runtime, rubyArray.size())); } for (int i = 0; i < rubyArray.size(); i++) { if (rubyArray.eltInternal(i) instanceof RubyArray) { dimsRecurse(context, (RubyArray)rubyArray.eltInternal(i), dims, 1); } } return dims; } }