/* TConnection */ public override double GetTravelTime(string date, double arrivalTime, TravelMode Mode) { double time = 0; double trafficDelay = 0; if (!CanBeTraversedUsingMode(Mode)) { return(double.PositiveInfinity); } if (Mode.HasFlag(Routing.TravelMode.Bus)) { List <TimeTableEntry> Trips = TimeTable.GetFeasibleTrips(arrivalTime); if (Trips.Count == 0) { return(double.PositiveInfinity); } TimeTableEntry Trip = Trips.First(); /* The "false" condition is added only for TEST A, in order to ignore the feed validity !!!REMEMBER TO REMOVE FOR TEST C!!! */ if (/*(false) &&*/ (!Trip.IsValidDate(date))) { return(double.PositiveInfinity); } else { time = (Trip.DestinationArrivalTime - Trip.SourceDepartureTime); /* For Bus, the time is traffic dependent */ if ((TrafficReport != null) && (TimeTable.Entries.First().RouteType == RouteType.Bus)) { double minDistanceFromTraffic; minDistanceFromTraffic = Math.Min(this.TrafficDistanceFromSource, this.TrafficDistanceFromDestination); trafficDelay = addTrafficDelay(time, minDistanceFromTraffic, TrafficReport); } /* Waiting time */ WaitingTime = (Trip.SourceDepartureTime - arrivalTime); time += WaitingTime + trafficDelay; DepartureTime = Trip.SourceDepartureTime; ArrivalTime = Trip.SourceArrivalTime; DestArrivalTime = Trip.DestinationArrivalTime; DestDepartureTime = Trip.DestinationDepartureTime; if (time < 0 || WaitingTime < 0) { throw new Exception("negative time value"); } } } else { time = double.PositiveInfinity; } return(time); }