private static DistSpan Spread(IList <DistSpan> distBuffer, byte start, byte length)
        {
            byte end = (byte)(start + length);

            for (int i = 0; i < distBuffer.Count; i++)
            {
                var dist = distBuffer[i];
                if (dist.Start == end)
                {
                    dist.Start  -= length;
                    dist.Length += length;

                    distBuffer[i] = dist;
                    return(dist);
                }
                if (dist.Start == end - 1)
                {
                    dist.Start  -= (byte)(length - 1);
                    dist.Length += (byte)(length - 1);

                    distBuffer[i] = dist;
                    return(dist);
                }

                if (dist.End == start)
                {
                    dist.Length += length;

                    distBuffer[i] = dist;
                    return(dist);
                }
                if (dist.End == start + 1)
                {
                    dist.Length += (byte)(length - 1);

                    distBuffer[i] = dist;
                    return(dist);
                }
            }

            var newDist = new DistSpan(start, length, (byte)distBuffer.Count);

            distBuffer.Add(newDist);
            return(newDist);
        }
 public bool RangeEqual(DistSpan other)
 {
     return(Start == other.Start && Length == other.Length);
 }
Example #3
0
 public bool RangeEqual(DistSpan other)
 {
     return(start == other.start && length == other.length);
 }