(svn r25910) -Fix: Guard against empty FlowStats in a few more places.

This commit is contained in:
fonsinchen 2013-10-23 19:04:06 +00:00
parent b5dd83e84f
commit f528d2c592
2 changed files with 5 additions and 1 deletions

View File

@ -478,7 +478,7 @@ bool VehicleCargoList::Stage(bool accepted, StationID current_station, StationID
FlowStat new_shares = flow_it->second; FlowStat new_shares = flow_it->second;
new_shares.ChangeShare(current_station, INT_MIN); new_shares.ChangeShare(current_station, INT_MIN);
StationIDStack excluded = next_station; StationIDStack excluded = next_station;
while (!excluded.IsEmpty()) { while (!excluded.IsEmpty() && !new_shares.GetShares()->empty()) {
new_shares.ChangeShare(excluded.Pop(), INT_MIN); new_shares.ChangeShare(excluded.Pop(), INT_MIN);
} }
if (new_shares.GetShares()->empty()) { if (new_shares.GetShares()->empty()) {

View File

@ -4228,6 +4228,7 @@ void FlowStat::ChangeShare(StationID st, int flow)
*/ */
void FlowStat::RestrictShare(StationID st) void FlowStat::RestrictShare(StationID st)
{ {
assert(!this->shares.empty());
uint flow = 0; uint flow = 0;
uint last_share = 0; uint last_share = 0;
SharesMap new_shares; SharesMap new_shares;
@ -4248,6 +4249,7 @@ void FlowStat::RestrictShare(StationID st)
if (flow == 0) return; if (flow == 0) return;
new_shares[last_share + flow] = st; new_shares[last_share + flow] = st;
this->shares.swap(new_shares); this->shares.swap(new_shares);
assert(!this->shares.empty());
} }
/** /**
@ -4257,6 +4259,7 @@ void FlowStat::RestrictShare(StationID st)
*/ */
void FlowStat::ReleaseShare(StationID st) void FlowStat::ReleaseShare(StationID st)
{ {
assert(!this->shares.empty());
uint flow = 0; uint flow = 0;
uint next_share = 0; uint next_share = 0;
bool found = false; bool found = false;
@ -4283,6 +4286,7 @@ void FlowStat::ReleaseShare(StationID st)
} }
} }
this->shares.swap(new_shares); this->shares.swap(new_shares);
assert(!this->shares.empty());
} }
/** /**