/** * The removed objects cause some empty slots. We shift the objects to the empty slots in order to ensure ids of the * objects are less than the filledCells. */ public void reassign() { int i, j; for (i = 0, j = lastNumber - 1; i < j; ++i) { if (numberToObj[i] != null) { continue; } while (j > i) { if (numberToObj[j] != null) { break; } --j; } if (i == j) { break; } numberToObj[i] = numberToObj[j]; numberToObj[i].setNumber(i); numberToObj[j] = null; } lastNumber = i; }
public boolean remove(E o) { int id = o.getNumber(); if (id < 0) { return false; } if (numberToObj[id] != o) { return false; } numberToObj[id] = null; o.setNumber(-1); --filledCells; return true; }
@Override public boolean remove(E o) { if (o == null) { return false; } int num = o.getNumber(); if (num == 0) { return false; } if (freeNumbers == null) { freeNumbers = new BitSet(2 * num); } numberToObj[num] = null; o.setNumber(0); freeNumbers.set(num); return true; } }
public void add(E o) { // We check if this object is already put into the set if (o.getNumber() != -1 && numberToObj[o.getNumber()] == o) { return; } numberToObj[lastNumber] = o; o.setNumber(lastNumber); objContainer.put(o, o); ++lastNumber; ++filledCells; if (lastNumber >= numberToObj.length) { Numberable[] newnto = new Numberable[numberToObj.length * 2]; System.arraycopy(numberToObj, 0, newnto, 0, numberToObj.length); numberToObj = newnto; } }
@Override public synchronized void add(E o) { if (o.getNumber() != 0) { return; } // In case we removed entries from the numberer, we want to re-use the free space int chosenNumber = -1; if (freeNumbers != null) { int ns = freeNumbers.nextSetBit(0); if (ns != -1) { chosenNumber = ns; freeNumbers.clear(ns); } } if (chosenNumber == -1) { chosenNumber = ++lastNumber; } if (lastNumber >= numberToObj.length) { resize(numberToObj.length * 2); } numberToObj[lastNumber] = o; o.setNumber(lastNumber); }
public static <E extends Numberable> PriorityQueue<E> noneOf(final List<? extends E> universe, boolean useNumberInterface) { if (!useNumberInterface) { return noneOf(universe); } int i = 0; for (E e : universe) { e.setNumber(i++); } return newPriorityQueue(universe, new AbstractMap<E, Integer>() { @SuppressWarnings("unchecked") @Override public Integer get(Object key) { return ((E) key).getNumber(); } @Override public int size() { return universe.size(); } @Override public Set<java.util.Map.Entry<E, Integer>> entrySet() { throw new UnsupportedOperationException(); } }); }
public void add( E oo ) { Numberable o = (Numberable) oo; if( o.getNumber() != 0 ) return; ++lastNumber; if( lastNumber >= numberToObj.length ) { Numberable[] newnto = new Numberable[numberToObj.length*2]; System.arraycopy(numberToObj, 0, newnto, 0, numberToObj.length); numberToObj = newnto; } numberToObj[lastNumber] = o; o.setNumber( lastNumber ); }
public void add( E oo ) { Numberable o = (Numberable) oo; if( o.getNumber() != 0 ) return; ++lastNumber; if( lastNumber >= numberToObj.length ) { Numberable[] newnto = new Numberable[numberToObj.length*2]; System.arraycopy(numberToObj, 0, newnto, 0, numberToObj.length); numberToObj = newnto; } numberToObj[lastNumber] = o; o.setNumber( lastNumber ); }