public void addAll (ShortSet set) { ensureCapacity(set.size); ShortSetIterator iterator = set.iterator(); while (iterator.hasNext) add(iterator.next()); }
if (key1 == EMPTY) { keyTable[index1] = evictedKey; if (size++ >= threshold) resize(capacity << 1); return; index2 = hash2(evictedKey); key2 = keyTable[index2]; if (key2 == EMPTY) { keyTable[index2] = evictedKey; if (size++ >= threshold) resize(capacity << 1); return; index3 = hash3(evictedKey); key3 = keyTable[index3]; if (key3 == EMPTY) { keyTable[index3] = evictedKey; if (size++ >= threshold) resize(capacity << 1); return; } while (true); addStash(evictedKey);
public boolean contains (short key) { if (key == 0) return hasZeroValue; int index = key & mask; if (keyTable[index] != key) { index = hash2(key); if (keyTable[index] != key) { index = hash3(key); if (keyTable[index] != key) return containsKeyStash(key); } } return true; }
public void addAll (short[] array, int offset, int length) { ensureCapacity(length); for (int i = offset, n = i + length; i < n; i++) add(array[i]); }
boolean on = false; int idx = 0; ShortSet ss = new ShortSet(256); for(int p = 0; p < packed.length; p++, on = !on) { if (on) { for (int i = idx; i < idx + (packed[p] & 0xffff); i++) { int x = hilbertX[i], y = hilbertY[i], dist = hilbertDistances[x + (y << 8)]; if (ss.add((short) dist)) { for (int xx = Math.max(0, x - minDistance); xx <= Math.min(255, x + minDistance); xx++) { for (int yy = Math.max(0, y - minDistance); yy <= Math.min(255, y + minDistance); yy++) { dist = hilbertDistances[xx + (yy << 8)]; if(dist >= i) ss.add((short) dist);
ShortSet ss = new ShortSet(boundSize), edge = new ShortSet(boundSize), quickBounds = new ShortSet(boundSize); boolean on = false; int idx = 0; if (on) { for (int i = idx; i < idx + (bounds[p] & 0xffff); i++) { quickBounds.add((short) i); ss.addAll(s2); vla.addAll(s2); edge.addAll(allPackedHilbert(intersectPacked(bounds, fringe(start, 1, 256, 256, false)))); ss.addAll(edge); if(edge.size <= 0) short s = edge.random(rng); edge.remove(s); vla.add(s); int i = s & 0xffff; int k = Math.min(255, Math.max(0, y + yOffsets[d])); dist = hilbertDistances[j + (k << 8)]; if (quickBounds.contains(dist)) { if (ss.add(dist)) { edge.add(dist);
/** Skips checks for existing keys. */ private void addResize (short key) { if (key == 0) { hasZeroValue = true; return; } // Check for empty buckets. int index1 = key & mask; short key1 = keyTable[index1]; if (key1 == EMPTY) { keyTable[index1] = key; if (size++ >= threshold) resize(capacity << 1); return; } int index2 = hash2(key); short key2 = keyTable[index2]; if (key2 == EMPTY) { keyTable[index2] = key; if (size++ >= threshold) resize(capacity << 1); return; } int index3 = hash3(key); short key3 = keyTable[index3]; if (key3 == EMPTY) { keyTable[index3] = key; if (size++ >= threshold) resize(capacity << 1); return; } push(key, index1, key1, index2, key2, index3, key3); }
ShortSet ss = new ShortSet(boundSize), quickBounds = new ShortSet(boundSize); boolean on = false, justAdded; int idx = 0; if (on) { for (int i = idx; i < idx + (bounds[p] & 0xffff); i++) { quickBounds.add((short) i); ss.addAll(s2); vla.addAll(s2); int[] xOffsets = new int[]{0, 1, 0, -1}, yOffsets = new int[]{1, 0, -1, 0}; int k = Math.min(255, Math.max(0, y + yOffsets[d])); dist = hilbertDistances[j + (k << 8)]; if (quickBounds.contains(dist)) { if (ss.add(dist)) { vla.add(dist); edge.add(dist);
/** Returns true if the key was removed. */ public boolean remove (short key) { if (key == 0) { if (!hasZeroValue) return false; hasZeroValue = false; size--; return true; } int index = key & mask; if (keyTable[index] == key) { keyTable[index] = EMPTY; size--; return true; } index = hash2(key); if (keyTable[index] == key) { keyTable[index] = EMPTY; size--; return true; } index = hash3(key); if (keyTable[index] == key) { keyTable[index] = EMPTY; size--; return true; } return removeStash(key); }
ShortSet storedSet = new ShortSet(boundSize), quickBounds = new ShortSet(boundSize); boolean on = false; int idx = 0, i; if (on) { for (i = idx; i < idx + (bounds[p] & 0xffff); i++) { quickBounds.add((short) i); continue DIRECTIONAL; short next = hilbertDistances[extended]; if (quickBounds.contains(next)) storedSet.add(next); else continue DIRECTIONAL; continue DIRECTIONAL; short next = hilbertDistances[extended]; if (quickBounds.contains(next)) { if (storedSet.add(next)) vla.add(next);
if (!bounds.contains(currentPos)) {//hit a wall newStart = rightSlope; } else { if(storedSet.add(currentPos)) vla.add(currentPos); if (!bounds.contains(currentPos) && distance < expansion) {//hit a wall within sight line blocked = true; modifiedShadowCast(expansion, distance + 1, start, leftSlope, xx, xy, yx, yy, viewerX, viewerY, metric, bounds, storedSet, vla); if(bounds.contains(currentPos)) { dist = metric.roughDistance(currentX - viewerX, currentY - viewerY); if (storedSet.add(currentPos)) vla.add(currentPos);
public void addAll (short... array) { addAll(array, 0, array.length); }
@Override public boolean equals (Object obj) { if (!(obj instanceof ShortSet)) return false; ShortSet other = (ShortSet)obj; if (other.size != size) return false; if (other.hasZeroValue != hasZeroValue) return false; for (int i = 0, n = capacity + stashSize; i < n; i++) if (keyTable[i] != EMPTY && !other.contains(keyTable[i])) return false; return true; }
private void resize (int newSize) { int oldEndIndex = capacity + stashSize; capacity = newSize; threshold = (int)(newSize * loadFactor); mask = newSize - 1; hashShift = 31 - Integer.numberOfTrailingZeros(newSize); stashCapacity = Math.max(3, (int)Math.ceil(Math.log(newSize)) * 2); pushIterations = Math.max(Math.min(newSize, 8), (int)Math.sqrt(newSize) / 8); short[] oldKeyTable = keyTable; keyTable = new short[newSize + stashCapacity]; int oldSize = size; size = hasZeroValue ? 1 : 0; stashSize = 0; if (oldSize > 0) { for (int i = 0; i < oldEndIndex; i++) { short key = oldKeyTable[i]; if (key != EMPTY) addResize(key); } } }
private static void modifiedShadowFOV(int expansion, int viewerX, int viewerY, Radius metric, ShortSet bounds, ShortSet storedSet, ShortVLA vla) { if(expansion < 1) return; short start = hilbertDistances[viewerX + (viewerY << 8)]; if(storedSet.add(start)) vla.add(start); for (Direction d : Direction.DIAGONALS) { modifiedShadowCast(expansion, 1, 1.0, 0.0, 0, d.deltaX, d.deltaY, 0, viewerX, viewerY, metric, bounds, storedSet, vla); modifiedShadowCast(expansion, 1, 1.0, 0.0, d.deltaX, 0, 0, d.deltaY, viewerX, viewerY, metric, bounds, storedSet, vla); } }
boolean on = false; int idx = 0; ShortSet ss = new ShortSet(256); for(int p = 0; p < packed.length; p++, on = !on) { if (on) { for (int i = idx; i < idx + (packed[p] & 0xffff); i++) { int x = hilbertX[i], y = hilbertY[i], dist = hilbertDistances[x + (y << 8)]; if (ss.add((short) dist)) { for (int xx = Math.max(0, x - minDistance); xx <= Math.min(255, x + minDistance); xx++) { for (int yy = Math.max(0, y - minDistance); yy <= Math.min(255, y + minDistance); yy++) { dist = hilbertDistances[xx + (yy << 8)]; if(dist >= i) ss.add((short) dist);
if (key1 == key) return false; int index2 = hash2(key); short key2 = keyTable[index2]; if (key2 == key) return false; int index3 = hash3(key); short key3 = keyTable[index3]; if (key3 == key) return false; if (size++ >= threshold) resize(capacity << 1); return true; if (size++ >= threshold) resize(capacity << 1); return true; if (size++ >= threshold) resize(capacity << 1); return true; push(key, index1, key1, index2, key2, index3, key3); return true;