public void Processed(Range range) { log.Debug("{0} processed({1})", this, range); bool flush; lock (_processedLock) { _processed.Add(range); Range first = _processed.GetFirst(); int lower = first.Lower; int upper = first.Upper; int old = _maxProcessed; if (Serial.Le(lower, _maxProcessed + 1)) { _maxProcessed = Serial.Max(_maxProcessed, upper); } flush = Serial.Lt(old, _syncPoint) && Serial.Ge(_maxProcessed, _syncPoint); _syncPoint = _maxProcessed; } if (flush) { FlushProcessed(); } }
public void KnownComplete(RangeSet kc) { lock (_processedLock) { RangeSet newProcessed = new RangeSet(); foreach (Range pr in _processed) { foreach (Range kr in kc) { foreach (Range r in pr.Subtract(kr)) { newProcessed.Add(r); } } } _processed = newProcessed; } }