aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Horn2006-09-30 18:57:36 +0000
committerMax Horn2006-09-30 18:57:36 +0000
commit5b22991f345cf4ea01144af8e23419de97f63f46 (patch)
treed2f95a78e5ac027a9940d12609fcbf80b3f1b0f0
parenta6c3257c5ebbdc81f721cb731b732cf02213f248 (diff)
downloadscummvm-rg350-5b22991f345cf4ea01144af8e23419de97f63f46.tar.gz
scummvm-rg350-5b22991f345cf4ea01144af8e23419de97f63f46.tar.bz2
scummvm-rg350-5b22991f345cf4ea01144af8e23419de97f63f46.zip
Get rid of CharStar_BaseNode and consorts -- using a simple String is more efficient, now that it has optimizations for small strings. Also made various related changes, turning char pointers into String objects in several spots
svn-id: r24044
-rw-r--r--gui/ThemeNew.cpp2
-rw-r--r--gui/eval.cpp10
-rw-r--r--gui/eval.h42
3 files changed, 16 insertions, 38 deletions
diff --git a/gui/ThemeNew.cpp b/gui/ThemeNew.cpp
index 3033f54e3b..cd03ded318 100644
--- a/gui/ThemeNew.cpp
+++ b/gui/ThemeNew.cpp
@@ -1265,7 +1265,7 @@ void ThemeNew::setupFont(const String &key, const String &name, FontStyle style)
_fonts[style] = FontMan.getFontByName(name);
if (!_fonts[style]) {
- Common::String temp(_evaluator->getStringVar(key.c_str()));
+ Common::String temp(_evaluator->getStringVar(key));
_fonts[style] = loadFont(temp.c_str());
if (!_fonts[style])
diff --git a/gui/eval.cpp b/gui/eval.cpp
index 89dd827f76..773770b5be 100644
--- a/gui/eval.cpp
+++ b/gui/eval.cpp
@@ -302,22 +302,22 @@ int Eval::getBuiltinVar(const char *s) {
return EVAL_UNDEF_VAR;
}
-int Eval::getVar_(const char *s, bool includeAliases) {
+int Eval::getVar_(const Common::String &s, bool includeAliases) {
int val;
- val = getBuiltinVar(s);
+ val = getBuiltinVar(s.c_str());
if (val != EVAL_UNDEF_VAR)
return val;
- const char *var = s;
+ const Common::String *var = &s;
if (includeAliases) {
AliasesMap::const_iterator itera = _aliases.find(s);
if (itera != _aliases.end())
- var = itera->_value.c_str();
+ var = &(itera->_value);
}
- VariablesMap::const_iterator iterv = _vars.find(var);
+ VariablesMap::const_iterator iterv = _vars.find(*var);
if (iterv != _vars.end())
return iterv->_value;
diff --git a/gui/eval.h b/gui/eval.h
index 570c4c96bd..7db048809b 100644
--- a/gui/eval.h
+++ b/gui/eval.h
@@ -48,20 +48,17 @@ public:
void setParent(const String &name);
- void setVar(const String &name, int val) { _vars[name.c_str()] = val; }
- void setStringVar(const String &name, const String &val) { _strings[name.c_str()] = val; }
- void setAlias(const char *name, const String &val) { _aliases[name] = val; }
+ void setVar(const String &name, int val) { _vars[name] = val; }
+ void setStringVar(const String &name, const String &val) { _strings[name] = val; }
+ void setAlias(const Common::String &name, const String &val) { _aliases[name] = val; }
- int getVar(const char *s) { return getVar_(s); }
- int getVar(const char *s, int def) {
+ int getVar(const Common::String &s) { return getVar_(s); }
+ int getVar(const Common::String &s, int def) {
int val = getVar_(s);
return (val == EVAL_UNDEF_VAR) ? def : val;
}
- int getVar(const String &s) { return getVar(s.c_str()); }
- int getVar(const String &s, int def) { return getVar(s.c_str(), def); }
-
- const String &getStringVar(const char *name) { return _strings[name]; }
+ const String &getStringVar(const Common::String &name) { return _strings[name]; }
uint getNumVars() { return _vars.size(); }
@@ -69,28 +66,9 @@ public:
char *lastToken() { return _token; }
-
- template <class Val>
- struct CharStar_BaseNode {
- char *_key;
- Val _value;
- CharStar_BaseNode() {assert(0);}
- CharStar_BaseNode(const char *key) { _key = (char *)malloc(strlen(key)+1); strcpy(_key, key); }
- ~CharStar_BaseNode() { free(_key); }
- };
-
- struct CharStar_EqualTo {
- bool operator()(const char *x, const char *y) const { return strcmp(x, y) == 0; }
- };
-
- struct CharStar_Hash {
- uint operator()(const char *x) const { return Common::hashit(x); }
- };
-
- //typedef HashMap<String, int> VariablesMap;
- typedef HashMap<const char *, int, CharStar_Hash, CharStar_EqualTo, CharStar_BaseNode<int> > VariablesMap;
- typedef HashMap<const char *, String, CharStar_Hash, CharStar_EqualTo, CharStar_BaseNode<String> > AliasesMap;
- typedef HashMap<const char *, String, CharStar_Hash, CharStar_EqualTo, CharStar_BaseNode<String> > StringsMap;
+ typedef HashMap<String, int, Common::CaseSensitiveString_Hash, Common::CaseSensitiveString_EqualTo> VariablesMap;
+ typedef HashMap<String, String, Common::CaseSensitiveString_Hash, Common::CaseSensitiveString_EqualTo> AliasesMap;
+ typedef HashMap<String, String, Common::CaseSensitiveString_Hash, Common::CaseSensitiveString_EqualTo> StringsMap;
private:
enum TokenTypes {
@@ -120,7 +98,7 @@ private:
void arith(char op, int *r, int *h);
void unary(char op, int *r);
void exprError(EvalErrors error);
- int getVar_(const char *s, bool includeAliases = true);
+ int getVar_(const Common::String &s, bool includeAliases = true);
int getBuiltinVar(const char *s);
void loadConstants();