Core: DCL for INI fixes

git-svn-id: svn://ultimatepp.org/upp/trunk@5232 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
cxl 2012-07-24 08:05:23 +00:00
parent ff2736709f
commit e3aa869ee7
2 changed files with 15 additions and 21 deletions

View file

@ -103,11 +103,13 @@ String GetIniKey(const char *id)
return GetIniKey(id, String());
}
String IniString::Load()
static StaticMutex strMtx;
IniString::operator String()
{
String x;
{
Mutex::Lock __(sMtx);
Mutex::Lock __(strMtx);
String& s = (*ref_fn)();
if(IniChanged__(version)) {
s = TrimBoth(GetIniKey(id));
@ -120,17 +122,9 @@ String IniString::Load()
return x;
}
IniString::operator String()
{
String h = (*ref_fn)();
if(IniChanged__(version))
return Load();
return h;
}
String IniString::operator=(const String& s)
{
Mutex::Lock __(sMtx);
Mutex::Lock __(strMtx);
(*ref_fn)() = s;
IniSet__(version);
return s;
@ -186,8 +180,10 @@ int IniInt::Load() {
int IniInt::operator=(int b) {
Mutex::Lock __(sMtx);
BarrierWrite(version, -1);
value = b;
IniSet__(version);
return value = b;
return b;
}
String IniInt::ToString() const
@ -195,9 +191,11 @@ String IniInt::ToString() const
return AsString((int)const_cast<IniInt&>(*this));
}
int64 IniInt64::Load()
static StaticMutex si64Mtx;
IniInt64::operator int64()
{
Mutex::Lock __(sMtx);
Mutex::Lock __(si64Mtx);
if(IniChanged__(version)) {
value = ReadIniInt(id);
if(IsNull(value))
@ -209,11 +207,9 @@ int64 IniInt64::Load()
int64 IniInt64::operator=(int64 b)
{
Mutex::Lock __(sMtx);
BarrierWrite(version, -1);
Mutex::Lock __(si64Mtx);
value = b;
IniSet__(version);
return value = b;
return b;
}
String IniInt64::ToString() const

View file

@ -42,7 +42,6 @@ struct IniString {
String (*def)();
String& (*ref_fn)();
int version;
String Load();
// "public:"
operator String();
@ -70,10 +69,9 @@ struct IniInt64 {
int64 (*def)();
int version;
int64 value;
int64 Load();
// "public:"
operator int64() { int64 h = value; if(IniChanged__(version)) return Load(); return h; }
operator int64();
int64 operator=(int64 b);
String ToString() const;
};