public void remove() { if (lastReturned == null) throw new IllegalStateException(); synchronized (ConcurrentReferenceHashMap.this) { Entry[] tab = ConcurrentReferenceHashMap.this.table; int index = (lastReturned.getHash() & 0x7FFFFFFF) % tab.length; for (Entry e = tab[index], prev = null; e != null; prev = e, e = e.getNext()) { if (e == lastReturned) { if (prev == null) tab[index] = e.getNext(); else prev.setNext(e.getNext()); count--; lastReturned = null; return; } } throw new Error("Iterated off table when doing remove"); } } }
public void remove() { if (lastReturned == null) throw new IllegalStateException(); synchronized (ConcurrentReferenceHashMap.this) { Entry[] tab = ConcurrentReferenceHashMap.this.table; int index = (lastReturned.getHash() & 0x7FFFFFFF) % tab.length; for (Entry e = tab[index], prev = null; e != null; prev = e, e = e.getNext()) { if (e == lastReturned) { if (prev == null) tab[index] = e.getNext(); else prev.setNext(e.getNext()); count--; lastReturned = null; return; } } throw new Error("Iterated off table when doing remove"); } } }
public void remove() { if (lastReturned == null) throw new IllegalStateException(); synchronized (ConcurrentReferenceHashMap.this) { Entry[] tab = ConcurrentReferenceHashMap.this.table; int index = (lastReturned.getHash() & 0x7FFFFFFF) % tab.length; for (Entry e = tab[index], prev = null; e != null; prev = e, e = e.getNext()) { if (e == lastReturned) { if (prev == null) tab[index] = e.getNext(); else prev.setNext(e.getNext()); count--; lastReturned = null; return; } } throw new Error("Iterated off table when doing remove"); } } }
if ((e.getHash() == hash) && eq(key, e.getKey())) { if (prev != null) prev.setNext(e.getNext());
if ((e.getHash() == hash) && eq(key, e.getKey())) { if (prev != null) prev.setNext(e.getNext());
if ((e.getHash() == hash) && eq(key, e.getKey())) { if (prev != null) prev.setNext(e.getNext());
/** * Returns a shallow copy of this HashMap. The keys and values * themselves are not cloned. */ public synchronized Object clone() { try { expungeStaleEntries(); ConcurrentReferenceHashMap t = (ConcurrentReferenceHashMap) super.clone(); t.table = new Entry[table.length]; for (int i = table.length; i-- > 0;) { Entry e = table[i]; if (e != null) { t.table[i] = (Entry) e.clone(t.queue); e = e.getNext(); for (Entry k = t.table[i]; e != null; e = e.getNext()) { k.setNext((Entry) e.clone(t.queue)); k = k.getNext(); } } } t.keySet = null; t.entrySet = null; t.values = null; return t; } catch (CloneNotSupportedException e) { // this shouldn't happen, since we are Cloneable throw new InternalError(); } }
/** * Returns a shallow copy of this HashMap. The keys and values * themselves are not cloned. */ public synchronized Object clone() { try { expungeStaleEntries(); ConcurrentReferenceHashMap t = (ConcurrentReferenceHashMap) super.clone(); t.table = new Entry[table.length]; for (int i = table.length; i-- > 0;) { Entry e = table[i]; if (e != null) { t.table[i] = (Entry) e.clone(t.queue); e = e.getNext(); for (Entry k = t.table[i]; e != null; e = e.getNext()) { k.setNext((Entry) e.clone(t.queue)); k = k.getNext(); } } } t.keySet = null; t.entrySet = null; t.values = null; return t; } catch (CloneNotSupportedException e) { // this shouldn't happen, since we are Cloneable throw new InternalError(); } }
/** * Expunge stale entries from the table. */ private void expungeStaleEntries() { Object r; while ((r = queue.poll()) != null) { Entry entry = (Entry) r; int hash = entry.getHash(); Entry[] tab = table; int index = (hash & 0x7FFFFFFF) % tab.length; for (Entry e = tab[index], prev = null; e != null; prev = e, e = e.getNext()) { if (e == entry) { if (prev != null) prev.setNext(e.getNext()); // otherwise put the bucket after us else tab[index] = e.getNext(); count--; if (keyType == HARD) valueExpired(e.getKey()); else keyExpired(e.getValue()); } } } }
/** * Expunge stale entries from the table. */ private void expungeStaleEntries() { Object r; while ((r = queue.poll()) != null) { Entry entry = (Entry) r; int hash = entry.getHash(); Entry[] tab = table; int index = (hash & 0x7FFFFFFF) % tab.length; for (Entry e = tab[index], prev = null; e != null; prev = e, e = e.getNext()) { if (e == entry) { if (prev != null) prev.setNext(e.getNext()); // otherwise put the bucket after us else tab[index] = e.getNext(); count--; if (keyType == HARD) valueExpired(e.getKey()); else keyExpired(e.getValue()); } } } }
/** * Expunge stale entries from the table. */ private void expungeStaleEntries() { Object r; while ((r = queue.poll()) != null) { Entry entry = (Entry) r; int hash = entry.getHash(); Entry[] tab = table; int index = (hash & 0x7FFFFFFF) % tab.length; for (Entry e = tab[index], prev = null; e != null; prev = e, e = e.getNext()) { if (e == entry) { if (prev != null) prev.setNext(e.getNext()); // otherwise put the bucket after us else tab[index] = e.getNext(); count--; if (keyType == HARD) valueExpired(e.getKey()); else keyExpired(e.getValue()); } } } }
/** * Expunge stale entries from the table. */ private void expungeStaleEntries() { Object r; while ((r = queue.poll()) != null) { Entry entry = (Entry) r; int hash = entry.getHash(); Entry[] tab = table; int index = (hash & 0x7FFFFFFF) % tab.length; for (Entry e = tab[index], prev = null; e != null; prev = e, e = e.getNext()) { if (e == entry) { if (prev != null) prev.setNext(e.getNext()); // otherwise put the bucket after us else tab[index] = e.getNext(); count--; if (keyType == HARD) valueExpired(e.getKey()); else keyExpired(e.getValue()); } } } }
/** * Returns a shallow copy of this HashMap. The keys and values * themselves are not cloned. */ public synchronized Object clone() { try { expungeStaleEntries(); ConcurrentReferenceHashMap t = (ConcurrentReferenceHashMap) super.clone(); t.table = new Entry[table.length]; for (int i = table.length; i-- > 0;) { Entry e = table[i]; if (e != null) { t.table[i] = (Entry) e.clone(t.queue); e = e.getNext(); for (Entry k = t.table[i]; e != null; e = e.getNext()) { k.setNext((Entry) e.clone(t.queue)); k = k.getNext(); } } } t.keySet = null; t.entrySet = null; t.values = null; return t; } catch (CloneNotSupportedException e) { // this shouldn't happen, since we are Cloneable throw new InternalError(); } }
public boolean remove(Object o) { if (!(o instanceof Map.Entry)) return false; Map.Entry entry = (Map.Entry) o; Object key = entry.getKey(); synchronized (ConcurrentReferenceHashMap.this) { Entry[] tab = table; int hash = hc(key); int index = (hash & 0x7FFFFFFF) % tab.length; for (Entry e = tab[index], prev = null; e != null; prev = e, e = e.getNext()) { if (e.getHash() == hash && eq(e, entry)) { if (prev != null) prev.setNext(e.getNext()); else tab[index] = e.getNext(); count--; return true; } } return false; } }
public boolean remove(Object o) { if (!(o instanceof Map.Entry)) return false; Map.Entry entry = (Map.Entry) o; Object key = entry.getKey(); synchronized (ConcurrentReferenceHashMap.this) { Entry[] tab = table; int hash = hc(key); int index = (hash & 0x7FFFFFFF) % tab.length; for (Entry e = tab[index], prev = null; e != null; prev = e, e = e.getNext()) { if (e.getHash() == hash && eq(e, entry)) { if (prev != null) prev.setNext(e.getNext()); else tab[index] = e.getNext(); count--; return true; } } return false; } }
public boolean remove(Object o) { if (!(o instanceof Map.Entry)) return false; Map.Entry entry = (Map.Entry) o; Object key = entry.getKey(); synchronized (ConcurrentReferenceHashMap.this) { Entry[] tab = table; int hash = hc(key); int index = (hash & 0x7FFFFFFF) % tab.length; for (Entry e = tab[index], prev = null; e != null; prev = e, e = e.getNext()) { if (e.getHash() == hash && eq(e, entry)) { if (prev != null) prev.setNext(e.getNext()); else tab[index] = e.getNext(); count--; return true; } } return false; } }
public boolean remove(Object o) { if (!(o instanceof Map.Entry)) return false; Map.Entry entry = (Map.Entry) o; Object key = entry.getKey(); synchronized (ConcurrentReferenceHashMap.this) { Entry[] tab = table; int hash = hc(key); int index = (hash & 0x7FFFFFFF) % tab.length; for (Entry e = tab[index], prev = null; e != null; prev = e, e = e.getNext()) { if (e.getHash() == hash && eq(e, entry)) { if (prev != null) prev.setNext(e.getNext()); else tab[index] = e.getNext(); count--; return true; } } return false; } }
public void remove() { if (lastReturned == null) throw new IllegalStateException(); synchronized (ConcurrentReferenceHashMap.this) { Entry[] tab = ConcurrentReferenceHashMap.this.table; int index = (lastReturned.getHash() & 0x7FFFFFFF) % tab.length; for (Entry e = tab[index], prev = null; e != null; prev = e, e = e.getNext()) { if (e == lastReturned) { if (prev == null) tab[index] = e.getNext(); else prev.setNext(e.getNext()); count--; lastReturned = null; return; } } throw new Error("Iterated off table when doing remove"); } } }