예제 #1
0
 /// <summary>
 /// Обновление статистики при извлечении из очереди
 /// </summary>
 /// <param name="prev_length"></param>
 /// <param name="element"></param>
 protected void updateStatiscticDecrease(int prev_length, SmplQueueElement element)
 {
     LengthOfTimeIntegral += prev_length * (Model.Time - TimeLastChanged);
         TimeLastChanged = Model.Time;
         CountPassed++;
         var w = Model.Time - element.TimeAdded;
         WaitingPeriodSum += w;
         WaitingPeriodSq2Sum += w * w;
 }
예제 #2
0
        /// <summary>
        /// Добавить новый элемент token в очередь с заданным приоритетом
        /// </summary>
        /// <param name="token">элемент</param>
        /// <param name="priority">приоритет</param>
        /// Пример использования:
        /// @code
        /// SmplModel model = new SmplModel();
        /// SmplQueue queue = new SmplQueue(model, "queue1");
        /// queue.Enqueue("elem1", 1);
        /// @endcode
        public virtual void Enqueue(object token, int priority = 0)
        {
            var new_element = new SmplQueueElement(token, priority);
                new_element.TimeAdded = Model.Time;

                // Пропуск элементов с меньшим приоритетом
                int p;
                for (p = elements.Count - 1; p >= 0 && elements[p].Priority < priority; p--) ;

                // Вставка
                var l = Length;
                elements.Insert(p + 1, new_element);

                // Изменение статистики
                updateStatiscticIncrease(l);
        }