1
0

IniFile: Split SetValue() into AddValue() and SetValue().

Each function does what one would assume - AddValue adds a new value, SetValue overwrites existing value (creates a new one if not exists, if instructed to do so).
This commit is contained in:
madmaxoft 2014-01-11 16:44:28 +01:00
parent 37025fca77
commit a332a5dc73
2 changed files with 78 additions and 41 deletions

View File

@ -344,47 +344,79 @@ AString cIniFile::GetValueName(const AString & keyname, const int valueID) const
bool cIniFile::SetValue(const int keyID, const int valueID, const AString & value) void cIniFile::AddValue(const AString & a_KeyName, const AString & a_ValueName, const AString & a_Value)
{ {
if ((keyID < (int)keys.size()) && (valueID < (int)keys[keyID].names.size())) int keyID = FindKey(a_KeyName);
if (keyID == noID)
{ {
keys[keyID].values[valueID] = value; keyID = int(AddKeyName(a_KeyName));
} }
return false;
keys[keyID].names.push_back(a_ValueName);
keys[keyID].values.push_back(a_Value);
} }
bool cIniFile::SetValue(const AString & keyname, const AString & valuename, const AString & value, bool const create) void cIniFile::AddValueI(const AString & a_KeyName, const AString & a_ValueName, const int a_Value)
{ {
int keyID = FindKey(keyname); AddValue(a_KeyName, a_ValueName, Printf("%d", a_Value));
}
void cIniFile::AddValueF(const AString & a_KeyName, const AString & a_ValueName, const double a_Value)
{
AddValue(a_KeyName, a_ValueName, Printf("%f", a_Value));
}
bool cIniFile::SetValue(const int keyID, const int valueID, const AString & value)
{
if (((size_t)keyID >= keys.size()) || ((size_t)valueID >= keys[keyID].names.size()))
{
return false;
}
keys[keyID].values[valueID] = value;
return true;
}
bool cIniFile::SetValue(const AString & a_KeyName, const AString & a_ValueName, const AString & a_Value, const bool a_CreateIfNotExists)
{
int keyID = FindKey(a_KeyName);
if (keyID == noID) if (keyID == noID)
{ {
if (create) if (!a_CreateIfNotExists)
{
keyID = int(AddKeyName(keyname));
}
else
{ {
return false; return false;
} }
keyID = AddKeyName(a_KeyName);
} }
int valueID = FindValue(int(keyID), valuename); int valueID = FindValue(keyID, a_ValueName);
if (valueID == noID) if (valueID == noID)
{ {
if (!create) if (!a_CreateIfNotExists)
{ {
return false; return false;
} }
keys[keyID].names.resize(keys[keyID].names.size() + 1, valuename); keys[keyID].names.push_back(a_ValueName);
keys[keyID].values.resize(keys[keyID].values.size() + 1, value); keys[keyID].values.push_back(a_Value);
} }
else else
{ {
keys[keyID].values[valueID] = value; keys[keyID].values[valueID] = a_Value;
} }
return true; return true;
@ -394,37 +426,32 @@ bool cIniFile::SetValue(const AString & keyname, const AString & valuename, cons
bool cIniFile::SetValueI(const AString & keyname, const AString & valuename, const int value, bool const create) bool cIniFile::SetValueI(const AString & a_KeyName, const AString & a_ValueName, const int a_Value, const bool a_CreateIfNotExists)
{ {
AString Data; return SetValue(a_KeyName, a_ValueName, Printf("%d", a_Value), a_CreateIfNotExists);
Printf(Data, "%d", value);
return SetValue(keyname, valuename, Data, create);
} }
bool cIniFile::SetValueF(const AString & keyname, const AString & valuename, double const value, bool const create) bool cIniFile::SetValueF(const AString & a_KeyName, const AString & a_ValueName, double const a_Value, const bool a_CreateIfNotExists)
{ {
AString Data; return SetValue(a_KeyName, a_ValueName, Printf("%f", a_Value), a_CreateIfNotExists);
Printf(Data, "%f", value);
return SetValue(keyname, valuename, Data, create);
} }
bool cIniFile::SetValueV(const AString & keyname, const AString & valuename, char * format, ...) bool cIniFile::SetValueV(const AString & a_KeyName, const AString & a_ValueName, const char * a_Format, ...)
{ {
va_list args; va_list args;
va_start(args, format); va_start(args, a_Format);
AString Data; AString Data;
AppendVPrintf(Data, format, args); AppendVPrintf(Data, a_Format, args);
va_end(args); va_end(args);
return SetValue(keyname, valuename, Data); return SetValue(a_KeyName, a_ValueName, Data);
} }

View File

@ -35,7 +35,7 @@
class cIniFile class cIniFile
{ {
private: private:
bool m_IsCaseInsensitive; bool m_IsCaseInsensitive;
struct key struct key
{ {
@ -122,22 +122,32 @@ public:
return (GetValueSetI(keyname, valuename, defValue ? 1 : 0) != 0); return (GetValueSetI(keyname, valuename, defValue ? 1 : 0) != 0);
} }
// Sets value of [keyname] valuename =. // Adds a new value to the specified key.
// Specify the optional paramter as false (0) if you do not want it to create // If a value of the same name already exists, creates another one (non-standard INI file)
// the key if it doesn't exist. Returns true if data entered, false otherwise. void AddValue (const AString & a_KeyName, const AString & a_ValueName, const AString & a_Value);
// Overloaded to accept string, int, and double. void AddValueI(const AString & a_KeyName, const AString & a_ValueName, const int a_Value);
bool SetValue( const int keyID, const int valueID, const AString & value); void AddValueB(const AString & a_KeyName, const AString & a_ValueName, const bool a_Value)
bool SetValue( const AString & keyname, const AString & valuename, const AString & value, const bool create = true);
bool SetValueI( const AString & keyname, const AString & valuename, const int value, const bool create = true);
bool SetValueB( const AString & keyname, const AString & valuename, const bool value, const bool create = true)
{ {
return SetValueI( keyname, valuename, int(value), create); return AddValueI(a_KeyName, a_ValueName, a_Value ? 1 : 0);
} }
bool SetValueF( const AString & keyname, const AString & valuename, const double value, const bool create = true); void AddValueF(const AString & a_KeyName, const AString & a_ValueName, const double a_Value);
// Overwrites the value of [keyname].valuename
// Specify the optional parameter as false (0) if you do not want the value created if it doesn't exist.
// Returns true if value set, false otherwise.
// Overloaded to accept string, int, and double.
bool SetValue (const int keyID, const int valueID, const AString & value);
bool SetValue (const AString & a_KeyName, const AString & a_ValueName, const AString & a_Value, const bool a_CreateIfNotExists = true);
bool SetValueI(const AString & a_KeyName, const AString & a_ValueName, const int a_Value, const bool a_CreateIfNotExists = true);
bool SetValueB(const AString & a_KeyName, const AString & a_ValueName, const bool a_Value, const bool a_CreateIfNotExists = true)
{
return SetValueI(a_KeyName, a_ValueName, int(a_Value), a_CreateIfNotExists);
}
bool SetValueF(const AString & a_KeyName, const AString & a_ValueName, const double a_Value, const bool a_CreateIfNotExists = true);
// tolua_end // tolua_end
bool SetValueV( const AString & keyname, const AString & valuename, char *format, ...); bool SetValueV( const AString & a_KeyName, const AString & a_ValueName, const char * a_Format, ...);
// tolua_begin // tolua_begin