Changeset - r26805:f8660101f2c2
[Not reviewed]
master
0 2 0
Peter Nelson - 20 months ago 2023-01-21 16:05:28
peter1138@openttd.org
Codechange: Use vector for NewGRF spec overrides.

This replaces C-style memory management.
2 files changed with 13 insertions and 26 deletions:
0 comments (0 inline, 0 general)
src/newgrf_commons.cpp
Show inline comments
 
@@ -44,21 +44,10 @@ OverrideManagerBase::OverrideManagerBase
 
	max_new_entities = maximum;
 
	invalid_ID = invalid;
 

	
 
	mapping_ID = CallocT<EntityIDMapping>(max_new_entities);
 
	entity_overrides = MallocT<uint16>(max_offset);
 
	for (size_t i = 0; i < max_offset; i++) entity_overrides[i] = invalid;
 
	grfid_overrides = CallocT<uint32>(max_offset);
 
}
 

	
 
/**
 
 * Destructor of the generic class.
 
 * Frees allocated memory of constructor
 
 */
 
OverrideManagerBase::~OverrideManagerBase()
 
{
 
	free(mapping_ID);
 
	free(entity_overrides);
 
	free(grfid_overrides);
 
	this->mapping_ID.resize(this->max_new_entities);
 
	this->entity_overrides.resize(this->max_offset);
 
	std::fill(this->entity_overrides.begin(), this->entity_overrides.end(), this->invalid_ID);
 
	this->grfid_overrides.resize(this->max_offset);
 
}
 

	
 
/**
 
@@ -81,16 +70,14 @@ void OverrideManagerBase::Add(uint8 loca
 
/** Resets the mapping, which is used while initializing game */
 
void OverrideManagerBase::ResetMapping()
 
{
 
	memset(mapping_ID, 0, (max_new_entities - 1) * sizeof(EntityIDMapping));
 
	std::fill(this->mapping_ID.begin(), this->mapping_ID.end(), EntityIDMapping{});
 
}
 

	
 
/** Resets the override, which is used while initializing game */
 
void OverrideManagerBase::ResetOverride()
 
{
 
	for (uint16 i = 0; i < max_offset; i++) {
 
		entity_overrides[i] = invalid_ID;
 
		grfid_overrides[i] = 0;
 
	}
 
	std::fill(this->entity_overrides.begin(), this->entity_overrides.end(), this->invalid_ID);
 
	std::fill(this->grfid_overrides.begin(), this->grfid_overrides.end(), uint32());
 
}
 

	
 
/**
src/newgrf_commons.h
Show inline comments
 
@@ -191,8 +191,8 @@ struct EntityIDMapping {
 

	
 
class OverrideManagerBase {
 
protected:
 
	uint16 *entity_overrides;
 
	uint32 *grfid_overrides;
 
	std::vector<uint16> entity_overrides;
 
	std::vector<uint32> grfid_overrides;
 

	
 
	uint16 max_offset;       ///< what is the length of the original entity's array of specs
 
	uint16 max_new_entities; ///< what is the amount of entities, old and new summed
 
@@ -201,10 +201,10 @@ protected:
 
	virtual bool CheckValidNewID(uint16 testid) { return true; }
 

	
 
public:
 
	EntityIDMapping *mapping_ID; ///< mapping of ids from grf files.  Public out of convenience
 
	std::vector<EntityIDMapping> mapping_ID; ///< mapping of ids from grf files.  Public out of convenience
 

	
 
	OverrideManagerBase(uint16 offset, uint16 maximum, uint16 invalid);
 
	virtual ~OverrideManagerBase();
 
	virtual ~OverrideManagerBase() {}
 

	
 
	void ResetOverride();
 
	void ResetMapping();
 
@@ -267,7 +267,7 @@ public:
 
struct AirportTileSpec;
 
class AirportTileOverrideManager : public OverrideManagerBase {
 
protected:
 
	virtual bool CheckValidNewID(uint16 testid) { return testid != 0xFF; }
 
	virtual bool CheckValidNewID(uint16 testid) override { return testid != 0xFF; }
 
public:
 
	AirportTileOverrideManager(uint16 offset, uint16 maximum, uint16 invalid) :
 
			OverrideManagerBase(offset, maximum, invalid) {}
 
@@ -278,7 +278,7 @@ public:
 
struct ObjectSpec;
 
class ObjectOverrideManager : public OverrideManagerBase {
 
protected:
 
	virtual bool CheckValidNewID(uint16 testid) { return testid != 0xFF; }
 
	virtual bool CheckValidNewID(uint16 testid) override { return testid != 0xFF; }
 
public:
 
	ObjectOverrideManager(uint16 offset, uint16 maximum, uint16 invalid) :
 
			OverrideManagerBase(offset, maximum, invalid) {}
0 comments (0 inline, 0 general)