/* * Copyright (c) 2005-2006 Erik Tigerholm * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ using System; using System.Collections.Generic; using System.Text; namespace OpenTraffic.Model.Simulator { [Serializable] public class VirtualLink : ILinkSimulator, IVirtualLink { float free; List carToTransfer; TrafficModelLink link; float estimatedFlow; private int lastCarTransfer = 0; public float GetRatioOccupied() { return 0.0f; } public int GetNumberOfVehiclesInQueue() { return 0; } public OpenTraffic.Model.TrafficModelLink NetworkLink { get { return link; } } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "0")] public void Synchronize(LinkInfo li) { this.estimatedFlow = li.EstimatedFlow; this.free = li.FreeCapacity; } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "0")] public VirtualLink(TrafficModelLink l) { link = l; free = l.CapacityActive; carToTransfer = new List(); } public void Clear() { free = (int)link.CapacityActive; carToTransfer.Clear(); } public bool PreSimulate(float startTime, float stopTime, Result.ResultData result, TrafficModel model) { return true; } // xxx private int denied; public bool IsFull() { bool f = (free - carToTransfer.Count - lastCarTransfer < 0); if (f) { denied++; ; } return f; } public void Add(Vehicle v, float time, float extraTurnDelay, Result.ResultData res) { carToTransfer.Add(v); } public bool Simulate(float startTime, float stopTime, Result.ResultData result, TrafficModel model) { return false; } public void AddCarToTransfer(List cars) { if (cars != null) { // xxx if (link.Id == 79) {/* if (IsFull()) { Console.WriteLine("Transferring {3:N} cars with {0:F2}/{1:N}/{2:N} denied {3:N} " + (IsFull() ? "Full" : "Not full"), free, carToTransfer.Count, lastCarTransfer, cars.Count,denied); } Console.Write(IsFull() ? "." : "#");*/ } denied = 0; foreach (Vehicle v in carToTransfer) { cars.Add(v); } lastCarTransfer = carToTransfer.Count; carToTransfer.Clear(); } } public int GetNumberOfVehicles() { return 0; } public float GetEstimatedFlow() { return estimatedFlow; } public LinkInfo GetLinkInfo() { return null; } } }