summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/newgrf_class.h21
1 files changed, 14 insertions, 7 deletions
diff --git a/src/newgrf_class.h b/src/newgrf_class.h
index 95c589d17..a7b8099ad 100644
--- a/src/newgrf_class.h
+++ b/src/newgrf_class.h
@@ -19,18 +19,25 @@
*/
template <typename Tspec, typename Tid, Tid Tmax>
struct NewGRFClass {
- uint32 global_id; ///< Global ID for class, e.g. 'DFLT', 'WAYP', etc.
- StringID name; ///< Name of this class.
- uint count; ///< Number of stations in this class.
- Tspec **spec; ///< Array of station specifications.
-
- /** The actual classes. */
+private:
+ uint count; ///< Number of specs in this class.
+ Tspec **spec; ///< Array of specifications.
+
+ /**
+ * The actual classes.
+ * @note We store pointers to membes of this array in various places outside this class (e.g. to 'name' for GRF string resolving).
+ * Thus this must be a static array, and cannot be a self-resizing SmallVector or similar.
+ */
static NewGRFClass<Tspec, Tid, Tmax> classes[Tmax];
- static void Reset();
/** Initialise the defaults. */
static void InsertDefaults();
+public:
+ uint32 global_id; ///< Global ID for class, e.g. 'DFLT', 'WAYP', etc.
+ StringID name; ///< Name of this class.
+
+ static void Reset();
static Tid Allocate(uint32 global_id);
static void Assign(Tspec *spec);
static NewGRFClass *Get(Tid cls_id);