Exemplo n.º 1
0
        public List<Range> Subtract(Range range)
        {
            List<Range> result = new List<Range>();

            if (Includes(range._lower) && Serial.Le(_lower, range._lower - 1))
            {
                result.Add(new Range(_lower, range._lower - 1));
            }

            if (Includes(range._upper) && Serial.Le(range._upper + 1, _upper))
            {
                result.Add(new Range(range._upper + 1, _upper));
            }

            if (result.Count == 0 && !range.Includes(this))
            {
                result.Add(this);
            }

            return result;
        }
Exemplo n.º 2
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();
            }
        }
Exemplo n.º 3
0
 public Range Span(Range range)
 {
     return new Range(Serial.Min(_lower, range._lower), Serial.Max(_upper, range._upper));
 }
Exemplo n.º 4
0
 public bool Touches(Range range)
 {
     return (Intersects(range) ||
             Includes(range._upper + 1) || Includes(range._lower - 1) ||
             range.Includes(_upper + 1) || range.Includes(_lower - 1));
 }
Exemplo n.º 5
0
 public bool Intersects(Range range)
 {
     return (Includes(range._lower) || Includes(range._upper) ||
             range.Includes(_lower) || range.Includes(_upper));
 }
Exemplo n.º 6
0
 public bool Includes(Range range)
 {
     return Includes(range._lower) && Includes(range._upper);
 }
Exemplo n.º 7
0
 public Range Intersect(Range range)
 {
     int l = Serial.Max(_lower, range._lower);
     int r = Serial.Min(_upper, range._upper);
     return Serial.Gt(l, r) ? null : new Range(l, r);
 }