1
0
Fork 0

(svn r25359) -Codechange: schedule jobs when tracking capacities of links

release/1.4
fonsinchen 2013-06-09 13:02:40 +00:00
parent 3d0a0e8e48
commit 5c8ff0a251
2 changed files with 6 additions and 0 deletions

View File

@ -25,6 +25,7 @@
#include "industry.h" #include "industry.h"
#include "core/random_func.hpp" #include "core/random_func.hpp"
#include "linkgraph/linkgraph.h" #include "linkgraph/linkgraph.h"
#include "linkgraph/linkgraphschedule.h"
#include "table/strings.h" #include "table/strings.h"
@ -94,6 +95,7 @@ Station::~Station()
if (lg != NULL) { if (lg != NULL) {
lg->RemoveNode(this->goods[c].node); lg->RemoveNode(this->goods[c].node);
if (lg->Size() == 0) { if (lg->Size() == 0) {
LinkGraphSchedule::Instance()->Unqueue(lg);
delete lg; delete lg;
} }
} }

View File

@ -3397,6 +3397,7 @@ void IncreaseStats(Station *st, CargoID cargo, StationID next_station_id, uint c
if (ge2.link_graph == INVALID_LINK_GRAPH) { if (ge2.link_graph == INVALID_LINK_GRAPH) {
if (LinkGraph::CanAllocateItem()) { if (LinkGraph::CanAllocateItem()) {
lg = new LinkGraph(cargo); lg = new LinkGraph(cargo);
LinkGraphSchedule::Instance()->Queue(lg);
ge2.link_graph = lg->index; ge2.link_graph = lg->index;
ge2.node = lg->AddNode(st2); ge2.node = lg->AddNode(st2);
} else { } else {
@ -3418,9 +3419,11 @@ void IncreaseStats(Station *st, CargoID cargo, StationID next_station_id, uint c
if (ge1.link_graph != ge2.link_graph) { if (ge1.link_graph != ge2.link_graph) {
LinkGraph *lg2 = LinkGraph::Get(ge2.link_graph); LinkGraph *lg2 = LinkGraph::Get(ge2.link_graph);
if (lg->Size() < lg2->Size()) { if (lg->Size() < lg2->Size()) {
LinkGraphSchedule::Instance()->Unqueue(lg);
lg2->Merge(lg); // Updates GoodsEntries of lg lg2->Merge(lg); // Updates GoodsEntries of lg
lg = lg2; lg = lg2;
} else { } else {
LinkGraphSchedule::Instance()->Unqueue(lg2);
lg->Merge(lg2); // Updates GoodsEntries of lg2 lg->Merge(lg2); // Updates GoodsEntries of lg2
} }
} }
@ -3541,6 +3544,7 @@ static uint UpdateStationWaiting(Station *st, CargoID type, uint amount, SourceT
if (ge.link_graph == INVALID_LINK_GRAPH) { if (ge.link_graph == INVALID_LINK_GRAPH) {
if (LinkGraph::CanAllocateItem()) { if (LinkGraph::CanAllocateItem()) {
lg = new LinkGraph(type); lg = new LinkGraph(type);
LinkGraphSchedule::Instance()->Queue(lg);
ge.link_graph = lg->index; ge.link_graph = lg->index;
ge.node = lg->AddNode(st); ge.node = lg->AddNode(st);
} else { } else {