int j = randomLevel(); if (j > h.level) j = h.level + 1; Node z = new Node(key, val, null); basepred.next = z; basepred = z;
/** * {@inheritDoc} * * @throws ClassCastException if the specified key cannot be compared * with the keys currently in the map * @throws NullPointerException if any of the arguments are null */ public boolean replace(Object key, Object oldValue, Object newValue) { if (oldValue == null || newValue == null) throw new NullPointerException(); Comparable k = comparable(key); for (;;) { Node n = findNode(k); if (n == null) return false; Object v = n.value; if (v != null) { if (!oldValue.equals(v)) return false; if (n.casValue(v, newValue)) return true; } } }
/** * Save the state of this map to a stream. * * @serialData The key (Object) and value (Object) for each * key-value mapping represented by the map, followed by * <tt>null</tt>. The key-value mappings are emitted in key-order * (as determined by the Comparator, or by the keys' natural * ordering if no Comparator). */ private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException { // Write out the Comparator and any hidden stuff s.defaultWriteObject(); // Write out keys and values (alternating) for (Node n = findFirst(); n != null; n = n.next) { Object v = n.getValidValue(); if (v != null) { s.writeObject(n.key); s.writeObject(v); } } s.writeObject(null); }
Object v = n.value; if (v == null) { // n is deleted n.helpDelete(b, f); break;
Object v = n.value; if (v == null) { // n is deleted n.helpDelete(b, f); break;
Object v = n.value; if (v == null) { // n is deleted n.helpDelete(b, f); break;
int j = randomLevel(); if (j > h.level) j = h.level + 1; Node z = new Node(key, val, null); basepred.next = z; basepred = z;
if (k == null || v == null) throw new NullPointerException(); Node z = new Node(k, v, null); basepred.next = z; basepred = z;
Object v = n.value; if (v == null) { // n is deleted n.helpDelete(b, f); break; if (!n.casValue(v, null)) break; if (!n.appendMarker(f) || !b.casNext(n, f))
int j = randomLevel(); if (j > h.level) j = h.level + 1; Node z = new Node(key, val, null); basepred.next = z; basepred = z;
if (k == null || v == null) throw new NullPointerException(); Node z = new Node(k, v, null); basepred.next = z; basepred = z;
Object v = n.value; if (v == null) { // n is deleted n.helpDelete(b, f); break; if (!n.casValue(v, null)) break; if (!n.appendMarker(f) || !b.casNext(n, f))
for (;;) { if (n == null) return (b.isBaseHeader())? null : b; Object v = n.value; if (v == null) { // n is deleted n.helpDelete(b, f); break;
Object v = n.value; if (v == null) { // n is deleted n.helpDelete(b, f); break; if (!n.casValue(v, null)) break; if (!n.appendMarker(f) || !b.casNext(n, f))
if (k == null || v == null) throw new NullPointerException(); Node z = new Node(k, v, null); basepred.next = z; basepred = z;
for (;;) { if (n == null) return (b.isBaseHeader())? null : b; Object v = n.value; if (v == null) { // n is deleted n.helpDelete(b, f); break;
Object v = n.value; if (v == null) { // n is deleted n.helpDelete(b, f); break; if (onlyIfAbsent || n.casValue(v, value)) return v; else Node z = new Node(kkey, value, n); if (!b.casNext(n, z)) break; // restart if lost race to append to b int level = randomLevel();
Node n = b.next; if (n == null) { if (b.isBaseHeader()) // empty return null; else Object v = n.value; if (v == null) { // n is deleted n.helpDelete(b, f); break; continue; if (!n.casValue(v, null)) break; Object key = n.key; Comparable ck = comparable(key); if (!n.appendMarker(f) || !b.casNext(n, f))
Object v = n.value; if (v == null) { // n is deleted n.helpDelete(b, f); break; if (onlyIfAbsent || n.casValue(v, value)) return v; else Node z = new Node(kkey, value, n); if (!b.casNext(n, z)) break; // restart if lost race to append to b int level = randomLevel();
for (;;) { if (n == null) return (b.isBaseHeader())? null : b; Object v = n.value; if (v == null) { // n is deleted n.helpDelete(b, f); break;