示例#1
0
        public static long[] GetOverlappingRange(long[] range1, long[] range2)
        {
            switch (NumericRanges.GetOverlappingType(range1, range2))
            {
            case 0:
                return(new long[2] {
                    range2[0], range1[1]
                });

            case 1:
                return(new long[2] {
                    range1[0], range2[1]
                });

            case 2:
                return(range2);

            case 3:
                return(range1);

            default:
                return(new long[2] {
                    -1L, -1L
                });
            }
        }
示例#2
0
 public void TestGetOverlappingType()
 {
     long[] r1 = { 3, 8 };
     long[] r2 = { 6, 11 };
     long[] r3 = { 1, 5 };
     long[] r4 = { 2, 20 };
     long[] r5 = { 5, 6 };
     long[] r6 = { 20, 23 };
     Assert.AreEqual(NumericRanges.OVERLAPS_1_MINOR, NumericRanges.GetOverlappingType(r1, r2));
     Assert.AreEqual(NumericRanges.OVERLAPS_2_MINOR, NumericRanges.GetOverlappingType(r1, r3));
     Assert.AreEqual(NumericRanges.OVERLAPS_2_WRAPS, NumericRanges.GetOverlappingType(r1, r4));
     Assert.AreEqual(NumericRanges.OVERLAPS_1_WRAPS, NumericRanges.GetOverlappingType(r1, r5));
     Assert.AreEqual(NumericRanges.NO_OVERLAPS, NumericRanges.GetOverlappingType(r1, r6));
 }
示例#3
0
 public void TestGetOverlappingRange()
 {
     long[] r1 = { 3, 8 };
     long[] r2 = { 6, 11 };
     long[] r3 = { 1, 5 };
     long[] r4 = { 2, 20 };
     long[] r5 = { 5, 6 };
     long[] r6 = { 20, 23 };
     Assert.AreEqual(6, NumericRanges.GetOverlappingRange(r1, r2)[0]);
     Assert.AreEqual(8, NumericRanges.GetOverlappingRange(r1, r2)[1]);
     Assert.AreEqual(3, NumericRanges.GetOverlappingRange(r1, r3)[0]);
     Assert.AreEqual(5, NumericRanges.GetOverlappingRange(r1, r3)[1]);
     Assert.AreEqual(3, NumericRanges.GetOverlappingRange(r1, r4)[0]);
     Assert.AreEqual(8, NumericRanges.GetOverlappingRange(r1, r4)[1]);
     Assert.AreEqual(5, NumericRanges.GetOverlappingRange(r1, r5)[0]);
     Assert.AreEqual(6, NumericRanges.GetOverlappingRange(r1, r5)[1]);
     Assert.AreEqual(-1, NumericRanges.GetOverlappingRange(r1, r6)[0]);
     Assert.AreEqual(-1, NumericRanges.GetOverlappingRange(r1, r6)[1]);
 }
示例#4
0
 private long[] getOverlappingRange(CT_Col col1, CT_Col col2)
 {
     return(NumericRanges.GetOverlappingRange(toRange(col1), toRange(col2)));
 }
示例#5
0
 private bool overlaps(CT_Col col1, CT_Col col2)
 {
     return(NumericRanges.GetOverlappingType(toRange(col1), toRange(col2)) != NumericRanges.NO_OVERLAPS);
 }
