#region License Information /* SimSharp - A .NET port of SimPy, discrete event simulation framework Copyright (C) Heuristic and Evolutionary Algorithms Laboratory (HEAL) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see .*/ #endregion using System; namespace SimSharp { public sealed class PreemptiveRequest : Request, IComparable, IComparable { public double Priority { get; private set; } public bool Preempt { get; private set; } public bool IsPreempted { get; internal set; } public PreemptiveRequest(Simulation environment, Action callback, Action disposeCallback, double priority = 1, bool preempt = false) : base(environment, callback, disposeCallback) { Priority = priority; Preempt = preempt; } public int CompareTo(PreemptiveRequest other) { if (Priority > other.Priority) return 1; else if (Priority < other.Priority) return -1; if (Time > other.Time) return 1; else if (Time < other.Time) return -1; if (!Preempt && other.Preempt) return 1; else if (Preempt && !other.Preempt) return -1; return 0; } public int CompareTo(object obj) { if (obj is PreemptiveRequest other) return CompareTo(other); if (obj == null) return 1; throw new ArgumentException("Can only compare to other objects of type PreemptiveRequest"); } } }