public bool IsEncapsulated(long l) { if (startingIndices.Count == 0) { return(false); } // Find earlier start if (!PreSortedListExt.TryGetInDirection( startingIndices, l, higher: false, result: out var startResult)) { return(false); } // If start is our value, we are encapsulated if (startResult.Value == l) { return(true); } // Find earlier end, if found is after our earlier start // we aren't encapsulated if (PreSortedListExt.TryGetInDirection( endingIndices, l, higher: false, result: out var endEarlierResult) && endEarlierResult.Value >= startResult.Value && endEarlierResult.Value != l) { return(false); } return(true); }
public bool TryGetCurrentOrNextRange(long l, out RangeInt64 range) { if (startingIndices.Count == 0) { range = default(RangeInt64); return(false); } // Get end if (!PreSortedListExt.TryGetInDirection( endingIndices, item: l, higher: true, result: out var endingResult)) { range = default(RangeInt64); return(false); } // Get earlier start, ensure earlier end comes before it if (PreSortedListExt.TryGetInDirection( startingIndices, item: l, higher: false, result: out var startingResult)) { if (PreSortedListExt.TryGetInDirection( endingIndices, item: l, higher: false, result: out var earlierEndingResult)) { if (earlierEndingResult.Value < startingResult.Value) { range = new RangeInt64(startingResult.Value, endingResult.Value); return(true); } } else { range = new RangeInt64(startingResult.Value, endingResult.Value); return(true); } } // Get later start if (!PreSortedListExt.TryGetInDirection( startingIndices, item: l, higher: true, result: out startingResult)) { range = default(RangeInt64); return(false); } range = new RangeInt64(startingResult.Value, endingResult.Value); return(true); }
public bool TryGetCurrentRange(long l, out RangeInt64 range) { if (startingIndices.Count == 0) { range = default(RangeInt64); return(false); } // Get start if (!PreSortedListExt.TryGetInDirection( startingIndices, item: l, higher: false, result: out var startingResult)) { range = default(RangeInt64); return(false); } // Get end if (!PreSortedListExt.TryGetInDirection( endingIndices, item: l, higher: true, result: out var endingResult)) { range = default(RangeInt64); return(false); } // Get start index after our located start index, confirm it's after our end, or we're not encapsulated if (startingIndices.Count > startingResult.Key + 1 && startingIndices[startingResult.Key + 1] < endingResult.Value) { range = default(RangeInt64); return(false); } range = new RangeInt64(startingResult.Value, endingResult.Value); return(true); }