Change: Use bitmap for free unit ID generation. (#12165)

This improves performance of finding the next free unit number for a vehicle.

Based loosely on pool's used slot bitmap.
This commit is contained in:
Peter Nelson
2024-02-25 12:36:13 +00:00
committed by GitHub
parent 8afef45d4e
commit 56cf89d189
7 changed files with 68 additions and 56 deletions

View File

@@ -1178,7 +1178,7 @@ static void NormaliseTrainHead(Train *head)
/* If we don't have a unit number yet, set one. */
if (head->unitnumber != 0) return;
head->unitnumber = GetFreeUnitNumber(VEH_TRAIN);
head->unitnumber = Company::Get(head->owner)->freeunits[head->type].UseID(GetFreeUnitNumber(VEH_TRAIN));
}
/**
@@ -1336,6 +1336,7 @@ CommandCost CmdMoveRailVehicle(DoCommandFlag flags, VehicleID src_veh, VehicleID
}
/* Remove stuff not valid anymore for non-front engines. */
DeleteVehicleOrders(src);
Company::Get(src->owner)->freeunits[src->type].ReleaseID(src->unitnumber);
src->unitnumber = 0;
src->name.clear();
}