mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-12 18:40:29 +00:00
(svn r24276) -Codechange: Enhance GRFFile with constructor and destructor.
This commit is contained in:
parent
e1617a3d10
commit
b8f6b300d6
@ -7898,12 +7898,7 @@ static void ResetNewGRF()
|
|||||||
{
|
{
|
||||||
const GRFFile * const *end = _grf_files.End();
|
const GRFFile * const *end = _grf_files.End();
|
||||||
for (GRFFile **file = _grf_files.Begin(); file != end; file++) {
|
for (GRFFile **file = _grf_files.Begin(); file != end; file++) {
|
||||||
GRFFile *f = *file;
|
delete *file;
|
||||||
free(f->filename);
|
|
||||||
free(f->cargo_list);
|
|
||||||
free(f->railtype_list);
|
|
||||||
delete [] f->language_map;
|
|
||||||
free(f);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_grf_files.Clear();
|
_grf_files.Clear();
|
||||||
@ -8069,39 +8064,52 @@ static void InitNewGRFFile(const GRFConfig *config)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
newfile = CallocT<GRFFile>(1);
|
newfile = new GRFFile(config);
|
||||||
|
*_grf_files.Append() = _cur.grffile = newfile;
|
||||||
|
}
|
||||||
|
|
||||||
newfile->filename = strdup(config->filename);
|
/**
|
||||||
newfile->grfid = config->ident.grfid;
|
* Constructor for GRFFile
|
||||||
|
* @param config GRFConfig to copy name, grfid and parameters from.
|
||||||
|
*/
|
||||||
|
GRFFile::GRFFile(const GRFConfig *config)
|
||||||
|
{
|
||||||
|
this->filename = strdup(config->filename);
|
||||||
|
this->grfid = config->ident.grfid;
|
||||||
|
|
||||||
/* Initialise local settings to defaults */
|
/* Initialise local settings to defaults */
|
||||||
newfile->traininfo_vehicle_pitch = 0;
|
this->traininfo_vehicle_pitch = 0;
|
||||||
newfile->traininfo_vehicle_width = TRAININFO_DEFAULT_VEHICLE_WIDTH;
|
this->traininfo_vehicle_width = TRAININFO_DEFAULT_VEHICLE_WIDTH;
|
||||||
|
|
||||||
/* Mark price_base_multipliers as 'not set' */
|
/* Mark price_base_multipliers as 'not set' */
|
||||||
for (Price i = PR_BEGIN; i < PR_END; i++) {
|
for (Price i = PR_BEGIN; i < PR_END; i++) {
|
||||||
newfile->price_base_multipliers[i] = INVALID_PRICE_MODIFIER;
|
this->price_base_multipliers[i] = INVALID_PRICE_MODIFIER;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Initialise rail type map with default rail types */
|
/* Initialise rail type map with default rail types */
|
||||||
memset(newfile->railtype_map, INVALID_RAILTYPE, sizeof newfile->railtype_map);
|
memset(this->railtype_map, INVALID_RAILTYPE, sizeof(this->railtype_map));
|
||||||
newfile->railtype_map[0] = RAILTYPE_RAIL;
|
this->railtype_map[0] = RAILTYPE_RAIL;
|
||||||
newfile->railtype_map[1] = RAILTYPE_ELECTRIC;
|
this->railtype_map[1] = RAILTYPE_ELECTRIC;
|
||||||
newfile->railtype_map[2] = RAILTYPE_MONO;
|
this->railtype_map[2] = RAILTYPE_MONO;
|
||||||
newfile->railtype_map[3] = RAILTYPE_MAGLEV;
|
this->railtype_map[3] = RAILTYPE_MAGLEV;
|
||||||
|
|
||||||
/* Copy the initial parameter list
|
/* Copy the initial parameter list
|
||||||
* 'Uninitialised' parameters are zeroed as that is their default value when dynamically creating them. */
|
* 'Uninitialised' parameters are zeroed as that is their default value when dynamically creating them. */
|
||||||
assert_compile(lengthof(newfile->param) == lengthof(config->param) && lengthof(config->param) == 0x80);
|
assert_compile(lengthof(this->param) == lengthof(config->param) && lengthof(this->param) == 0x80);
|
||||||
memset(newfile->param, 0, sizeof(newfile->param));
|
|
||||||
|
|
||||||
assert(config->num_params <= lengthof(config->param));
|
assert(config->num_params <= lengthof(config->param));
|
||||||
newfile->param_end = config->num_params;
|
this->param_end = config->num_params;
|
||||||
if (newfile->param_end > 0) {
|
if (this->param_end > 0) {
|
||||||
MemCpyT(newfile->param, config->param, newfile->param_end);
|
MemCpyT(this->param, config->param, this->param_end);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
*_grf_files.Append() = _cur.grffile = newfile;
|
GRFFile::~GRFFile()
|
||||||
|
{
|
||||||
|
free(this->filename);
|
||||||
|
free(this->cargo_list);
|
||||||
|
free(this->railtype_list);
|
||||||
|
delete[] this->language_map;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
#include "rail_type.h"
|
#include "rail_type.h"
|
||||||
#include "fileio_type.h"
|
#include "fileio_type.h"
|
||||||
#include "core/bitmath_func.hpp"
|
#include "core/bitmath_func.hpp"
|
||||||
|
#include "core/alloc_type.hpp"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* List of different canal 'features'.
|
* List of different canal 'features'.
|
||||||
@ -98,7 +99,7 @@ struct GRFLabel {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/** Dynamic data of a loaded NewGRF */
|
/** Dynamic data of a loaded NewGRF */
|
||||||
struct GRFFile {
|
struct GRFFile : ZeroedMemoryAllocator {
|
||||||
char *filename;
|
char *filename;
|
||||||
bool is_ottdfile;
|
bool is_ottdfile;
|
||||||
uint32 grfid;
|
uint32 grfid;
|
||||||
@ -138,6 +139,9 @@ struct GRFFile {
|
|||||||
uint32 grf_features; ///< Bitset of GrfSpecFeature the grf uses
|
uint32 grf_features; ///< Bitset of GrfSpecFeature the grf uses
|
||||||
PriceMultipliers price_base_multipliers; ///< Price base multipliers as set by the grf.
|
PriceMultipliers price_base_multipliers; ///< Price base multipliers as set by the grf.
|
||||||
|
|
||||||
|
GRFFile(const struct GRFConfig *config);
|
||||||
|
~GRFFile();
|
||||||
|
|
||||||
/** Get GRF Parameter with range checking */
|
/** Get GRF Parameter with range checking */
|
||||||
uint32 GetParam(uint number) const
|
uint32 GetParam(uint number) const
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user