diff --git a/src/newgrf_class.h b/src/newgrf_class.h --- a/src/newgrf_class.h +++ b/src/newgrf_class.h @@ -30,6 +30,8 @@ private: */ static NewGRFClass classes[Tmax]; + void ResetClass(); + /** Initialise the defaults. */ static void InsertDefaults(); diff --git a/src/newgrf_class_func.h b/src/newgrf_class_func.h --- a/src/newgrf_class_func.h +++ b/src/newgrf_class_func.h @@ -25,16 +25,22 @@ template NewGRFClass NewGRFClass::classes[Tmax]; +/** Reset the class, i.e. clear everything. */ +DEFINE_NEWGRF_CLASS_METHOD(void)::ResetClass() +{ + this->global_id = 0; + this->name = STR_EMPTY; + this->count = 0; + + free(this->spec); + this->spec = NULL; +} + /** Reset the classes, i.e. clear everything. */ DEFINE_NEWGRF_CLASS_METHOD(void)::Reset() { for (Tid i = (Tid)0; i < Tmax; i++) { - classes[i].global_id = 0; - classes[i].name = STR_EMPTY; - classes[i].count = 0; - - free(classes[i].spec); - classes[i].spec = NULL; + classes[i].ResetClass(); } InsertDefaults(); @@ -160,6 +166,7 @@ DEFINE_NEWGRF_CLASS_METHOD(const Tspec * /** Force instantiation of the methods so we don't get linker errors. */ #define INSTANTIATE_NEWGRF_CLASS_METHODS(name, Tspec, Tid, Tmax) \ + template void name::ResetClass(); \ template void name::Reset(); \ template Tid name::Allocate(uint32 global_id); \ template void name::Assign(Tspec *spec); \