12 #include "../stdafx.h"
13 #include "../linkgraph/linkgraph.h"
14 #include "../linkgraph/linkgraphjob.h"
15 #include "../linkgraph/linkgraphschedule.h"
16 #include "../settings_internal.h"
19 #include "../safeguards.h"
24 const SettingDesc *GetSettingDescription(uint index);
26 static uint16 _num_nodes;
34 static const SaveLoad link_graph_desc[] = {
40 return link_graph_desc;
55 static const char *prefix =
"linkgraph.";
58 if (saveloads.
Length() == 0) {
59 size_t offset_gamesettings = cpp_offsetof(
GameSettings, linkgraph);
60 size_t offset_component = cpp_offsetof(
LinkGraphJob, settings);
62 size_t prefixlen = strlen(prefix);
65 const SettingDesc *desc = GetSettingDescription(setting);
66 while (desc->
save.
cmd != SL_END) {
67 if (desc->
desc.
name != NULL && strncmp(desc->
desc.
name, prefix, prefixlen) == 0) {
69 char *&address =
reinterpret_cast<char *&
>(sl.
address);
70 address -= offset_gamesettings;
71 address += offset_component;
72 *(saveloads.
Append()) = sl;
74 desc = GetSettingDescription(++setting);
85 *(saveloads.
Append()) = job_desc[i++];
86 }
while (saveloads[saveloads.
Length() - 1].cmd != SL_END);
98 static const SaveLoad schedule_desc[] = {
103 return schedule_desc;
127 SLE_VAR(
Edge, last_unrestricted_update, SLE_INT32),
139 uint size = lg.
Size();
140 for (NodeID from = 0; from < size; ++from) {
145 for (NodeID to = 0; to < size; ++to) {
150 for (NodeID to = from; to != INVALID_NODE; to = lg.
edges[from][to].next_edge) {
164 _num_nodes = lgj->
Size();
175 _num_nodes = lg->
Size();
193 lg->
Init(_num_nodes);
234 FOR_ALL_LINK_GRAPHS(lg) {
235 for (NodeID node_id = 0; node_id < lg->
Size(); ++node_id) {
241 FOR_ALL_LINK_GRAPH_JOBS(lgj) {
243 for (NodeID node_id = 0; node_id < lg->
Size(); ++node_id) {
258 FOR_ALL_LINK_GRAPHS(lg) {
259 SlSetArrayIndex(lg->
index);
270 FOR_ALL_LINK_GRAPH_JOBS(lgj) {
271 SlSetArrayIndex(lgj->
index);
292 extern const ChunkHandler _linkgraph_chunk_handlers[] = {