Exemplo n.º 1
0
        public List <Interval <T, D> > GetIntervals(D time, StubMode mode)
        {
            Build();

            List <Interval <T, D> > stubedIntervals;

            switch (mode)
            {
            case StubMode.Contains:
                stubedIntervals = head.Stab(time, ContainConstrains.None);
                break;

            case StubMode.ContainsStart:
                stubedIntervals = head.Stab(time, ContainConstrains.IncludeStart);
                break;

            case StubMode.ContainsStartThenEnd:
                stubedIntervals = head.Stab(time, ContainConstrains.IncludeStart);
                if (stubedIntervals.Count == 0)
                {
                    stubedIntervals = head.Stab(time, ContainConstrains.IncludeEnd);
                }
                break;

            default:
                throw new ArgumentException("Invalid StubMode " + mode, "mode");
            }

            return(stubedIntervals);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Perform a stabbing Query on the node
        /// </summary>
        /// <param name="time">the time to Query at</param>
        /// <returns>all stubedIntervals containing time</returns>
        public List <Interval <T, D> > Stab(D time, ContainConstrains constraint)
        {
            List <Interval <T, D> > result = new List <Interval <T, D> >();

            foreach (var entry in intervals)
            {
                if (entry.Key.Contains(time, constraint))
                {
                    foreach (var interval in entry.Value)
                    {
                        result.Add(interval);
                    }
                }
                else if (entry.Key.Start.CompareTo(time) > 0)
                {
                    break;
                }
            }

            if (time.CompareTo(center) < 0 && leftNode != null)
            {
                result.AddRange(leftNode.Stab(time, constraint));
            }
            else if (time.CompareTo(center) > 0 && rightNode != null)
            {
                result.AddRange(rightNode.Stab(time, constraint));
            }
            return(result);
        }