[Scummvm-cvs-logs] CVS: scummvm/common config-manager.cpp,1.12,1.13 config-manager.h,1.7,1.8

Max Horn fingolfin at users.sourceforge.net
Mon Nov 10 15:18:13 CET 2003


Update of /cvsroot/scummvm/scummvm/common
In directory sc8-pr-cvs1:/tmp/cvs-serv12469/common

Modified Files:
	config-manager.cpp config-manager.h 
Log Message:
fix for bug #833537 (Config manager saves "save_slot")

Index: config-manager.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/common/config-manager.cpp,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- config-manager.cpp	8 Nov 2003 22:43:45 -0000	1.12
+++ config-manager.cpp	10 Nov 2003 23:17:11 -0000	1.13
@@ -56,6 +56,7 @@
 namespace Common {
 
 const String ConfigManager::kApplicationDomain("scummvm");
+const String ConfigManager::kTransientDomain("__TRANSIENT");
 
 const String trueStr("true");
 const String falseStr("false");
@@ -206,13 +207,13 @@
 
 bool ConfigManager::hasKey(const String &key) const {
 	// Search the domains in the following order:
-	// 1) Run time domain
+	// 1) Transient domain
 	// 2) Active game domain (if any)
 	// 3) All global domains
 	// The defaults domain is explicitly *not* checked.
 	
-//	if (_transientDomain.contain(key))
-//		return true;
+	if (_transientDomain.contains(key))
+		return true;
 
 	if (!_activeDomain.isEmpty() && _gameDomains[_activeDomain].contains(key))
 		return true;
@@ -229,6 +230,8 @@
 bool ConfigManager::hasKey(const String &key, const String &dom) const {
 	assert(!dom.isEmpty());
 
+	if (dom == kTransientDomain)
+		return _transientDomain.contains(key);
 	if (_gameDomains.contains(dom))
 		return _gameDomains[dom].contains(key);
 	if (_globalDomains.contains(dom))
@@ -240,7 +243,9 @@
 void ConfigManager::removeKey(const String &key, const String &dom) {
 	assert(!dom.isEmpty());
 
-	if (_gameDomains.contains(dom))
+	if (dom == kTransientDomain)
+		_transientDomain.remove(key);
+	else if (_gameDomains.contains(dom))
 		_gameDomains[dom].remove(key);
 	else if (_globalDomains.contains(dom))
 		_globalDomains[dom].remove(key);
@@ -252,21 +257,21 @@
 #pragma mark -
 
 
-const String & ConfigManager::get(const String &key, const String &dom) const {
+const String & ConfigManager::get(const String &key, const String &domain) const {
 	// Search the domains in the following order:
-	// 1) Run time domain
+	// 1) Transient domain
 	// 2) Active game domain (if any)
 	// 3) All global domains
 	// 4) The defaults 
 
-//	if (_transientDomain.contain(key))
-//		return true;
 
-	if (!dom.isEmpty()) {
-		if (_gameDomains.contains(dom) && _gameDomains[dom].contains(key))
-			return _gameDomains[dom][key];
-	} else if (!_activeDomain.isEmpty() && _gameDomains[_activeDomain].contains(key))
-		return _gameDomains[_activeDomain][key];
+	if ((domain.isEmpty() || domain == kTransientDomain) && _transientDomain.contains(key))
+		return _transientDomain[key];
+
+	const String &dom = domain.isEmpty() ? _activeDomain : domain;
+
+	if (!dom.isEmpty() && _gameDomains.contains(dom) && _gameDomains[dom].contains(key))
+		return _gameDomains[dom][key];
 
 	DomainMap::ConstIterator iter;
 	for (iter = _globalDomains.begin(); iter != _globalDomains.end(); ++iter) {
@@ -296,15 +301,13 @@
 
 
 void ConfigManager::set(const String &key, const String &value) {
-#if 0
-	// TODO ?!?
-//	_transientDomain[key] = value;
-#else
+	// Remove the transient domain value
+	_transientDomain.remove(key);
+
 	if (_activeDomain.isEmpty())
 		_globalDomains[kApplicationDomain][key] = value;
 	else
 		_gameDomains[_activeDomain][key] = value;
-#endif
 }
 
 void ConfigManager::set(const String &key, const String &value, const String &dom) {
@@ -313,10 +316,19 @@
 		return;
 	}
 
-	if (_globalDomains.contains(dom))
-		_globalDomains[dom][key] = value;
-	else
-		_gameDomains[dom][key] = value;
+	if (dom == kTransientDomain)
+		_transientDomain[key] = value;
+	else {
+		if (_globalDomains.contains(dom)) {
+			_globalDomains[dom][key] = value;
+			if (_activeDomain.isEmpty() || !_gameDomains[_activeDomain].contains(key))
+				_transientDomain.remove(key);
+		} else {
+			_gameDomains[dom][key] = value;
+			if (dom == _activeDomain)
+				_transientDomain.remove(key);
+		}
+	}
 }
 
 void ConfigManager::set(const String &key, const char *value, const String &dom) {

Index: config-manager.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/common/config-manager.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- config-manager.h	7 Nov 2003 16:54:58 -0000	1.7
+++ config-manager.h	10 Nov 2003 23:17:11 -0000	1.8
@@ -58,6 +58,9 @@
 	/** The name of the application domain (normally 'scummvm'). */
 	static const String kApplicationDomain;
 
+	/** The transient (pseudo) domain. */
+	static const String kTransientDomain;
+
 	bool				hasKey(const String &key) const;
 	bool				hasKey(const String &key, const String &dom) const;
 
@@ -104,7 +107,7 @@
 	void			loadFile(const String &filename);
 	void			writeDomain(FILE *file, const String &name, const Domain &domain);
 	
-//	Domain			_transientDomain;
+	Domain			_transientDomain;
 	DomainMap		_gameDomains;
 	DomainMap		_globalDomains;
 	Domain			_defaultsDomain;





More information about the Scummvm-git-logs mailing list