summaryrefslogtreecommitdiff
path: root/Source/Plugins/InputPluginCommon/Src/IniFile.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Plugins/InputPluginCommon/Src/IniFile.cpp')
-rw-r--r--Source/Plugins/InputPluginCommon/Src/IniFile.cpp156
1 files changed, 0 insertions, 156 deletions
diff --git a/Source/Plugins/InputPluginCommon/Src/IniFile.cpp b/Source/Plugins/InputPluginCommon/Src/IniFile.cpp
deleted file mode 100644
index 0f10b25452..0000000000
--- a/Source/Plugins/InputPluginCommon/Src/IniFile.cpp
+++ /dev/null
@@ -1,156 +0,0 @@
-
-#include "IniFile.h"
-
-//
-// TrimChars
-//
-// trim whitespace, or any, chars from both ends
-//
-template <typename S>
-std::string TrimChars( const std::string& str, const S space )
-{
- const size_t start = str.find_first_not_of( space );
-
- if ( str.npos == start )
- return "";
-
- return str.substr( start, str.find_last_not_of( space ) - start + 1 );
-}
-
-//
-// IniSection :: Set
-//
-// set key's value if it doesn't match the default
-// otherwise remove the key from the section if it exists
-//
-void IniSection::Set( const std::string& key, const std::string& val, const std::string& def )
-{
- if ( val != def )
- operator[](key) = val;
- else
- {
- iterator f = find(key);
- if ( f != end() )
- erase( f );
- }
-}
-
-//
-// IniSection :: Get
-//
-// return a key's value if it exists
-// otherwise return the default
-//
-std::string IniSection::Get( const std::string& key, const std::string& def )
-{
- const const_iterator f = find(key);
- if ( f != end() )
- if ( false == f->second.empty() )
- return f->second;
- return def;
-}
-
-//
-// IniFile :: Save
-//
-// save a file
-//
-void IniFile::Save( std::ostream& file )
-{
- const_iterator i = begin(),
- e = end();
- for ( ; i != e; ++i )
- {
- // skip a line at new sections
- file << "\n[" << i->first << "]\n";
- Section::const_iterator si = i->second.begin(),
- se = i->second.end();
- for ( ; si != se; ++si )
- {
- file << si->first << " = ";
- // if value has quotes or whitespace, surround it with quotes
- if (si->second.find_first_of("\"\t ") != std::string::npos)
- file << '"' << si->second << '"';
- else
- file << si->second;
- file << '\n';
- }
- }
-}
-
-//
-// IniFile :: Load
-//
-// load a file
-//
-void IniFile::Load( std::istream& file )
-{
- const char* const space = "\t\r ";
- std::string line;
- // start off with an empty section
- Section* section = &(*this)[""];
- while ( std::getline( file, line ).good() ) // read a line
- {
- line = TrimChars(line,space);
- if ( line.size() )
- {
- switch ( line[0] )
- {
- // comment
- case '#' :
- case ';' :
- break;
- // section
- case '[' :
- // kinda odd trimming
- section = &(*this)[ TrimChars(line,"][\t\r ") ];
- break;
- // key/value
- default :
- {
- std::istringstream ss(line);
- std::string key; std::getline( ss, key, '=' );
- std::string val; std::getline( ss, val );
- val = TrimChars(val,space);
- // handle quote surrounded values
- if (val.length() > 1)
- if ('"' == val[0])
- val = val.substr(1, val.length()-2);
-
- (*section)[ TrimChars(key,space) ] = val;
- break;
- }
- }
- }
- }
- Clean();
-}
-
-//
-// IniFile :: Clean
-//
-// remove empty key/values and sections
-// after trying to access ini sections/values, they are automatically allocated
-// this deletes the empty stuff
-//
-void IniFile::Clean()
-{
- iterator i = begin(),
- e = end();
- for ( ; i != e; )
- {
- Section::iterator si = i->second.begin(),
- se = i->second.end();
- for ( ; si != se; )
- {
- if ( si->second.empty() )
- i->second.erase( si++ );
- else
- ++si;
- }
- if ( i->second.empty() )
- erase( i++ );
- else
- ++i;
- }
-}