Skip to content

Instantly share code, notes, and snippets.

View linusnorton's full-sized avatar

Linus Norton linusnorton

View GitHub Profile
function isReachable(results: Results, c: Connection): boolean {
const interchangeTime = results.bestConnections[c.origin] ? interchangeTimeAt(c.origin) : 0;
const reachableWithInterchange = results.earliestArrival[c.origin]
&& results.earliestArrival[c.origin] + interchangeTime <= c.departureTime;
results.tripsReachable[c.trip.tripId] = reachableWithInterchange || results.tripsReachable[c.trip.tripId];
return results.tripsReachable[c.trip.tripId];
}
function isReachable(results: Results, c: Connection): boolean {
const interchangeRequired = results.bestConnections[c.origin]
&& results.bestConnections[c.origin].tripId != c.tripId;
const interchangeTime = interchangeRequired ? interchangeTimeAt(c.origin) : 0;
return results.earliestArrival[c.origin] && results.earliestArrival[c.origin] + interchangeTime <= c.departureTime;
}
function isReachable(results: Results, c: Connection): boolean {
return results.earliestArrival[c.origin] && results.earliestArrival[c.origin] <= c.departureTime;
}
function isBetter(results: Results, c: Connection): boolean {
return !results.earliestArrival[c.destination] || results.earliestArrival[c.destination] > c.arrivalTime;
}
/**
* Return an index of connections that achieve the earliest arrival time at each stop.
*/
function scan(origin: StopID, destination: Stop, date: number, dow: DayOfWeek, departureTime: number): ConnectionIndex {
// set the arrival time at the origin so we have a basis for what is reachable
const earliestArrivals = { [origin]: departureTime };
const bestConnections = {};
const results = { earliestArrivals, bestConnections };
scanTransfers(results, origin);
[server]
# this is only for the mysqld standalone daemon
[mysqld]
skip-log-bin
#
# * Basic Settings
#
user = mysql
let destinationLines = this.getDestinationLines(destination);
let queues = this.getReachableTripSegments(origin, departureTime);
let numTransfers = 0;
let earliestArrival = Infinity;
let results = new QueryResults();
while (!queues.empty(numTransfers)) {
// for each trip segment in the queue at this depth
for (const tripSegment of queues.get(numTransfers)) {
const {trip, b, e} = tripSegment;
const transfers = Map<Trip, Map<number, Transfer[]>>().asMutable();
// for each tripT
for (const tripT of trips) {
const tripLine = this.lineRepository.lineForTrip(tripT);
// for each stopQ of tripT after the first stop
for (let i = 1; i < tripT.stops.length; i++) {
// get stopQ for all stations connected to tripT.stops[i] by footpath.
for (const [stoppingPattern, trips] of tripsByStoppingPattern) {
const lines = linesByStoppingPattern.get(stoppingPattern, []);
for (const trip of trips) {
this.getLineForTrip(trip, lines).match({
some: line => line.add(trip),
none: () => lines.push(new Line([trip]))
});

Order

"/order/123"
{
  "delivery": { 
    "type": "/data/delivery-types/123",
    "fulfilmentMethod": "/data/fulfilment-methods/00005",
  },
  "nlc": "/data/stations/H123",