private int GetRouteHash(RouteSegment[] route) { RouteSegment firstSegment = route.First(); RouteSegment lastSegment = route.Last(); return(firstSegment.Line.Id.GetHashCode() ^ firstSegment.DateFrom.Ticks.GetHashCode() ^ lastSegment.Line.Id.GetHashCode() ^ lastSegment.DateTo.Ticks.GetHashCode()); }
public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position) { RouteSegmentViewHolder viewHolder = holder as RouteSegmentViewHolder; RouteSegment segment = routeSegments[position]; viewHolder.StopIcon.SetImageBitmap(Utils.GetStopIconForLine(viewHolder.StopIcon.Context, segment.Line)); viewHolder.LineIcon.SetImageDrawable(segment.Line.GetIconDrawable(viewHolder.StopIcon.Context)); viewHolder.LineBar.SetBackgroundColor(Utils.GetColorForLine(viewHolder.StopIcon.Context, segment.Line)); viewHolder.StopName.Text = segment.From.Stop.Name; viewHolder.Date.Text = segment.DateFrom.ToString("HH:mm"); viewHolder.StopList.SetLayoutManager(new WrapLayoutManager(viewHolder.StopList)); viewHolder.StopList.SetAdapter(new RouteSegmentStopAdapter(segment)); viewHolder.StopList.NestedScrollingEnabled = false; if (!viewHolders.Contains(viewHolder)) { viewHolders.Add(viewHolder); } }
public IEnumerable <RouteSegment[]> SimulateTimeStepsFrom(RouteLink[] route, DateTime date, TimeSpan lowerTolerance, TimeSpan upperTolerance) { RouteLink[] changes = route.Distinct(l => l.Line).ToArray(); RouteLink last = route.Last(); if (route.Any(l => l.To.Route.TimeTable == null)) { yield break; } RouteLink firstLink = route.First(); //Step firstStep = firstLink.Line?.Routes?.SelectMany(r => r.Steps)?.First(s => s.Stop.Name == firstLink.From && s.Next?.Stop?.Name == firstLink.To.Stop.Name); Step firstStep = firstLink.To.Route.Steps.First(s => s.Stop.Name == firstLink.From && s.Next?.Stop?.Name == firstLink.To.Stop.Name); // Setup simulation DateTime simulationDate = date; DateTime lowerBound = simulationDate - lowerTolerance; DateTime upperBound = simulationDate + upperTolerance; TimeStep[] timeSteps = firstStep.Route.TimeTable.GetStepsFromStep(firstStep, lowerBound).Take(3).ToArray(); TimeStep lastTimeStep; List <TimeStep> segmentTimeSteps; foreach (TimeStep timeStep in timeSteps) { List <RouteSegment> segments = new List <RouteSegment>(); RouteSegment segment; lastTimeStep = timeStep; simulationDate = lastTimeStep.Date; Step lastStep = firstStep; foreach (RouteLink change in changes.Skip(1)) { segment = new RouteSegment() { From = lastStep, DateFrom = lastTimeStep.Date, Line = lastStep.Route.Line }; segments.Add(segment); segmentTimeSteps = new List <TimeStep>(); while (lastStep.Stop.Name != change.From) { segmentTimeSteps.Add(lastTimeStep); lastStep = lastStep.Next; lastTimeStep = lastStep.Route.TimeTable.GetStepsFromStep(lastStep, simulationDate).FirstOrDefault(); simulationDate = lastTimeStep.Date; } segment.TimeSteps = segmentTimeSteps.ToArray(); segment.To = lastStep; segment.DateTo = simulationDate; //lastStep = change.Line?.Routes?.SelectMany(r => r.Steps)?.First(s => s.Stop.Name == change.From && s.Next?.Stop?.Name == change.To.Stop.Name); lastStep = change.To.Route.Steps.First(s => s.Stop.Name == change.From && s.Next?.Stop?.Name == change.To.Stop.Name); lastTimeStep = lastStep.Route.TimeTable.GetStepsFromStep(lastStep, simulationDate).FirstOrDefault(); if (lastTimeStep == null) { yield break; } simulationDate = lastTimeStep.Date; } segment = new RouteSegment() { From = lastStep, DateFrom = lastTimeStep.Date, Line = lastStep.Route.Line }; segments.Add(segment); segmentTimeSteps = new List <TimeStep>(); while (lastStep.Stop.Name != last.To.Stop.Name) { segmentTimeSteps.Add(lastTimeStep); lastStep = lastStep.Next; lastTimeStep = lastStep.Route.TimeTable.GetStepsFromStep(lastStep, simulationDate).FirstOrDefault(); simulationDate = lastTimeStep.Date; } segment.TimeSteps = segmentTimeSteps.ToArray(); segment.To = lastStep; segment.DateTo = simulationDate; yield return(segments.ToArray()); } }
public RouteSegmentStopAdapter(RouteSegment routeSegment) { this.routeSegment = routeSegment; }