/** * Load all link graph jobs. */ static void Load_LGRJ() { int index; while ((index = SlIterateArray()) != -1) { if (!LinkGraphJob::CanAllocateItem()) { /* Impossible as they have been present in previous game. */ NOT_REACHED(); } LinkGraphJob *lgj = new (index) LinkGraphJob(); SlObject(lgj, GetLinkGraphJobDesc()); LinkGraph &lg = const_cast<LinkGraph &>(lgj->Graph()); SlObject(&lg, GetLinkGraphDesc()); lg.Init(_num_nodes); SaveLoad_LinkGraph(lg); } }
/** * Spawn the threads for running link graph calculations. * Has to be done after loading as the cargo classes might have changed. */ void AfterLoadLinkGraphs() { if (IsSavegameVersionBefore(191)) { LinkGraph *lg; FOR_ALL_LINK_GRAPHS(lg) { for (NodeID node_id = 0; node_id < lg->Size(); ++node_id) { (*lg)[node_id].UpdateLocation(Station::Get((*lg)[node_id].Station())->xy); } } LinkGraphJob *lgj; FOR_ALL_LINK_GRAPH_JOBS(lgj) { lg = &(const_cast<LinkGraph &>(lgj->Graph())); for (NodeID node_id = 0; node_id < lg->Size(); ++node_id) { (*lg)[node_id].UpdateLocation(Station::Get((*lg)[node_id].Station())->xy); } } }