Mercurial > hg > openttd
changeset 19375:c890215c5f1f draft
(svn r24276) -Codechange: Enhance GRFFile with constructor and destructor.
author | frosch <frosch@openttd.org> |
---|---|
date | Fri, 25 May 2012 20:54:54 +0000 |
parents | 770689bd7730 |
children | 091acbb3fc45 |
files | src/newgrf.cpp src/newgrf.h |
diffstat | 2 files changed, 39 insertions(+), 27 deletions(-) [+] |
line wrap: on
line diff
--- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -7898,12 +7898,7 @@ { const GRFFile * const *end = _grf_files.End(); for (GRFFile **file = _grf_files.Begin(); file != end; file++) { - GRFFile *f = *file; - free(f->filename); - free(f->cargo_list); - free(f->railtype_list); - delete [] f->language_map; - free(f); + delete *file; } _grf_files.Clear(); @@ -8069,39 +8064,52 @@ return; } - newfile = CallocT<GRFFile>(1); - - newfile->filename = strdup(config->filename); - newfile->grfid = config->ident.grfid; + newfile = new GRFFile(config); + *_grf_files.Append() = _cur.grffile = newfile; +} + +/** + * 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 */ - newfile->traininfo_vehicle_pitch = 0; - newfile->traininfo_vehicle_width = TRAININFO_DEFAULT_VEHICLE_WIDTH; + this->traininfo_vehicle_pitch = 0; + this->traininfo_vehicle_width = TRAININFO_DEFAULT_VEHICLE_WIDTH; /* Mark price_base_multipliers as 'not set' */ 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 */ - memset(newfile->railtype_map, INVALID_RAILTYPE, sizeof newfile->railtype_map); - newfile->railtype_map[0] = RAILTYPE_RAIL; - newfile->railtype_map[1] = RAILTYPE_ELECTRIC; - newfile->railtype_map[2] = RAILTYPE_MONO; - newfile->railtype_map[3] = RAILTYPE_MAGLEV; + memset(this->railtype_map, INVALID_RAILTYPE, sizeof(this->railtype_map)); + this->railtype_map[0] = RAILTYPE_RAIL; + this->railtype_map[1] = RAILTYPE_ELECTRIC; + this->railtype_map[2] = RAILTYPE_MONO; + this->railtype_map[3] = RAILTYPE_MAGLEV; /* Copy the initial parameter list * '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); - memset(newfile->param, 0, sizeof(newfile->param)); + assert_compile(lengthof(this->param) == lengthof(config->param) && lengthof(this->param) == 0x80); assert(config->num_params <= lengthof(config->param)); - newfile->param_end = config->num_params; - if (newfile->param_end > 0) { - MemCpyT(newfile->param, config->param, newfile->param_end); - } - - *_grf_files.Append() = _cur.grffile = newfile; + this->param_end = config->num_params; + if (this->param_end > 0) { + MemCpyT(this->param, config->param, this->param_end); + } +} + +GRFFile::~GRFFile() +{ + free(this->filename); + free(this->cargo_list); + free(this->railtype_list); + delete[] this->language_map; }
--- a/src/newgrf.h +++ b/src/newgrf.h @@ -16,6 +16,7 @@ #include "rail_type.h" #include "fileio_type.h" #include "core/bitmath_func.hpp" +#include "core/alloc_type.hpp" /** * List of different canal 'features'. @@ -98,7 +99,7 @@ }; /** Dynamic data of a loaded NewGRF */ -struct GRFFile { +struct GRFFile : ZeroedMemoryAllocator { char *filename; bool is_ottdfile; uint32 grfid; @@ -138,6 +139,9 @@ uint32 grf_features; ///< Bitset of GrfSpecFeature the grf uses PriceMultipliers price_base_multipliers; ///< Price base multipliers as set by the grf. + GRFFile(const struct GRFConfig *config); + ~GRFFile(); + /** Get GRF Parameter with range checking */ uint32 GetParam(uint number) const {