public static Monitor Monitor(SimEnvironment env) { Contract.Requires <ArgumentNullException>(env != null); //Debug.Assert(monitor.Env.Equals(env)); //Debug.Assert(monitor.Name == (name ?? Default.NameFor.Monitor)); //Debug.Assert(monitor.Count == 0); return(new Monitor(env)); }
internal static void RemoveFromSuspendInfo(SimEnvironment env) { Debug.Assert(SuspendInfo.ContainsKey(env)); lock (SuspendInfo) { SuspendInfo.Remove(env); } }
public static Tally Tally(SimEnvironment env) { Contract.Requires <ArgumentNullException>(env != null); //Debug.Assert(tally.Env.Equals(env)); //Debug.Assert(tally.Name == (name ?? Default.NameFor.Tally)); //Debug.Assert(tally.Count == 0); return(new Tally(env)); }
public static Call <T> Call <T>(this SimEnvironment env, IEnumerable <SimEvent> gen) { // ReSharper disable PossibleMultipleEnumeration Contract.Requires <ArgumentNullException>(env != null, ErrorMessages.NullEnvironment); Contract.Requires <ArgumentNullException>(gen != null && gen.GetEnumerator() != null, ErrorMessages.NullGenerator); Contract.Ensures(Contract.Result <Call <T> >() != null); return(new Call <T>(env, gen.GetEnumerator())); // ReSharper restore PossibleMultipleEnumeration }
public static Container Container(SimEnvironment env) { Contract.Requires <ArgumentNullException>(env != null); Contract.Ensures(ReferenceEquals(Contract.Result <Container>().Env, env)); Contract.Ensures(Contract.Result <Container>().Capacity.Equals(Default.Capacity)); Contract.Ensures(Contract.Result <Container>().Level.Equals(Default.Level)); Contract.Ensures(Contract.Result <Container>().GetPolicy == Default.Policy); Contract.Ensures(Contract.Result <Container>().PutPolicy == Default.Policy); Contract.Ensures(!Contract.Result <Container>().GetQueue.Any()); Contract.Ensures(!Contract.Result <Container>().PutQueue.Any()); return(new Container(env, Default.Capacity, Default.Level, Default.Policy, Default.Policy)); }
public static Resource Resource(SimEnvironment env, int capacity) { Contract.Requires <ArgumentNullException>(env != null); Contract.Requires <ArgumentOutOfRangeException>(capacity > 0); Contract.Ensures(ReferenceEquals(Contract.Result <Resource>().Env, env)); Contract.Ensures(Contract.Result <Resource>().Capacity.Equals(capacity)); Contract.Ensures(Contract.Result <Resource>().Count.Equals(0)); Contract.Ensures(Contract.Result <Resource>().RequestPolicy == Default.Policy); Contract.Ensures(!Contract.Result <Resource>().RequestQueue.Any()); Contract.Ensures(!Contract.Result <Resource>().Users.Any()); return(new Resource(env, capacity, Default.Policy)); }
/// <summary> /// Creates a new environment with a custom seed. /// </summary> /// <param name="seed">The seed used by the exposed random generator.</param> /// <returns>A new simulation environment.</returns> public static SimEnvironment Environment(int seed) { var env = new SimEnvironment(seed); env.RealTime.Locked = true; Debug.Assert(env.Now.Equals(0)); Debug.Assert(env.Random.Seed == seed); lock (SuspendInfo) { SuspendInfo[env] = new Dictionary <SimProcess, SimEvent <object> >(); } return(env); }
public static Container Container(SimEnvironment env, double capacity, double level) { Contract.Requires <ArgumentNullException>(env != null); Contract.Requires <ArgumentOutOfRangeException>(capacity > 0); Contract.Requires <ArgumentOutOfRangeException>(level >= 0 && level <= capacity); Contract.Ensures(ReferenceEquals(Contract.Result <Container>().Env, env)); Contract.Ensures(Contract.Result <Container>().Capacity.Equals(capacity)); Contract.Ensures(Contract.Result <Container>().Level.Equals(level)); Contract.Ensures(Contract.Result <Container>().GetPolicy == Default.Policy); Contract.Ensures(Contract.Result <Container>().PutPolicy == Default.Policy); Contract.Ensures(!Contract.Result <Container>().GetQueue.Any()); Contract.Ensures(!Contract.Result <Container>().PutQueue.Any()); return(new Container(env, capacity, level, Default.Policy, Default.Policy)); }
public static Store <T> Store <T>(SimEnvironment env) { Contract.Requires <ArgumentNullException>(env != null); Contract.Ensures(ReferenceEquals(Contract.Result <Store <T> >().Env, env)); Contract.Ensures(Contract.Result <Store <T> >().Capacity.Equals(Default.Capacity)); Contract.Ensures(Contract.Result <Store <T> >().Count.Equals(0)); Contract.Ensures(Contract.Result <Store <T> >().GetPolicy == Default.Policy); Contract.Ensures(Contract.Result <Store <T> >().PutPolicy == Default.Policy); Contract.Ensures(Contract.Result <Store <T> >().ItemPolicy == Default.Policy); Contract.Ensures(!Contract.Result <Store <T> >().GetQueue.Any()); Contract.Ensures(!Contract.Result <Store <T> >().PutQueue.Any()); Contract.Ensures(!Contract.Result <Store <T> >().ItemQueue.Any()); return(new Store <T>(env, Default.Capacity, Default.Policy, Default.Policy, Default.Policy)); }
public static FilterStore <T> FilterStore <T>(SimEnvironment env, int capacity) { Contract.Requires <ArgumentNullException>(env != null); Contract.Requires <ArgumentOutOfRangeException>(capacity > 0); Contract.Ensures(ReferenceEquals(Contract.Result <FilterStore <T> >().Env, env)); Contract.Ensures(Contract.Result <FilterStore <T> >().Capacity.Equals(capacity)); Contract.Ensures(Contract.Result <FilterStore <T> >().Count.Equals(0)); Contract.Ensures(Contract.Result <FilterStore <T> >().GetPolicy == Default.Policy); Contract.Ensures(Contract.Result <FilterStore <T> >().PutPolicy == Default.Policy); Contract.Ensures(Contract.Result <FilterStore <T> >().ItemPolicy == Default.Policy); Contract.Ensures(!Contract.Result <FilterStore <T> >().GetQueue.Any()); Contract.Ensures(!Contract.Result <FilterStore <T> >().PutQueue.Any()); Contract.Ensures(!Contract.Result <FilterStore <T> >().ItemQueue.Any()); return(new FilterStore <T>(env, capacity, Default.Policy, Default.Policy, Default.Policy)); }
public static Store <T> Store <T>(SimEnvironment env, int capacity, WaitPolicy getPolicy, WaitPolicy putPolicy) { Contract.Requires <ArgumentNullException>(env != null); Contract.Requires <ArgumentOutOfRangeException>(capacity > 0); Contract.Requires <ArgumentOutOfRangeException>(Enum.IsDefined(typeof(WaitPolicy), getPolicy)); Contract.Requires <ArgumentOutOfRangeException>(Enum.IsDefined(typeof(WaitPolicy), putPolicy)); Contract.Ensures(ReferenceEquals(Contract.Result <Store <T> >().Env, env)); Contract.Ensures(Contract.Result <Store <T> >().Capacity.Equals(capacity)); Contract.Ensures(Contract.Result <Store <T> >().Count.Equals(0)); Contract.Ensures(Contract.Result <Store <T> >().GetPolicy == getPolicy); Contract.Ensures(Contract.Result <Store <T> >().PutPolicy == putPolicy); Contract.Ensures(Contract.Result <Store <T> >().ItemPolicy == Default.Policy); Contract.Ensures(!Contract.Result <Store <T> >().GetQueue.Any()); Contract.Ensures(!Contract.Result <Store <T> >().PutQueue.Any()); Contract.Ensures(!Contract.Result <Store <T> >().ItemQueue.Any()); return(new Store <T>(env, capacity, getPolicy, putPolicy, Default.Policy)); }
public static SimEvent Suspend(this SimEnvironment env) { return(SuspendInfo[env][env.ActiveProcess] = env.Event <object>()); }
/// <summary> /// /// </summary> /// <param name="env"></param> /// <param name="steps"></param> internal SimProcess(SimEnvironment env, IEnumerator <SimEvent> steps) : base(env) { _steps = steps; }
internal Dummy(SimEnvironment env) : base(env) { }
/// <summary> /// /// </summary> /// <param name="env"></param> internal SimEvent(SimEnvironment env) { _env = env; }