using System; using System.Collections.Generic; //using System.Linq; using System.Web; using System.Text; namespace BusScheduler { public class Trip { public string name; public Route aRoute; public List c1ArrivalTime; public List cWaitTime; public Trip() { c1ArrivalTime = new List(); cWaitTime = new List(); } public List cRouteLocation { get { return aRoute.cLocation; } } public Boolean isAtDestNearTime(BusScheduler.Location aLocation, int aTime, int aTolerance) { for (int i = 0; i < cRouteLocation.Count; i++) { if (cRouteLocation[i] == aLocation) { double time = this.c1ArrivalTime[i].total; if ((time < aTime) & (time >= aTime - aTolerance)) { return true; } } } return false; } public Boolean overlaps(Trip bTrip) { double lastTime = c1ArrivalTime[c1ArrivalTime.Count - 1].total; double firstTime = c1ArrivalTime[0].total; if ((lastTime > bTrip.c1ArrivalTime[0].total) & (lastTime < bTrip.c1ArrivalTime[c1ArrivalTime.Count - 1].total)) { return true; } if ((firstTime > bTrip.c1ArrivalTime[0].total) & (firstTime < bTrip.c1ArrivalTime[c1ArrivalTime.Count - 1].total)) { return true; } return false; } public List cTime(BusScheduler.Location aLocation) { List cTimeDest = new List(); for (int i = 0; i < cRouteLocation.Count; i++) { if (cRouteLocation[i] == aLocation) { cTimeDest.Add(c1ArrivalTime[i]); } } return cTimeDest; } public Trip Copy() { Trip answer = new Trip(); answer.aRoute = aRoute; answer.c1ArrivalTime = new List(); answer.c1ArrivalTime.AddRange(c1ArrivalTime); answer.cWaitTime = new List(); answer.cWaitTime.AddRange(cWaitTime); return answer; } public JoinedTrip Append1(Trip aTrip) { JoinedTrip answer = new JoinedTrip(); answer.cLocation.AddRange(this.cRouteLocation); answer.c1ArrivalTime.AddRange(this.c1ArrivalTime); answer.cWaitTime.AddRange(this.cWaitTime); if (this.cRouteLocation[this.cRouteLocation.Count - 1] == aTrip.cRouteLocation[0]) { int nLocation = aTrip.cRouteLocation.Count; for (int i = 1; i < nLocation; i++) {// skip first location to avoid duplication. answer.cLocation.Add(aTrip.cRouteLocation[i]); answer.c1ArrivalTime.Add(aTrip.c1ArrivalTime[i]); answer.cWaitTime.Add(aTrip.cWaitTime[i]); } } else { answer.cLocation.AddRange(aTrip.cRouteLocation); answer.c1ArrivalTime.AddRange(aTrip.c1ArrivalTime); answer.cWaitTime.AddRange(aTrip.cWaitTime); } return answer; } public JoinedTrip Append(Trip aTrip) { JoinedTrip answer = new JoinedTrip(); answer.cLocation.AddRange(this.cRouteLocation); answer.c1ArrivalTime.AddRange(this.c1ArrivalTime); answer.cWaitTime.AddRange(this.cWaitTime); answer.cLocation.AddRange(aTrip.cRouteLocation); answer.c1ArrivalTime.AddRange(aTrip.c1ArrivalTime); answer.cWaitTime.AddRange(aTrip.cWaitTime); int index = this.c1ArrivalTime.Count-1; BusScheduler.Time newTime = new BusScheduler.Time(); newTime.setTime(aTrip.c1ArrivalTime[0].total - this.c1ArrivalTime[index].total); answer.cWaitTime[index] = newTime; return answer; } } public class TripPattern : Trip { public BusScheduler.Time repeatMinutes; public BusScheduler.Time firstRepeatTime; public BusScheduler.Time lastRepeatTime; public List cTrip; public TripPattern() : base() { } public List setcTrip() { cTrip = new List(); for (double time = firstRepeatTime.total; time <= lastRepeatTime.total; time = time + repeatMinutes.total) { Trip aTrip = new Trip(); List cTime = new List(); foreach (BusScheduler.Time aArrivalTime in c1ArrivalTime) { BusScheduler.Time newTime = new BusScheduler.Time(); newTime.setTime( time + aArrivalTime.total); cTime.Add(newTime); } aTrip.c1ArrivalTime = cTime; aTrip.cWaitTime = this.cWaitTime; aTrip.aRoute = this.aRoute; aTrip.name = name; cTrip.Add(aTrip); } return cTrip; } public List yesterdaycTrip() { cTrip = new List(); for (double time = firstRepeatTime.total; time <= lastRepeatTime.total; time = time + repeatMinutes.total) { Trip aTrip = new Trip(); List cTime = new List(); foreach (BusScheduler.Time aArrivalTime in c1ArrivalTime) { BusScheduler.Time newTime = new BusScheduler.Time(); newTime.setTime(time + aArrivalTime.total); cTime.Add(newTime); } aTrip.c1ArrivalTime = cTime; aTrip.cWaitTime = this.cWaitTime; aTrip.aRoute = this.aRoute; aTrip.name = name; cTrip.Add(aTrip); } return cTrip; } } public class JoinedTrip : Trip { public List cLocation; public JoinedTrip() : base() { cLocation = new List(); } public List startandEndTime(BusScheduler.Location startDest, BusScheduler.Location endDest, BusScheduler.Time aArrivalTime) { int endIndex = -1; for (int i = c1ArrivalTime.Count - 1; endIndex < 0; i--) { if ((cLocation[i] == endDest) & (c1ArrivalTime[i].total < aArrivalTime.total)) { endIndex = i; } } int startIndex = -1; for (int i = endIndex - 1; (startIndex < 0) & (i >= 0); i--) { if (cLocation[i] == endDest) { endIndex = i; } if ((cLocation[i] == startDest) & (c1ArrivalTime[i].total < c1ArrivalTime[endIndex].total)) { startIndex = i; } } BusScheduler.Time startTime = new BusScheduler.Time(); ; startTime.setTime(c1ArrivalTime[startIndex].total + cWaitTime[startIndex].total); BusScheduler.Time endTime = new BusScheduler.Time(); endTime.setTime(c1ArrivalTime[endIndex].total); List startandEndTime = new List(); startandEndTime.Add(startTime); startandEndTime.Add(endTime); return startandEndTime; } } }