public IEnumerable <IDuratedItem <T> > Intersecting(Time point) => elements_start .BeforeOrAt(point) .Select(kvp => kvp.Value) .Intersect( elements_end .After(point) .Select(kvp => kvp.Value) );
public IEnumerable <KeyValuePair <Time, V> > BeforeOrAt(Time bar) { if (pivot <= bar) { foreach (var item in items) { yield return(new KeyValuePair <Time, V>(pivot, item)); } } if (left != null) { if (pivot <= bar) { foreach (var item in left.All()) { yield return(item); } } else { foreach (var item in left.BeforeOrAt(bar)) { yield return(item); } } } if (right != null) { foreach (var item in right.BeforeOrAt(bar)) { yield return(item); } } }