Exemple #1
0
        private void FindAll(IntervalNode <T> node, DateTimeRange range, IntervalTreeMatch match, List <T> result)
        {
            if (node == null)
            {
                return;
            }

            if (match == IntervalTreeMatch.Contained && range.Contains(node.Interval))
            {
                result.Add(node.Data);
            }
            else if (match == IntervalTreeMatch.ContainedBy && node.Interval.Contains(range))
            {
                result.Add(node.Data);
            }
            else if (match == IntervalTreeMatch.Overlap && range.Overlaps(node.Interval))
            {
                result.Add(node.Data);
            }
            else if (match == IntervalTreeMatch.Exact && range.Equals(node.Interval))
            {
                result.Add(node.Data);
            }

            if (node.Left != null && range.Start < node.Interval.Start && range.Start < node.Left.Max)
            {
                FindAll(node.Left, range, match, result);
            }

            if (node.Right != null && range.End >= node.Interval.Start && range.Start <= node.Right.Max)
            {
                FindAll(node.Right, range, match, result);
            }
        }
Exemple #2
0
        /// <summary>
        /// Find all events for the range based on the match criteria
        /// - Exact: Return only elements with the same start / end time
        /// - Contained: Return only elements within the range
        /// - Overlap: Return only elements that overlap the range
        /// </summary>
        /// <param name="range">The event range to match</param>
        /// <param name="match">Type of match to do</param>
        /// <returns>The set of all matching elements</returns>
        public List <T> FindAll(DateTimeRange range, IntervalTreeMatch match)
        {
            List <T> result = new List <T>();

            FindAll(root, range, match, result);

            return(result);
        }