summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/language.h3
-rw-r--r--src/newgrf_text.cpp7
-rw-r--r--src/strings_func.h7
-rw-r--r--src/strings_type.h5
4 files changed, 13 insertions, 9 deletions
diff --git a/src/language.h b/src/language.h
index ea3069756..8e09599c8 100644
--- a/src/language.h
+++ b/src/language.h
@@ -16,13 +16,12 @@
#ifdef WITH_ICU_SORT
#include <unicode/coll.h>
#endif /* WITH_ICU_SORT */
+#include "strings_type.h"
static const uint8 CASE_GENDER_LEN = 16; ///< The (maximum) length of a case/gender string.
static const uint8 MAX_NUM_GENDERS = 8; ///< Maximum number of supported genders.
static const uint8 MAX_NUM_CASES = 16; ///< Maximum number of supported cases.
-static const uint TAB_SIZE_BITS = 11; ///< The number of bits used for the tab size.
-static const uint TAB_SIZE = 1 << TAB_SIZE_BITS; ///< The number of values in a tab.
static const uint TAB_COUNT_BITS = 5; ///< The number of bits used for the amount of tabs.
static const uint TAB_COUNT = 1 << TAB_COUNT_BITS; ///< The amount of tabs.
diff --git a/src/newgrf_text.cpp b/src/newgrf_text.cpp
index df00ef341..914d0ee1a 100644
--- a/src/newgrf_text.cpp
+++ b/src/newgrf_text.cpp
@@ -36,7 +36,6 @@
#include "safeguards.h"
#define GRFTAB 28
-#define TABSIZE 11
/**
* Explains the newgrf shift bit positioning.
@@ -159,7 +158,7 @@ struct GRFTextEntry {
static uint _num_grf_texts = 0;
-static GRFTextEntry _grf_text[(1 << TABSIZE) * 3];
+static GRFTextEntry _grf_text[TAB_SIZE * 3];
static byte _currentLangID = GRFLX_ENGLISH; ///< by default, english is used.
/**
@@ -696,7 +695,7 @@ StringID AddGRFString(uint32 grfid, uint16 stringid, byte langid_to_add, bool ne
grfmsg(3, "Added 0x%X: grfid %08X string 0x%X lang 0x%X string '%s'", id, grfid, stringid, newtext->langid, newtext->text);
- return (GRFTAB << TABSIZE) + id;
+ return MakeStringID(GRFTAB, 0) + id; // Id reaches across multiple tabs
}
/**
@@ -706,7 +705,7 @@ StringID GetGRFStringID(uint32 grfid, uint16 stringid)
{
for (uint id = 0; id < _num_grf_texts; id++) {
if (_grf_text[id].grfid == grfid && _grf_text[id].stringid == stringid) {
- return (GRFTAB << TABSIZE) + id;
+ return MakeStringID(GRFTAB, 0) + id; // Id reaches across multiple tabs
}
}
diff --git a/src/strings_func.h b/src/strings_func.h
index 5d69121e3..3e3aa4840 100644
--- a/src/strings_func.h
+++ b/src/strings_func.h
@@ -24,7 +24,7 @@
*/
static inline uint GetStringTab(StringID str)
{
- return GB(str, 11, 5);
+ return GB(str, TAB_SIZE_BITS, 5);
}
/**
@@ -34,7 +34,7 @@ static inline uint GetStringTab(StringID str)
*/
static inline uint GetStringIndex(StringID str)
{
- return GB(str, 0, 11);
+ return GB(str, 0, TAB_SIZE_BITS);
}
/**
@@ -45,7 +45,8 @@ static inline uint GetStringIndex(StringID str)
*/
static inline StringID MakeStringID(uint tab, uint index)
{
- return tab << 11 | index;
+ assert(index < TAB_SIZE);
+ return tab << TAB_SIZE_BITS | index;
}
class StringParameters {
diff --git a/src/strings_type.h b/src/strings_type.h
index c6eebd54d..780221d0a 100644
--- a/src/strings_type.h
+++ b/src/strings_type.h
@@ -26,6 +26,11 @@ enum TextDirection {
TD_RTL, ///< Text is written right-to-left by default
};
+/** Number of bits for the StringIndex within a StringTab */
+static const uint TAB_SIZE_BITS = 11;
+/** Number of strings per StringTab */
+static const uint TAB_SIZE = 1 << TAB_SIZE_BITS;
+
/** Special string constants */
enum SpecialStrings {