private boolean verify() { assert (size == 0 && head == null && tail == null) || (size != 0 && head != null && tail != null) : "size=" + size + ", head=" + head + ", tail=" + tail; assert head == null || head == getEntry(head.getKey()); assert tail == null || tail == getEntry(tail.getKey()); if (VERIFY) { assert root.count() == size : root.count() + " != " + size; assert root.verify(0); int count = 0; for (Iterator<Map.Entry<Object, Property>> iterator = orderedEntryIterator(); iterator.hasNext();) { Map.Entry<Object, Property> e = iterator.next(); assert e == getEntry(e.getKey()); count++; } assert count == size : count + " != " + size; } return true; }
@Override public String toString() { return getClass().getSimpleName() + "@" + Integer.toHexString(hashCode()) + "[" + value + "]"; } }
if (tail == null) { newEntry = new LinkedPropertyEntry(value, null, null); newHead = newTail = newEntry; } else { Object tailKey = tail.getKey(); newEntry = new LinkedPropertyEntry(value, tailKey, null); LinkedPropertyEntry tailWithNext = tail.withNextKey(key); newRoot = newRoot.put(tailKey, hash(tailKey), tailWithNext); if (head == tail) { newTail = tail; newEntry = existing.withValue(value); assert !newEntry.equals(existing); if (existing.getPrevKey() != null) { assert getEntry(existing.getPrevKey()).getNextKey().equals(key); } else { assert existing == head; newHead = newEntry; if (existing.getNextKey() != null) { assert getEntry(existing.getNextKey()).getPrevKey().equals(key); } else { assert existing == tail;
if (tail == null) { newEntry = new LinkedPropertyEntry(value, null, null); newHead = newTail = newEntry; } else { Object tailKey = tail.getKey(); newEntry = new LinkedPropertyEntry(value, tailKey, null); LinkedPropertyEntry tailWithNext = tail.withNextKey(key); newRoot = newRoot.put(tailKey, hash(tailKey), tailWithNext); if (head == tail) { newTail = tail; newEntry = existing.withValue(value); assert !newEntry.equals(existing); if (existing.getPrevKey() != null) { assert getEntry(existing.getPrevKey()).getNextKey().equals(key); } else { assert existing == head; newHead = newEntry; if (existing.getNextKey() != null) { assert getEntry(existing.getNextKey()).getPrevKey().equals(key); } else { assert existing == tail;
LinkedPropertyEntry newHead = head; LinkedPropertyEntry newTail = tail; if (existing.getPrevKey() != null) { Object prevKey = existing.getPrevKey(); LinkedPropertyEntry existingPrev = getEntry(prevKey); LinkedPropertyEntry newPrev = existingPrev.withNextKey(existing.getNextKey()); newRoot = newRoot.put(prevKey, hash(prevKey), newPrev); if (existing == tail) { if (existing.getNextKey() != null) { Object nextKey = existing.getNextKey(); LinkedPropertyEntry existingNext = getEntry(nextKey); LinkedPropertyEntry newNext = existingNext.withPrevKey(existing.getPrevKey()); newRoot = newRoot.put(nextKey, hash(nextKey), newNext); if (existing == head) {
LinkedPropertyEntry newHead = head; LinkedPropertyEntry newTail = tail; if (existing.getPrevKey() != null) { Object prevKey = existing.getPrevKey(); LinkedPropertyEntry existingPrev = getEntry(prevKey); LinkedPropertyEntry newPrev = existingPrev.withNextKey(existing.getNextKey()); newRoot = newRoot.put(prevKey, hash(prevKey), newPrev); if (existing == tail) { if (existing.getNextKey() != null) { Object nextKey = existing.getNextKey(); LinkedPropertyEntry existingNext = getEntry(nextKey); LinkedPropertyEntry newNext = existingNext.withPrevKey(existing.getPrevKey()); newRoot = newRoot.put(nextKey, hash(nextKey), newNext); if (existing == head) {
private boolean verify() { assert (size == 0 && head == null && tail == null) || (size != 0 && head != null && tail != null) : "size=" + size + ", head=" + head + ", tail=" + tail; assert head == null || head == getEntry(head.getKey()); assert tail == null || tail == getEntry(tail.getKey()); if (VERIFY) { assert root.count() == size : root.count() + " != " + size; assert root.verify(0); int count = 0; for (Iterator<Map.Entry<Object, Property>> iterator = orderedEntryIterator(); iterator.hasNext();) { Map.Entry<Object, Property> e = iterator.next(); assert e == getEntry(e.getKey()); count++; } assert count == size : count + " != " + size; } return true; }
@Override public LinkedPropertyEntry withNextKey(Object nextKey) { return new LinkedPropertyEntry(value, prevKey, nextKey); }
@Override public LinkedPropertyEntry withPrevKey(Object prevKey) { return new LinkedPropertyEntry(value, prevKey, nextKey); }
@Override public Property getLastProperty() { return tail == null ? null : tail.getValue(); }
@Override public LinkedPropertyEntry withNextKey(Object nextKey) { return new LinkedPropertyEntry(value, prevKey, nextKey); }
@Override public Property get(Object key) { LinkedPropertyEntry entry = getEntry(key); return entry == null ? null : entry.getValue(); }
@Override public Property getLastProperty() { return tail == null ? null : tail.getValue(); }
@Override public LinkedPropertyEntry withPrevKey(Object prevKey) { return new LinkedPropertyEntry(value, prevKey, nextKey); }
@Override public LinkedPropertyEntry withValue(Property value) { return new LinkedPropertyEntry(value, prevKey, nextKey); }
@Override public LinkedPropertyEntry withValue(Property value) { return new LinkedPropertyEntry(value, prevKey, nextKey); }
@Override public LinkedPropertyEntry getEntry(Object key) { LinkedPropertyEntry entry = root.find(key, hash(key)); assert entry == null || entry.getKey().equals(key); return entry; }
@Override public String toString() { return getClass().getSimpleName() + "@" + Integer.toHexString(hashCode()) + "[" + value + "]"; } }
@Override public Property get(Object key) { LinkedPropertyEntry entry = getEntry(key); return entry == null ? null : entry.getValue(); }
@Override public LinkedPropertyEntry getEntry(Object key) { LinkedPropertyEntry entry = root.find(key, hash(key)); assert entry == null || entry.getKey().equals(key); return entry; }