public void rehashIfNecessary(int num) { if (explicitMaps == null) return; for (int ngramOrder = 0; ngramOrder < explicitMaps.length; ++ngramOrder) { if (explicitMaps[ngramOrder] == null) continue; if (explicitMaps[ngramOrder].getLoadFactor(num) >= maxLoadFactor) { rehash(ngramOrder, (explicitMaps[ngramOrder].getCapacity() + num) * 3 / 2, num); return; } } }
/** * @param ngram * @param startPos * @param endPos * @param val * @return */ private long putHelp(final int[] ngram, final int startPos, final int endPos, final T val, final boolean forcedNew) { final int ngramOrder = endPos - startPos - 1; HashMap map = getHashMapForOrder(ngramOrder); if (!forcedNew && map instanceof ExplicitWordHashMap && map.getLoadFactor() >= maxLoadFactor) { rehash(ngramOrder, map.getCapacity() * 3 / 2, 1); map = getHashMapForOrder(ngramOrder); } final long key = getKey(ngram, startPos, endPos); if (key < 0) return -1L; return putHelp(map, ngram, startPos, endPos, key, val, forcedNew); }
@Override public long put(final int[] ngram, int startPos, int endPos, final T val) { final int ngramOrder = endPos - startPos - 1; HashMap map = maps[ngramOrder]; if (map == null) { initMap(initCapacities[ngramOrder], ngramOrder); map = maps[ngramOrder]; } if (map instanceof ExplicitWordHashMap && map.getLoadFactor() >= maxLoadFactor) { rehash(ngramOrder, map.getCapacity() * 3 / 2); map = maps[ngramOrder]; } final long key = getKey(ngram, startPos, endPos); if (key < 0) return -1L; long oldSize = map.size(); final long index = map.put(key); final long suffixIndex = getSuffixOffset(ngram, startPos, endPos); values.add(ngram, startPos, endPos, ngramOrder, index, contextOffsetOf(key), wordOf(key), val, suffixIndex, map.size() > oldSize); return index; }