/// <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; }
/// <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); }