diff options
| -rw-r--r-- | gui/eval.cpp | 18 | ||||
| -rw-r--r-- | gui/eval.h | 17 | ||||
| -rw-r--r-- | gui/theme-config.cpp | 24 | 
3 files changed, 30 insertions, 29 deletions
| diff --git a/gui/eval.cpp b/gui/eval.cpp index 537d172c3a..0075796d83 100644 --- a/gui/eval.cpp +++ b/gui/eval.cpp @@ -288,11 +288,11 @@ int Eval::getVar_(const char *s, bool includeAliases) {  	if (val != EVAL_UNDEF_VAR)  		return val; -	String var = String(s); +	const char *var = s;  	if (includeAliases) { -		AliasesMap::const_iterator itera = _aliases.find(var); +		AliasesMap::const_iterator itera = _aliases.find(s);  		if (itera != _aliases.end()) -			var = itera->_value; +			var = itera->_value.c_str();  	}  	VariablesMap::const_iterator iterv = _vars.find(var); @@ -302,16 +302,12 @@ int Eval::getVar_(const char *s, bool includeAliases) {  	return EVAL_UNDEF_VAR;  } -void Eval::setAlias(const String §ion, const String name, const String value) { -	String var = String(&(name.c_str()[4])); - -	_aliases[var] = value; +void Eval::setAlias(const String §ion, const char *name, const String value) { +	_aliases[name + 4] = value;  } -void Eval::setVar(const String §ion, const String name, const String value) { -	String var = String(&(name.c_str()[4])); - -	_vars[var] = eval(value, section, name, 0); +void Eval::setVar(const String §ion, const char *name, const String value) { +	_vars[name + 4] = eval(value, section, name, 0);  }  void Eval::reset() { diff --git a/gui/eval.h b/gui/eval.h index 574dd8a936..c3da115c6d 100644 --- a/gui/eval.h +++ b/gui/eval.h @@ -55,13 +55,13 @@ public:  	~Eval();  	int eval(const String &input, const String §ion, const String &name, int startpos); -	void setAlias(const String §ion, const String name, const String value); -	void setVar(const String §ion, const String name, const String value); +	void setAlias(const String §ion, const char *name, const String value); +	void setVar(const String §ion, const char *name, const String value);  	void setParent(const String name); -	void setVar(const String name, int val) { _vars[name] = val; } -	void setAlias(const String name, const String val) { _aliases[name] = val; } +	void setVar(const char *name, int val) { _vars[name] = val; } +	void setAlias(const char *name, const String val) { _aliases[name] = val; }  	int getVar(String s) { return getVar_(s.c_str()); }  	int getVar(String s, int def) { @@ -73,8 +73,13 @@ public:  	void reset(); -	typedef HashMap<String, int> VariablesMap; -	typedef HashMap<String, String> AliasesMap; +	struct CharStar_EqualTo { +		bool operator()(const char *x, const char *y) const { return strcmp(x, y) == 0; } +	}; + +	//typedef HashMap<String, int> VariablesMap; +	typedef HashMap<const char *, int, Common::Hash<const char *>, CharStar_EqualTo> VariablesMap; +	typedef HashMap<const char *, String, Common::Hash<const char *>, CharStar_EqualTo> AliasesMap;  private:  	void getToken(); diff --git a/gui/theme-config.cpp b/gui/theme-config.cpp index baa44992fb..fbc0575f89 100644 --- a/gui/theme-config.cpp +++ b/gui/theme-config.cpp @@ -424,13 +424,13 @@ void Theme::processSingleLine(const String §ion, const String prefix, const  		to += postfixes[i];  		_evaluator->setAlias(selfpostfixes[i], to); -		_evaluator->setVar(to, EVAL_UNDEF_VAR); +		_evaluator->setVar(to.c_str(), EVAL_UNDEF_VAR);  	}  	for (i = 0; i < str.size(); i++) {  		if (isspace(str[i]) && level == 0) {  			value = _evaluator->eval(String(&(str.c_str()[start]), i - start), section, name + postfixes[npostfix], start); -			_evaluator->setVar(prefixedname + postfixes[npostfix++], value); +			_evaluator->setVar((prefixedname + postfixes[npostfix++]).c_str(), value);  			start = i + 1;  		}  		if (str[i] == '(') @@ -453,15 +453,15 @@ void Theme::processSingleLine(const String §ion, const String prefix, const  	// process VAR=VALUE construct  	if (npostfix == 0) -		_evaluator->setVar(name, value); +		_evaluator->setVar(name.c_str(), value);  	else -		_evaluator->setVar(prefixedname + postfixes[npostfix], value); +		_evaluator->setVar((prefixedname + postfixes[npostfix]).c_str(), value);  	// If we have all 4 parameters, set .x2 and .y2  	if (npostfix == 3) { -		_evaluator->setVar(prefixedname + ".x2",  +		_evaluator->setVar((prefixedname + ".x2").c_str(),   			_evaluator->getVar(prefixedname + ".x") + _evaluator->getVar(prefixedname + ".w")); -		_evaluator->setVar(prefixedname + ".y2",  +		_evaluator->setVar((prefixedname + ".y2").c_str(),   			_evaluator->getVar(prefixedname + ".y") + _evaluator->getVar(prefixedname + ".h"));  	} @@ -482,12 +482,12 @@ void Theme::processResSection(Common::ConfigFile &config, String name, bool skip  			continue;  		}  		if (iterk->key.hasPrefix("set_")) { -			_evaluator->setAlias(name, iterk->key, prefix + iterk->value); +			_evaluator->setAlias(name, iterk->key.c_str(), prefix + iterk->value);  			continue;  		}  		if (iterk->key.hasPrefix("def_")) {  			if (!skipDefs) -				_evaluator->setVar(name, prefix + iterk->key, iterk->value); +				_evaluator->setVar(name, (prefix + iterk->key).c_str(), iterk->value);  			continue;  		}  		if (iterk->key == "use") { @@ -529,16 +529,16 @@ void Theme::processResSection(Common::ConfigFile &config, String name, bool skip  }  void Theme::setSpecialAlias(const String alias, const String &name) { -	const char *postfixes[] = {"x", "y", "w", "h", "x2", "y2"}; +	const char *postfixes[] = {".x", ".y", ".w", ".h", ".x2", ".y2"};  	int i;  	for (i = 0; i < ARRAYSIZE(postfixes); i++) {  		String from, to; -		from = alias + "." + postfixes[i]; -		to = name + "." + postfixes[i]; +		from = alias + postfixes[i]; +		to = name + postfixes[i]; -		_evaluator->setAlias(from, to); +		_evaluator->setAlias(from.c_str(), to);  	}  } | 
