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;
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;
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;
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;
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;
/** * Removes first entry; returns its snapshot. * @return null if empty, else snapshot of first entry */ Map.Entry doRemoveFirstEntry() { for (;;) { Node b = head.node; Node n = b.next; if (n == null) return null; Node f = n.next; if (n != b.next) continue; Object v = n.value; if (v == null) { n.helpDelete(b, f); continue; } if (!n.casValue(v, null)) continue; if (!n.appendMarker(f) || !b.casNext(n, f)) findFirst(); // retry clearIndexToFirst(); return new AbstractMap.SimpleImmutableEntry(n.key, v); } }
/** * Removes first entry; returns its snapshot. * @return null if empty, else snapshot of first entry */ Map.Entry doRemoveFirstEntry() { for (;;) { Node b = head.node; Node n = b.next; if (n == null) return null; Node f = n.next; if (n != b.next) continue; Object v = n.value; if (v == null) { n.helpDelete(b, f); continue; } if (!n.casValue(v, null)) continue; if (!n.appendMarker(f) || !b.casNext(n, f)) findFirst(); // retry clearIndexToFirst(); return new AbstractMap.SimpleImmutableEntry(n.key, v); } }
/** * Removes first entry; returns its snapshot. * @return null if empty, else snapshot of first entry */ Map.Entry doRemoveFirstEntry() { for (;;) { Node b = head.node; Node n = b.next; if (n == null) return null; Node f = n.next; if (n != b.next) continue; Object v = n.value; if (v == null) { n.helpDelete(b, f); continue; } if (!n.casValue(v, null)) continue; if (!n.appendMarker(f) || !b.casNext(n, f)) findFirst(); // retry clearIndexToFirst(); return new AbstractMap.SimpleImmutableEntry(n.key, v); } }
/** * Specialized variant of findNode to get first valid node. * @return first node or null if empty */ Node findFirst() { for (;;) { Node b = head.node; Node n = b.next; if (n == null) return null; if (n.value != null) return n; n.helpDelete(b, n.next); } }
/** * Specialized variant of findNode to get first valid node. * @return first node or null if empty */ Node findFirst() { for (;;) { Node b = head.node; Node n = b.next; if (n == null) return null; if (n.value != null) return n; n.helpDelete(b, n.next); } }
/** * Specialized variant of findNode to get first valid node. * @return first node or null if empty */ Node findFirst() { for (;;) { Node b = head.node; Node n = b.next; if (n == null) return null; if (n.value != null) return n; n.helpDelete(b, n.next); } }