コード例 #1
0
        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();
            }
        }
コード例 #2
0
 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;
     }
 }