equal
deleted
inserted
replaced
101 * |
101 * |
102 * @param x the value |
102 * @param x the value |
103 */ |
103 */ |
104 public void accumulate(long x) { |
104 public void accumulate(long x) { |
105 Cell[] as; long b, v, r; int m; Cell a; |
105 Cell[] as; long b, v, r; int m; Cell a; |
106 if ((as = cells) != null || |
106 if ((as = cells) != null |
107 (r = function.applyAsLong(b = base, x)) != b && !casBase(b, r)) { |
107 || ((r = function.applyAsLong(b = base, x)) != b |
|
108 && !casBase(b, r))) { |
108 boolean uncontended = true; |
109 boolean uncontended = true; |
109 if (as == null || (m = as.length - 1) < 0 || |
110 if (as == null |
110 (a = as[getProbe() & m]) == null || |
111 || (m = as.length - 1) < 0 |
111 !(uncontended = |
112 || (a = as[getProbe() & m]) == null |
112 (r = function.applyAsLong(v = a.value, x)) == v || |
113 || !(uncontended = |
113 a.cas(v, r))) |
114 (r = function.applyAsLong(v = a.value, x)) == v |
|
115 || a.cas(v, r))) |
114 longAccumulate(x, function, uncontended); |
116 longAccumulate(x, function, uncontended); |
115 } |
117 } |
116 } |
118 } |
117 |
119 |
118 /** |
120 /** |