[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