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 }); } }
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)); }
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]); }
private long[] getOverlappingRange(CT_Col col1, CT_Col col2) { return(NumericRanges.GetOverlappingRange(toRange(col1), toRange(col2))); }
private bool overlaps(CT_Col col1, CT_Col col2) { return(NumericRanges.GetOverlappingType(toRange(col1), toRange(col2)) != NumericRanges.NO_OVERLAPS); }
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); }
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); }