public void ScheduleFlight(FlightModel flight) { _db.AddFlight(flight); ICollection<FlightModel> priorGateFlights = new FlightModel[0]; foreach (var gate in _db.Gates.OrderBy(g => g.Gate)) { var gateFlights = _db.GetFlightsForGate(gate.Gate).ToList(); try { if (priorGateFlights.Any(f => !flight.CanLoadAtGateNextTo(f))) { continue; } if (gateFlights.Any(f => !f.CanLoadAtSameGateAs(flight))) { continue; } _db.SetFlightGate(flight, gate.Gate); break; } finally { priorGateFlights = gateFlights; } } }
public bool CanLoadAtGateNextTo(FlightModel flight) { TimeSpan minDist = TimeSpan.FromMinutes(10); return Arrives.DistanceFrom(flight.Arrives) >= minDist && Arrives.DistanceFrom(flight.Departs) >= minDist && Departs.DistanceFrom(flight.Arrives) >= minDist && Departs.DistanceFrom(flight.Departs) >= minDist; }
public void ScheduleFlight(FlightModel flight) { foreach (var gate in _db.Gates) { var existingFlights = _db.GetFlightsForGate(gate.Gate).ToList(); if(!existingFlights.Any(ef => Math.Abs((ef.Arrives - flight.Arrives).TotalHours) < 1)) { _db.SetFlightGate(flight.Flight, gate.Gate); break; } } }
public void ScheduleFlight(FlightModel flight) { _db.AddFlight(flight); foreach (var gate in _db.Gates) { var existingFlights = _db.GetFlightsForGate(gate.Gate); if(!existingFlights.Any(f => f == null || !f.CanShareGateWith(flight))) { _db.SetFlightGate(flight, gate.Gate); break; } } }
public bool CanLoadAtSameGateAs(FlightModel flight) { return Range.DistanceFrom(flight.Range) >= TimeSpan.FromMinutes(30); }
public GateModel GetGateForFlight(FlightModel flight) { return _gates.Single(g => flight.Gate == g.Gate); }
private GateModel FindOpenGateFor(FlightModel flight) { ICollection<FlightModel> priorGateFlights = new FlightModel[0]; foreach (var gate in Gates.OrderBy(g => g.Gate)) { var gateFlights = GetFlightsForGate(gate.Gate).ToList(); try { if (priorGateFlights.Any(f => !flight.CanLoadAtGateNextTo(f))) { continue; } if (gateFlights.Any(f => !f.CanLoadAtSameGateAs(flight))) { continue; } return gate; } finally { priorGateFlights = gateFlights; } } return null; }
public bool CanShareGateWith(FlightModel flight) { return Range.DistanceFrom(flight.Range) >= TimeSpan.FromMinutes(30); }
public void SetFlightGate(FlightModel flight, string gate) { flight.Gate = gate; }
public void AddFlight(FlightModel flight) { _flights.Add(flight); }
public bool CanShareGateWith(FlightModel flight) { return !Range.Overlaps(flight.Range) && Math.Abs((Arrives - flight.Arrives).TotalHours) >= 1; }
public void ScheduleFlight(FlightModel flight) { // _schedulerDatabase.SetGateForFlight(flight, gate) ... }
public void ScheduleFlight(FlightModel flight) { _db.SetFlightGate(flight.Flight, _db.Gates.First().Gate); }