1
0
mirror of https://github.com/benhoyt/inih.git synced 2025-02-01 15:02:53 +08:00

Added GetBoolean() to C++ API.

Used std::transform() to convert strings to lower instead of for loop.
This commit is contained in:
benhoyt@gmail.com 2011-06-24 18:23:13 +00:00
parent d83f6c327e
commit 9ec69b2a1d
3 changed files with 24 additions and 5 deletions

View File

@ -1,5 +1,6 @@
// Read an INI file into easy-to-access name/value pairs.
#include <algorithm>
#include <cctype>
#include <cstdlib>
#include "../ini.h"
@ -33,12 +34,24 @@ long INIReader::GetInteger(string section, string name, long default_value)
return end > value ? n : default_value;
}
bool INIReader::GetBoolean(string section, string name, bool default_value)
{
string valstr = Get(section, name, "");
// Convert to lower case to make string comparisons case-insensitive
std::transform(valstr.begin(), valstr.end(), valstr.begin(), ::tolower);
if (valstr == "true" || valstr == "yes" || valstr == "on" || valstr == "1")
return true;
else if (valstr == "false" || valstr == "no" || valstr == "off" || valstr == "0")
return false;
else
return default_value;
}
string INIReader::MakeKey(string section, string name)
{
string key = section + "." + name;
// Convert to lower case to make lookups case-insensitive
for (int i = 0; i < key.length(); i++)
key[i] = tolower(key[i]);
// Convert to lower case to make section/name lookups case-insensitive
std::transform(key.begin(), key.end(), key.begin(), ::tolower);
return key;
}

View File

@ -29,9 +29,14 @@ public:
std::string default_value);
// Get an integer (long) value from INI file, returning default_value if
// not found.
// not found or not a valid integer (decimal "1234", "-1234", or hex "0x4d2").
long GetInteger(std::string section, std::string name, long default_value);
// Get a boolean value from INI file, returning default_value if not found or if
// not a valid true/false value. Valid true values are "true", "yes", "on", "1",
// and valid false values are "false", "no", "off", "0" (not case sensitive).
bool GetBoolean(std::string section, std::string name, bool default_value);
private:
int _error;
std::map<std::string, std::string> _values;

View File

@ -14,6 +14,7 @@ int main()
std::cout << "Config loaded from 'test.ini': version="
<< reader.GetInteger("protocol", "version", -1) << ", name="
<< reader.Get("user", "name", "UNKNOWN") << ", email="
<< reader.Get("user", "email", "UNKNOWN") << "\n";
<< reader.Get("user", "email", "UNKNOWN") << ", active="
<< reader.GetBoolean("user", "active", true) << "\n";
return 0;
}