mirror of https://github.com/OpenTTD/OpenTTD
Codechange: Use vectors instead of CallocT/free for cache checks. (#12619)
Vectors are reused for each vehicle chain to save on reallocations.pull/12622/head
parent
115ac2629b
commit
f629d3c921
|
@ -79,34 +79,29 @@ void CheckCaches()
|
||||||
rs->GetEntry(DIAGDIR_NW)->CheckIntegrity(rs);
|
rs->GetEntry(DIAGDIR_NW)->CheckIntegrity(rs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<NewGRFCache> grf_cache;
|
||||||
|
std::vector<VehicleCache> veh_cache;
|
||||||
|
std::vector<GroundVehicleCache> gro_cache;
|
||||||
|
std::vector<TrainCache> tra_cache;
|
||||||
|
|
||||||
for (Vehicle *v : Vehicle::Iterate()) {
|
for (Vehicle *v : Vehicle::Iterate()) {
|
||||||
if (v != v->First() || v->vehstatus & VS_CRASHED || !v->IsPrimaryVehicle()) continue;
|
if (v != v->First() || v->vehstatus & VS_CRASHED || !v->IsPrimaryVehicle()) continue;
|
||||||
|
|
||||||
uint length = 0;
|
|
||||||
for (const Vehicle *u = v; u != nullptr; u = u->Next()) length++;
|
|
||||||
|
|
||||||
NewGRFCache *grf_cache = CallocT<NewGRFCache>(length);
|
|
||||||
VehicleCache *veh_cache = CallocT<VehicleCache>(length);
|
|
||||||
GroundVehicleCache *gro_cache = CallocT<GroundVehicleCache>(length);
|
|
||||||
TrainCache *tra_cache = CallocT<TrainCache>(length);
|
|
||||||
|
|
||||||
length = 0;
|
|
||||||
for (const Vehicle *u = v; u != nullptr; u = u->Next()) {
|
for (const Vehicle *u = v; u != nullptr; u = u->Next()) {
|
||||||
FillNewGRFVehicleCache(u);
|
FillNewGRFVehicleCache(u);
|
||||||
grf_cache[length] = u->grf_cache;
|
grf_cache.emplace_back(u->grf_cache);
|
||||||
veh_cache[length] = u->vcache;
|
veh_cache.emplace_back(u->vcache);
|
||||||
switch (u->type) {
|
switch (u->type) {
|
||||||
case VEH_TRAIN:
|
case VEH_TRAIN:
|
||||||
gro_cache[length] = Train::From(u)->gcache;
|
gro_cache.emplace_back(Train::From(u)->gcache);
|
||||||
tra_cache[length] = Train::From(u)->tcache;
|
tra_cache.emplace_back(Train::From(u)->tcache);
|
||||||
break;
|
break;
|
||||||
case VEH_ROAD:
|
case VEH_ROAD:
|
||||||
gro_cache[length] = RoadVehicle::From(u)->gcache;
|
gro_cache.emplace_back(RoadVehicle::From(u)->gcache);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
length++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (v->type) {
|
switch (v->type) {
|
||||||
|
@ -117,7 +112,7 @@ void CheckCaches()
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
|
|
||||||
length = 0;
|
uint length = 0;
|
||||||
for (const Vehicle *u = v; u != nullptr; u = u->Next()) {
|
for (const Vehicle *u = v; u != nullptr; u = u->Next()) {
|
||||||
FillNewGRFVehicleCache(u);
|
FillNewGRFVehicleCache(u);
|
||||||
if (grf_cache[length] != u->grf_cache) {
|
if (grf_cache[length] != u->grf_cache) {
|
||||||
|
@ -146,10 +141,10 @@ void CheckCaches()
|
||||||
length++;
|
length++;
|
||||||
}
|
}
|
||||||
|
|
||||||
free(grf_cache);
|
grf_cache.clear();
|
||||||
free(veh_cache);
|
veh_cache.clear();
|
||||||
free(gro_cache);
|
gro_cache.clear();
|
||||||
free(tra_cache);
|
tra_cache.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check whether the caches are still valid */
|
/* Check whether the caches are still valid */
|
||||||
|
|
Loading…
Reference in New Issue