private RubySymbol createSymbol(String name, ByteList value, int hash, SymbolEntry[] table) { ReentrantLock lock; (lock = tableLock).lock(); try { int index; int potentialNewSize = size + 1; table = potentialNewSize > threshold ? rehash() : symbolTable; // try lookup again under lock for (SymbolEntry e = table[index = hash & (table.length - 1)]; e != null; e = e.next) { if (hash == e.hash && name.equals(e.name)) return e.symbol; } String internedName = name.intern(); RubySymbol symbol = new RubySymbol(runtime, internedName, value); table[index] = new SymbolEntry(hash, internedName, symbol, table[index]); size = potentialNewSize; // write-volatile symbolTable = table; return symbol; } finally { lock.unlock(); } }
private RubySymbol createSymbol(String name, ByteList value, int hash, SymbolEntry[] table) { ReentrantLock lock; (lock = tableLock).lock(); try { int index; int potentialNewSize = size + 1; table = potentialNewSize > threshold ? rehash() : symbolTable; // try lookup again under lock for (SymbolEntry e = table[index = hash & (table.length - 1)]; e != null; e = e.next) { if (hash == e.hash && name.equals(e.name)) return e.symbol; } String internedName = name.intern(); RubySymbol symbol = new RubySymbol(runtime, internedName, value); table[index] = new SymbolEntry(hash, internedName, symbol, table[index]); size = potentialNewSize; // write-volatile symbolTable = table; return symbol; } finally { lock.unlock(); } }
private RubySymbol fastCreateSymbol(String internedName, SymbolEntry[] table) { ReentrantLock lock; (lock = tableLock).lock(); try { int index; int hash; int potentialNewSize = size + 1; table = potentialNewSize > threshold ? rehash() : symbolTable; // try lookup again under lock for (SymbolEntry e = table[index = (hash = internedName.hashCode()) & (table.length - 1)]; e != null; e = e.next) { if (internedName == e.name) return e.symbol; } RubySymbol symbol = new RubySymbol(runtime, internedName); table[index] = new SymbolEntry(hash, internedName, symbol, table[index]); size = potentialNewSize; // write-volatile symbolTable = table; return symbol; } finally { lock.unlock(); } }
private RubySymbol fastCreateSymbol(String internedName, SymbolEntry[] table) { ReentrantLock lock; (lock = tableLock).lock(); try { int index; int hash; int potentialNewSize = size + 1; table = potentialNewSize > threshold ? rehash() : symbolTable; // try lookup again under lock for (SymbolEntry e = table[index = (hash = internedName.hashCode()) & (table.length - 1)]; e != null; e = e.next) { if (internedName == e.name) return e.symbol; } RubySymbol symbol = new RubySymbol(runtime, internedName); table[index] = new SymbolEntry(hash, internedName, symbol, table[index]); size = potentialNewSize; // write-volatile symbolTable = table; return symbol; } finally { lock.unlock(); } }
symbol = new RubySymbol(runtime, internedName, value); table[index] = new SymbolEntry(hash, internedName, value, symbol, table[index], hard); size++;
symbol = new RubySymbol(runtime, internedName, value); table[index] = new SymbolEntry(hash, internedName, value, symbol, table[index], hard); size++;
symbol = new RubySymbol(runtime, internedName); table[index] = new SymbolEntry(hash, internedName, symbol.getBytes(), symbol, table[index], hard); size++;
symbol = new RubySymbol(runtime, internedName); table[index] = new SymbolEntry(hash, internedName, symbol.getBytes(), symbol, table[index], hard); size++;