public void accumulate(long x){
  Cell[] as;
  long b, v, r;
  int m;
  Cell a;
  if ((as=cells) != null || (r=function.applyAsLong(b=base,x)) != b && !casBase(b,r)) {
    boolean uncontended=true;
    if (as == null || (m=as.length - 1) < 0 || (a=as[getProbe() & m]) == null || !(uncontended=(r=function.applyAsLong(v=a.value,x)) == v || a.cas(v,r)))     longAccumulate(x,function,uncontended);
  }
}

public void accumulate ( long x ) { Cell [ ] as ; long b , v , r ; int m ; Cell a ; if ( ( as = cells ) != null || ( r = function . applyAsLong ( b = base , x ) ) != b && ! casBase ( b , r ) ) { boolean uncontended = true ; if ( as == null || ( m = as . length - 1 ) < 0 || ( a = as [ getProbe ( ) & m ] ) == null || ! ( uncontended = ( r = function . applyAsLong ( v = a . value , x ) ) == v || a . cas ( v , r ) ) ) longAccumulate ( x , function , uncontended ) ; } }
updates with the given value .
