public static bool DoOverlap(IntervalTree <T> parentNode, IntervalTree <T> interval) { if (IntervalTree <T> .Compare(interval.High, parentNode.Low) >= 0 && IntervalTree <T> .Compare(parentNode.High, interval.Low) >= 0) { return(true); } return(false); }
public static bool operator ==(IntervalTree <T> leftOperand, IntervalTree <T> rightOperand) { if (leftOperand is null && rightOperand is null) { return(true); } if (leftOperand is null || rightOperand is null) { return(false); } return(IntervalTree <T> .Compare(leftOperand.Low, rightOperand.Low) == 0 && IntervalTree <T> .Compare(leftOperand.High, rightOperand.High) == 0); }
public static bool operator <=(IntervalTree <T> leftOperand, IntervalTree <T> rightOperand) { if (leftOperand is null) { throw new ArgumentNullException(nameof(leftOperand)); } if (rightOperand is null) { throw new ArgumentNullException(nameof(rightOperand)); } return(IntervalTree <T> .Compare(leftOperand.Low, rightOperand.Low) <= 0); }
public static IntervalTree <T> Insert(IntervalTree <T> parentNode, IntervalTree <T> interval) { if (parentNode == null) { return(interval); } if (parentNode > interval) { parentNode.Left = Insert(parentNode.Left, interval); } else { parentNode.Right = Insert(parentNode.Right, interval); } return(parentNode); }
public static IntervalTree <T> Search(IntervalTree <T> parentNode, IntervalTree <T> interval) { if (parentNode == null) { return(null); } if (DoOverlap(parentNode, interval)) { return(parentNode); } if (IntervalTree <T> .Compare(parentNode.Low, interval.High) >= 0) { return(Search(parentNode.Left, interval)); } else { return(Search(parentNode.Right, interval)); } }
public static IntervalTree <T> Insert(IntervalTree <T> parentNode, T low, T high) { return(Insert(parentNode, new IntervalTree <T>(low, high))); }
public static bool Equals(IntervalTree <T> leftOperand, IntervalTree <T> righOperand) { return(leftOperand == righOperand); }