コード例 #1
0
ファイル: ManualTimeProvider.cs プロジェクト: epam/Containers
        /// <summary>
        /// Add new breakpoint to this provider.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="time">Time of new breakpoint.</param>
        /// <param name="context">Context of new breakpoint.</param>
        /// <param name="action">Action which will be called on new breakpoint.</param>
        /// <param name="priority">Priority of new breakpoint(breakpoints with lesser priority with same time called earlier).</param>
        /// <returns>Key of this breakpoint(positive ingeger number) or -1(if we can't add this breakpoint(For example time less than currentTime))</returns>
        public long AddBreakPoint <T>(HdDateTime time, T context, Action <HdDateTime, object> action, int priority = 0)
        {
            if (time < CurrentTime)
            {
                return(-1);
            }
            key++;
            BreakPoint breakPoint = memoryManager.New();

            breakPoint.Time             = time;
            breakPoint.CustomData       = context;
            breakPoint.Priority         = priority;
            breakPoint.BreakPointAction = action;
            breakPoint.NumberOfMessage  = key;
            int _key;

            if (needPop)
            {
                memoryManager.Delete(breakPoints.Peek.Value);
                _key    = breakPoints.ModifyTop(breakPoint).Key;
                needPop = false;
            }
            else
            {
                _key = breakPoints.Add(breakPoint);
            }
            breakPoint.Key = _key;
            return(_key);
        }
コード例 #2
0
ファイル: ManualTimeProvider.cs プロジェクト: epam/Containers
        void GoToNextBreakPoint(HdDateTime destinationTime)
        {
            if (needPop)
            {
                memoryManager.Delete(breakPoints.Pop().Value);
            }
            if (breakPoints.Count == 0)
            {
                needPop = false;
                return;
            }
            BreakPoint breakPoint = breakPoints.Peek.Value;

            if (breakPoint.Time > destinationTime)
            {
                needPop = false;
                return;
            }
            needPop = true;
            long numberOfMessage = breakPoint.NumberOfMessage;

            CurrentTime = breakPoint.Time;
            int key = (int)breakPoint.Key;

            breakPoint.BreakPointAction(CurrentTime, breakPoint.CustomData);
        }