示例#6
0
        public CT_Cols AddCleanColIntoCols(CT_Cols cols, CT_Col col)
        {
            bool colOverlaps = false;

            for (int i = 0; i < cols.sizeOfColArray(); i++)
            {
                CT_Col ithCol           = cols.GetColArray(i);
                long[] range1           = { ithCol.min, ithCol.max };
                long[] range2           = { col.min, col.max };
                long[] overlappingRange = NumericRanges.GetOverlappingRange(range1,
                                                                            range2);
                int overlappingType = NumericRanges.GetOverlappingType(range1,
                                                                       range2);
                // different behavior required for each of the 4 different
                // overlapping types
                if (overlappingType == NumericRanges.OVERLAPS_1_MINOR)
                {
                    ithCol.max = (uint)(overlappingRange[0] - 1);
                    CT_Col rangeCol = insertCol(cols, overlappingRange[0],
                                                overlappingRange[1], new CT_Col[] { ithCol, col });
                    i++;
                    CT_Col newCol = insertCol(cols, (overlappingRange[1] + 1), col
                                              .max, new CT_Col[] { col });
                    i++;
                }
                else if (overlappingType == NumericRanges.OVERLAPS_2_MINOR)
                {
                    ithCol.min = (uint)(overlappingRange[1] + 1);
                    CT_Col rangeCol = insertCol(cols, overlappingRange[0],
                                                overlappingRange[1], new CT_Col[] { ithCol, col });
                    i++;
                    CT_Col newCol = insertCol(cols, col.min,
                                              (overlappingRange[0] - 1), new CT_Col[] { col });
                    i++;
                }
                else if (overlappingType == NumericRanges.OVERLAPS_2_WRAPS)
                {
                    SetColumnAttributes(col, ithCol);
                    if (col.min != ithCol.min)
                    {
                        CT_Col newColBefore = insertCol(cols, col.min, (ithCol
                                                                        .min - 1), new CT_Col[] { col });
                        i++;
                    }
                    if (col.max != ithCol.max)
                    {
                        CT_Col newColAfter = insertCol(cols, (ithCol.max + 1),
                                                       col.max, new CT_Col[] { col });
                        i++;
                    }
                }
                else if (overlappingType == NumericRanges.OVERLAPS_1_WRAPS)
                {
                    if (col.min != ithCol.min)
                    {
                        CT_Col newColBefore = insertCol(cols, ithCol.min, (col
                                                                           .min - 1), new CT_Col[] { ithCol });
                        i++;
                    }
                    if (col.max != ithCol.max)
                    {
                        CT_Col newColAfter = insertCol(cols, (col.max + 1),
                                                       ithCol.max, new CT_Col[] { ithCol });
                        i++;
                    }
                    ithCol.min = (uint)(overlappingRange[0]);
                    ithCol.max = (uint)(overlappingRange[1]);
                    SetColumnAttributes(col, ithCol);
                }
                if (overlappingType != NumericRanges.NO_OVERLAPS)
                {
                    colOverlaps = true;
                }
            }
            if (!colOverlaps)
            {
                CT_Col newCol = CloneCol(cols, col);
            }
            SortColumns(cols);
            return(cols);
        }
示例#7
0
        public CT_Cols AddCleanColIntoCols(CT_Cols cols, CT_Col col)
        {
            bool flag = false;

            for (int index = 0; index < cols.sizeOfColArray(); ++index)
            {
                CT_Col colArray = cols.GetColArray(index);
                long[] range1   = new long[2] {
                    (long)colArray.min, (long)colArray.max
                };
                long[] range2 = new long[2] {
                    (long)col.min, (long)col.max
                };
                long[] overlappingRange = NumericRanges.GetOverlappingRange(range1, range2);
                int    overlappingType  = NumericRanges.GetOverlappingType(range1, range2);
                if (overlappingType == 0)
                {
                    colArray.max = (uint)((ulong)overlappingRange[0] - 1UL);
                    this.insertCol(cols, overlappingRange[0], overlappingRange[1], new CT_Col[2]
                    {
                        colArray,
                        col
                    });
                    int num = index + 1;
                    this.insertCol(cols, overlappingRange[1] + 1L, (long)col.max, new CT_Col[1]
                    {
                        col
                    });
                    index = num + 1;
                }
                else if (overlappingType == 1)
                {
                    colArray.min = (uint)((ulong)overlappingRange[1] + 1UL);
                    this.insertCol(cols, overlappingRange[0], overlappingRange[1], new CT_Col[2]
                    {
                        colArray,
                        col
                    });
                    int num = index + 1;
                    this.insertCol(cols, (long)col.min, overlappingRange[0] - 1L, new CT_Col[1]
                    {
                        col
                    });
                    index = num + 1;
                }
                else if (overlappingType == 3)
                {
                    this.SetColumnAttributes(col, colArray);
                    if ((int)col.min != (int)colArray.min)
                    {
                        this.insertCol(cols, (long)col.min, (long)(colArray.min - 1U), new CT_Col[1]
                        {
                            col
                        });
                        ++index;
                    }
                    if ((int)col.max != (int)colArray.max)
                    {
                        this.insertCol(cols, (long)(colArray.max + 1U), (long)col.max, new CT_Col[1]
                        {
                            col
                        });
                        ++index;
                    }
                }
                else if (overlappingType == 2)
                {
                    if ((int)col.min != (int)colArray.min)
                    {
                        this.insertCol(cols, (long)colArray.min, (long)(col.min - 1U), new CT_Col[1]
                        {
                            colArray
                        });
                        ++index;
                    }
                    if ((int)col.max != (int)colArray.max)
                    {
                        this.insertCol(cols, (long)(col.max + 1U), (long)colArray.max, new CT_Col[1]
                        {
                            colArray
                        });
                        ++index;
                    }
                    colArray.min = (uint)overlappingRange[0];
                    colArray.max = (uint)overlappingRange[1];
                    this.SetColumnAttributes(col, colArray);
                }
                if (overlappingType != -1)
                {
                    flag = true;
                }
            }
            if (!flag)
            {
                this.CloneCol(cols, col);
            }
            ColumnHelper.SortColumns(cols);
            return(cols);
        }