public void Add(ITrip driverTrip, ExtractPersonalAndTripRecords module) { var chain = driverTrip.TripChain; var driver = chain.Person; var driverID = driver.Id; int tripIndex = ComputeTripIndex(driverTrip, chain, driver, module); // Now that we have our index data see if it already exists for (int i = 0; i < _driverRecords.Count; i++) { if (_driverRecords[i].DriverID == driverID && _driverRecords[i].DriverTripID == tripIndex) { _driverRecords[i] = new DriverTrip(_driverRecords[i]); return; } } // If it was not found we need to add a new record _driverRecords.Add(new DriverTrip(driverID, tripIndex, 1)); }
public void CreateRecords(BlockingCollection <FacilitatePassengerRecord> queue, int householdID, ITrip passengerTrip, ExtractPersonalAndTripRecords module) { var chain = passengerTrip.TripChain; var passenger = chain.Person; var passengerId = passenger.Id; var passengerTripId = ComputeTripIndex(passengerTrip, chain, passenger, module); foreach (var record in _driverRecords) { queue.Add(new FacilitatePassengerRecord(householdID, passengerId, passengerTripId, record.DriverID, record.DriverTripID, record.Count)); } }
private static int ComputeTripIndex(ITrip driverTrip, ITripChain chain, ITashaPerson driver, ExtractPersonalAndTripRecords module) { // If it is not a pure Home -> facilitate passenger -> home tour. if (chain.Trips.Count != 1) { // trips are 1 indexed var tripIndex = 1; foreach (var tc in driver.TripChains) { if (tc == chain) { tripIndex += tc.Trips.IndexOf(driverTrip); return(tripIndex); } else { tripIndex += tc.Trips.Count; } } throw new XTMFRuntimeException(module, $"In {module.Name} a driver trip that had a real tour was found that was not in the driver's tours!"); } return(-1); }