private IRubyObject convertJavaValue(Object value) { if (value == null) { return null; } else if (value instanceof String && ((String) value).startsWith(":")) { return rubyHash.getRuntime().getSymbolTable().getSymbol(((String) value).substring(1)); } else { return JavaEmbedUtils.javaToRuby(rubyHash.getRuntime(), value); } }
private IRubyObject convertJavaValue(Object value) { if (value == null) { return null; } else if (value instanceof String && ((String) value).startsWith(":")) { return rubyHash.getRuntime().getSymbolTable().getSymbol(((String) value).substring(1)); } else { return JavaEmbedUtils.javaToRuby(rubyHash.getRuntime(), value); } }
private IRubyObject convertJavaValue(Object value) { if (value == null) { return null; } else if (value instanceof String && ((String) value).startsWith(":")) { return rubyHash.getRuntime().getSymbolTable().getSymbol(((String) value).substring(1)); } else { return JavaEmbedUtils.javaToRuby(rubyHash.getRuntime(), value); } }
@Override public boolean remove(RubyHash hash, Object o) { IRubyObject value = JavaUtil.convertJavaToUsableRubyObject(hash.getRuntime(), o); IRubyObject key = hash.internalIndex(hash.getRuntime().getCurrentContext(), value); if (key == null) return false; return hash.internalDelete(key) != NO_ENTRY; } };
/** rb_hash_empty_p * */ @JRubyMethod(name = "empty?") public RubyBoolean empty_p() { return size == 0 ? getRuntime().getTrue() : getRuntime().getFalse(); }
@Deprecated public final void visitAll(Visitor visitor) { // use -1 to disable concurrency checks visitLimited(getRuntime().getCurrentContext(), visitor, -1, null); }
@Override public Object next() { advance(true); if (entry == head) { peeking = true; // remain where we are throw new NoSuchElementException(); } return view.convertEntry(getRuntime(), entry); }
/** rb_hash_size * */ @JRubyMethod(name = {"size", "length"}) public RubyFixnum rb_size() { return getRuntime().newFixnum(size); }
/** rb_hash_reject_bang * */ public IRubyObject reject_bangInternal(ThreadContext context, Block block) { int n = size; delete_if(context, block); if (n == size) return getRuntime().getNil(); return this; }
/** rb_hash_hash * */ @Override public RubyFixnum hash() { return hash(getRuntime().getCurrentContext()); }
@Deprecated public static void checkExecOptions(IRubyObject options) { if (options instanceof RubyHash) { RubyHash opts = (RubyHash) options; ThreadContext context = opts.getRuntime().getCurrentContext(); checkValidSpawnOptions(context, opts); checkUnsupportedOptions(context, opts, UNSUPPORTED_SPAWN_OPTIONS, "unsupported exec option"); } }
@Deprecated public static void checkSpawnOptions(IRubyObject options) { if (options instanceof RubyHash) { RubyHash opts = (RubyHash) options; ThreadContext context = opts.getRuntime().getCurrentContext(); checkValidSpawnOptions(context, opts); checkUnsupportedOptions(context, opts, UNSUPPORTED_SPAWN_OPTIONS, "unsupported spawn option"); } }
/** rb_hash_invert * */ @JRubyMethod(name = "invert") public RubyHash invert(final ThreadContext context) { final RubyHash result = newHash(getRuntime()); visitAll(context, InvertVisitor, result); return result; }
@Override public Object get(Object key) { IRubyObject gotten = internalGet(JavaUtil.convertJavaToUsableRubyObject(getRuntime(), key)); return gotten == null ? null : gotten.toJava(Object.class); }
@Override public boolean equals(Object other) { if (!(other instanceof RubyHash)) return false; if (this == other) return true; return op_equal(getRuntime().getCurrentContext(), (RubyHash)other).isTrue(); }
@Override public boolean equals(Object other) { if (!(other instanceof RubyHash)) return false; if (this == other) return true; return op_equal(getRuntime().getCurrentContext(), (RubyHash)other).isTrue(); }
@Override public boolean containsKey(Object key) { if (!(key instanceof String)) { return false; } RubySymbol symbol = rubyHash.getRuntime().getSymbolTable().getSymbol((String) key); return rubyHash.containsKey(symbol); }
@Override public Object remove(Object key) { if (!(key instanceof String)) { return null; } Object oldValue = get(key); RubySymbol symbol = rubyHash.getRuntime().getSymbolTable().getSymbol((String) key); rubyHash.remove(symbol); return convertRubyValue(oldValue); }
@Override public Object put(String key, Object value) { Object oldValue = get(key); RubySymbol symbol = rubyHash.getRuntime().getSymbolTable().getSymbol(key); rubyHash.put(symbol, convertJavaValue(value)); return oldValue; }
public static void marshalTo(final RubyHash hash, final MarshalStream output) throws IOException { output.registerLinkTarget(hash); int hashSize = hash.size; output.writeInt(hashSize); try { hash.visitLimited(hash.getRuntime().getCurrentContext(), MarshalDumpVisitor, hashSize, output); } catch (VisitorIOException e) { throw (IOException)e.getCause(); } if (hash.ifNone != UNDEF) output.dumpObject(hash.ifNone); }