示例#1
0
 public static IntegerSegment IntersectionOfSegments(IntegerSegment segment1, IntegerSegment segment2)
 {
     if ((segment1.Start > segment2.End) || (segment1.End < segment2.Start))
     {
         return(IntegerSegment.Zero);
     }
     else
     {
         var start = Math.Max(segment1.Start, segment2.Start);
         var end   = Math.Min(segment1.End, segment2.End);
         return(new IntegerSegment(start, end));
     }
 }
示例#2
0
        /// <summary>
        /// Search for all-zero segments of array with given minimal length
        /// </summary>
        /// <param name="array">Input array</param>
        /// <param name="minimalSegmentLength">Minimal length of segment</param>
        /// <returns>List of segments, which contains only zeros</returns>
        public static IList <IntegerSegment> FindZeroSegments(UInt32[] array, int minimalSegmentLength)
        {
            var result = new List <IntegerSegment>();

            if (array.Length < minimalSegmentLength)
            {
                return(result);
            }

            int lastZero = -1;

            for (var i = 0; i < array.Length; i++)
            {
                if (array[i] == 0)
                {
                    if (lastZero == -1)
                    {
                        lastZero = i;
                    }

                    if (i == (array.Length - 1))
                    {
                        var segment = new IntegerSegment(lastZero, i);
                        if (CheckSegmentLength(segment, minimalSegmentLength))
                        {
                            result.Add(segment);
                        }
                    }
                }
                else
                {
                    if (lastZero != -1)
                    {
                        var segment = new IntegerSegment(lastZero, i - 1);
                        lastZero = -1;
                        if (CheckSegmentLength(segment, minimalSegmentLength))
                        {
                            result.Add(segment);
                        }
                    }
                }
            }

            return(result);
        }
示例#3
0
 private static bool CheckSegmentLength(IntegerSegment segment, int minimalSegmentLength)
 {
     return((segment.End - segment.Start + 1) >= minimalSegmentLength);
 }