added missing directory to lms7002m
This commit is contained in:
+130
@@ -0,0 +1,130 @@
|
||||
#include <iostream>
|
||||
#include <cstring>
|
||||
#include <stdint.h>
|
||||
#include "../INI.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
void centerString(string str); //Printing to console
|
||||
std::string getStringFromFile(const std::string& path); //Source for data loading from memory.
|
||||
|
||||
int main()
|
||||
{
|
||||
///Declare
|
||||
typedef INI<> ini_t; //Makes things shorter/easier to write <Section, Key, Value>
|
||||
//or
|
||||
//typedef INI<string, string, string> ini_t; //Equivelant to previous line when wide characters are disabled
|
||||
ini_t ini("file.ini", true); //File to open/default save filename. The constuctor is set to parse by default, unless specified as false
|
||||
|
||||
///Manipulate and access contents
|
||||
centerString("########## Access & Manipulate Contents ##########");
|
||||
|
||||
//Common usage
|
||||
ini.create("Section 1");
|
||||
ini.create("Section 2");
|
||||
ini.get("Key1", "DefaultValue");
|
||||
ini.select("Section 1");
|
||||
ini.set("Key2", "Value");
|
||||
ini.save(); //Save contents to file, optional filename parameter available
|
||||
ini.clear(); //Clear INI contents from memory
|
||||
|
||||
//Extended usage
|
||||
ini["Section Name"]["Key"] = "Value"; //You are not required to create a section first
|
||||
|
||||
ini.create("Section1"); //Also selects as current section
|
||||
ini.create("Section2"); //Current
|
||||
|
||||
ini.set("Key1", "Value1"); //Added pair under section "Section2"
|
||||
|
||||
ini.select("Section1"); //Current
|
||||
cout << ini.get("Key1", "-1") << endl; //Returns "-1" as no key exists, no default will return NULL for data type, eg int() is 0
|
||||
|
||||
ini.select("Section2");
|
||||
ini.set("Key1", "1.123");
|
||||
cout << ini.get("Key1", -1.0) << endl; //Return value as double
|
||||
ini.set(123, 123); //Will convert to provided INI data type for key/value, in this case string for both
|
||||
|
||||
ini.save();
|
||||
ini.clear();
|
||||
ini.parse(); //Parses file into objects in memory
|
||||
|
||||
cout << ini["Section2"]["Key1"] << endl; //Returns "Value1", slightly more overhead involved seeking section, avoid using excessively
|
||||
|
||||
///Iterate through sections and keys for both C++11 and C++98
|
||||
centerString("########## Iterate Contents ##########");
|
||||
|
||||
#ifdef FINI_CPP11
|
||||
for(auto i: ini.sections)
|
||||
{
|
||||
cout << "[" << i.first << "]" << endl;
|
||||
|
||||
//for(auto j = i.second->begin(); j != i.second->end(); j++)
|
||||
for(auto j: *i.second)
|
||||
{
|
||||
cout << " " << j.first << "=" << j.second << endl;
|
||||
}
|
||||
}
|
||||
#else
|
||||
for(ini_t::sectionsit_t i = ini.sections.begin(); i != ini.sections.end(); i++)
|
||||
{
|
||||
//Section name as ini_t::section_t
|
||||
cout << i->first << endl;
|
||||
|
||||
if (i->second->size() == 0) //No keys/values in section, skip to next
|
||||
continue;
|
||||
|
||||
for(ini_t::keysit_t j = i->second->begin(); j != i->second->end(); j++)
|
||||
{
|
||||
//Name as ini_t::key_t & Value as ini_t::key_t
|
||||
cout << " " << j->first << "=" << j->second << endl;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
///Example with different data types
|
||||
typedef INI <unsigned char, string, float> ini_int_t; //Makes things shorter/easier to write <Section, Key, Value>
|
||||
ini_int_t ini_int("file_ints.ini", false); //File to open/default save filename. The constuctor is set to parse by default, unless specified as false
|
||||
for(int i = 1; i <= 200; i++)
|
||||
{
|
||||
ini_int.create(i); //Section
|
||||
ini_int.set("Key", i / 2.f);
|
||||
}
|
||||
|
||||
ini_int.save();
|
||||
|
||||
///Wide char support example (please define FINI_WIDE_SUPPORT in project)
|
||||
/*
|
||||
ini_t ini_w("file.ini", true);
|
||||
wcout << ini_w[L"Section2"][L"Key1"] << endl;
|
||||
*/
|
||||
|
||||
///Load from memory
|
||||
std::string str = getStringFromFile("config/test.ini"); //Allows us to tap into a source for the purpose of this example
|
||||
|
||||
ini_t ini_mem((void*)str.c_str(), str.size(), true); //This is the line which parses data from memory
|
||||
|
||||
///Merge contents and keep values
|
||||
ini_t inid("file.ini", true);
|
||||
ini_t inis("merge.ini", true);
|
||||
inid.merge(inis, true);
|
||||
inid.save("merged.ini");
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
void centerString(string str)
|
||||
{
|
||||
const char* s = str.c_str();
|
||||
int l = strlen(s);
|
||||
int pos = (int)((80 - l) / 2);
|
||||
for(int i = 0; i < pos; i++)
|
||||
cout << " ";
|
||||
cout << s << endl;
|
||||
}
|
||||
|
||||
std::string getStringFromFile(const std::string& path) {
|
||||
std::ostringstream buf;
|
||||
std::ifstream input (path.c_str());
|
||||
buf << input.rdbuf();
|
||||
return buf.str();
|
||||
}
|
||||
Reference in New Issue
Block a user