* @return Delta that was created or modified.
*/
Delta addOrCombineDelta(final TransactionStatus status, final Accumulator accumulator, final int step,
final long value) {
// Check current deltas, no lock as status is single txn/thread
Delta delta = status.getDelta();
while (delta != null) {
if (delta.canMerge(accumulator, step)) {
delta.merge(value);
return null;
}
delta = delta.getNext();
}
// No compatible existing delta, create a new one
delta = addDelta(status);
delta.setAccumulator(accumulator);
delta.setStep(step);
delta.setValue(value);
return delta;
}