| // Read an INI file into easy-to-access name/value pairs. |
| |
| #include <cctype> |
| #include "../ini.h" |
| #include "INIReader.h" |
| |
| using std::string; |
| |
| INIReader::INIReader(string filename) |
| { |
| _error = ini_parse(filename.c_str(), ValueHandler, this); |
| } |
| |
| int INIReader::ParseError() |
| { |
| return _error; |
| } |
| |
| string INIReader::Get(string section, string name, string default_value) |
| { |
| string key = MakeKey(section, name); |
| return _values.count(key) ? _values[key] : default_value; |
| } |
| |
| long INIReader::GetInteger(string section, string name, long default_value) |
| { |
| const char* value = Get(section, name, "").c_str(); |
| char* end; |
| // This parses "1234" (decimal) and also "0x4D2" (hex) |
| long n = strtol(value, &end, 0); |
| return end > value ? n : 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]); |
| return key; |
| } |
| |
| int INIReader::ValueHandler(void* user, const char* section, const char* name, |
| const char* value) |
| { |
| INIReader* reader = (INIReader*)user; |
| reader->_values[MakeKey(section, name)] = value; |
| return 1; |
| } |