Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 26 additions & 8 deletions router.c
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,11 @@ static void flag_journey_patterns_for_stop(router_t *router, router_request_t *r
if (i_jp == 0) return;

do {
#if RRRR_BANNED_JOURNEY_PATTERNS_BITMASK == 1
/* Don't check whether journeypattern is valid since we banned all unsuitable journey_patterns */
i_jp--;
bitset_set (router->updated_journey_patterns, journey_patterns[i_jp]);
#else
calendar_t jp_active_flags;

i_jp--;
Expand All @@ -212,13 +217,15 @@ static void flag_journey_patterns_for_stop(router_t *router, router_request_t *r
/* & journey_pattern_active_flags seems to provide about 14% increase
* in throughput
*/

if ((router->day_mask & jp_active_flags) &&
(req->mode & router->tdata->journey_patterns[journey_patterns[i_jp]].attributes) > 0) {
bitset_set (router->updated_journey_patterns, journey_patterns[i_jp]);
#ifdef RRRR_INFO
fprintf (stderr, " journey_pattenr running\n");
#endif
}
#endif
} while (i_jp);

#ifdef RRRR_FEATURE_REALTIME_EXPANDED
Expand Down Expand Up @@ -255,15 +262,27 @@ static void unflag_banned_journey_patterns (router_t *router, router_request_t *
}

static void initialize_banned_journey_patterns (router_t *router, router_request_t *req) {
uint32_t i_jp = router->tdata->n_journey_patterns;
uint8_t i_banned_jp = req->n_banned_journey_patterns;

bitset_black(router->banned_journey_patterns);

do {
calendar_t jp_active_flags;
i_jp--;
jp_active_flags = router->tdata->journey_pattern_active[i_jp];

if (! ( router->day_mask & jp_active_flags &&
req->mode & router->tdata->journey_patterns[i_jp].attributes)) {
/* Journey is invalid on selected days and/or attributes */
bitset_unset (router->banned_journey_patterns,i_jp);
}
} while (i_jp);

if (i_banned_jp == 0) return;
do {
i_banned_jp--;
bitset_unset (router->banned_journey_patterns,
req->banned_journey_patterns[i_banned_jp]);
bitset_unset (router->banned_journey_patterns,req->banned_journey_patterns[i_banned_jp]);
} while (i_banned_jp);
}
#else
Expand Down Expand Up @@ -424,9 +443,6 @@ void apply_transfers (router_t *router, router_request_t *req,
state_from->walk_from = stop_index_from;
/* assert (router->best_time[stop_index_from] == time_from); */
flag_journey_patterns_for_stop(router, req, stop_index_from);
#if RRRR_MAX_BANNED_JOURNEY_PATTERNS > 0
unflag_banned_journey_patterns(router, req);
#endif
}

if (transfer) {
Expand Down Expand Up @@ -484,13 +500,15 @@ void apply_transfers (router_t *router, router_request_t *req,
state_to->walk_from = stop_index_from;
router->best_time[stop_index_to] = time_to;
flag_journey_patterns_for_stop(router, req, stop_index_to);
#if RRRR_MAX_BANNED_JOURNEY_PATTERNS > 0
unflag_banned_journey_patterns(router, req);
#endif
}
}
}
}

#if RRRR_MAX_BANNED_JOURNEY_PATTERNS > 0
unflag_banned_journey_patterns(router, req);
#endif

/* Done with all transfers, reset stop-reached bits for the next round */
bitset_clear (router->updated_stops);
/* Check invariant: Every stop reached in this round should have a
Expand Down