Skip to content

Commit

Permalink
Revert to old implementation for LanguageSpecifyString
Browse files Browse the repository at this point in the history
Much faster than regular expression parsing.

Simplified original code with some helper functions.

Optimization: Got rid of one string copy

Reduction in LanguageSpecifyString:
10.000 op cycles => 2.000 op cycles
  • Loading branch information
mertenpopp authored and WizzardMaker committed Oct 1, 2024
1 parent 185af82 commit 94cbca8
Showing 6 changed files with 142 additions and 172 deletions.
1 change: 0 additions & 1 deletion src/Global.cpp
Original file line number Diff line number Diff line change
@@ -41,7 +41,6 @@ TEAKRAND HeadlineRand;
//--------------------------------------------------------------------------------------------
// Die Registratur:
//--------------------------------------------------------------------------------------------
// CRegistration Registration;
SLONG MissionKeys[] = {142, 372, 814, 1042, 2077, 4525};
SLONG MissionKeys2[] = {111, 172, 472, 1099, 2048, 5055, 6789, 7007, 8192, 9092};
SLONG MissionKeys3[] = {298, 346, 532, 2098, 3331, 3333, 4001, 4098, 4800, 8099};
2 changes: 1 addition & 1 deletion src/Misc.cpp
Original file line number Diff line number Diff line change
@@ -627,7 +627,7 @@ SLONG CalculateFlightCostNoTank(SLONG VonCity, SLONG NachCity, SLONG Verbrauch,
void InitEinheiten(const CString &Filename) {
SLONG c = 0;

ETexte.Open(Filename, TEXTRES_CACHED);
ETexte.Open(Filename);

Einheiten.ReSize(14);

6 changes: 3 additions & 3 deletions src/Takeoff.cpp
Original file line number Diff line number Diff line change
@@ -563,15 +563,15 @@ void CTakeOffApp::InitInstance(int argc, char *argv[]) {
LOADING_TEXT("Chargement des textes (1/4)...")
else
LOADING_TEXT("Loading modded texts...");
ModdedTexte.Open(FullFilename("modded_ger.res", PatchPath), TEXTRES_CACHED);
ModdedTexte.Open(FullFilename("modded_ger.res", PatchPath));

if (gLanguage == LANGUAGE_N)
LOADING_TEXT("Dialoogteksten worden opgestart...")
else if (gLanguage == LANGUAGE_F)
LOADING_TEXT("Chargement des textes (2/4)...")
else
LOADING_TEXT("Loading dialogue texts...");
DialogTexte.Open(FullFilename("dlg_ger.res", MiscPath), TEXTRES_CACHED);
DialogTexte.Open(FullFilename("dlg_ger.res", MiscPath));
DialogTexte.SetOverrideFile(FullFilename("dlg_ger.patched.res", PatchPath));

if (gLanguage == LANGUAGE_N)
@@ -580,7 +580,7 @@ void CTakeOffApp::InitInstance(int argc, char *argv[]) {
LOADING_TEXT("Chargement des textes (3/4)...")
else
LOADING_TEXT("Loading miscellanous texts...");
StandardTexte.Open(FullFilename("std_ger.res", MiscPath), TEXTRES_CACHED);
StandardTexte.Open(FullFilename("std_ger.res", MiscPath));
StandardTexte.SetOverrideFile(FullFilename("std_ger.patched.res", PatchPath));

if (gLanguage == LANGUAGE_N)
27 changes: 4 additions & 23 deletions src/TeakLibW.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
#pragma once

#include <regex>
#include <vector>

extern void memswap(void *, void *, ULONG);
@@ -756,18 +755,14 @@ struct TEXTRES_CACHE_ENTRY {

// static_assert(sizeof(TEXTRES_CACHE_ENTRY) == 12, "TEXTRES_CACHE_ENTRY size check");

#define TEXTRES_CACHED (void *)1

class TEXTRES {
public:
TEXTRES();
TEXTRES(char const *, void *);
~TEXTRES(void);

void Open(char const *, void *);
BUFFER_V<char> &GetB(ULONG, ULONG);
char *FindP(ULONG, ULONG);
char *FindS(ULONG, ULONG);
void Open(char const *source);
char *FindTranslation(ULONG, ULONG);
char *GetP(ULONG, ULONG);
char *GetS(ULONG, ULONG);

@@ -777,10 +772,9 @@ class TEXTRES {

private:
char *FindOverridenS(ULONG, ULONG);
std::string FindLanguageInString(const char *Dst, const SLONG wantedLanguageIndex);
void LanguageSpecifyString(char *Dst);
void LanguageSpecifyString(char *Dst, bool fallback = false);

std::vector<std::regex> mLanguageTextPatterns;
CString ResultStr;

BUFFER_V<char> Path;
BUFFER_V<char> Strings;
@@ -791,19 +785,6 @@ class TEXTRES {

// static_assert(sizeof(TEXTRES) == 36, "TEXTRES size check");

class CRegistration {
public:
CRegistration(void);
CRegistration(CString const &, ULONG);
void ReSize(CString const &, ULONG);
CString GetDisplayString(void);
SLONG GetMode(void);
CString GetSomeString(char *);
ULONG CalcChecksum(CString);
SLONG IsMaster(void);
void CheckIfIsMaster(void);
};

#define VIDRAMBM (void *)1
#define SYSRAMBM (void *)2

Loading

0 comments on commit 94cbca8

Please sign in to comment.