Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages  

OgreConfigFile.cpp

Go to the documentation of this file.
00001 /*
00002 -----------------------------------------------------------------------------
00003 This source file is part of OGRE
00004     (Object-oriented Graphics Rendering Engine)
00005 For the latest info, see http://www.ogre3d.org/
00006 
00007 Copyright © 2000-2002 The OGRE Team
00008 Also see acknowledgements in Readme.html
00009 
00010 This program is free software; you can redistribute it and/or modify it under
00011 the terms of the GNU Lesser General Public License as published by the Free Software
00012 Foundation; either version 2 of the License, or (at your option) any later
00013 version.
00014 
00015 This program is distributed in the hope that it will be useful, but WITHOUT
00016 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
00017 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
00018 
00019 You should have received a copy of the GNU Lesser General Public License along with
00020 this program; if not, write to the Free Software Foundation, Inc., 59 Temple
00021 Place - Suite 330, Boston, MA 02111-1307, USA, or go to
00022 http://www.gnu.org/copyleft/lesser.txt.
00023 -----------------------------------------------------------------------------
00024 */
00025 #include "OgreStableHeaders.h"
00026 #include "OgreConfigFile.h"
00027 
00028 #include "OgreException.h"
00029 
00030 #include <iostream>
00031 
00032 namespace Ogre {
00033 
00034     //-----------------------------------------------------------------------
00035     ConfigFile::ConfigFile()
00036     {
00037     }
00038     //-----------------------------------------------------------------------
00039     void ConfigFile::load(const String& filename, const String& separators, bool trimWhitespace)
00040     {
00041         /* Clear current settings map */
00042         mSettings.clear();
00043         
00044         /* Open the configuration file */
00045         std::ifstream fp(filename.c_str());
00046         if(!fp)
00047             Except(
00048                 Exception::ERR_FILE_NOT_FOUND, "'" + filename + "' file not found!", "ConfigFile::load" );
00049         
00050         /* Process the file line for line */
00051         String line, optName, optVal;
00052         while (std::getline(fp, line))
00053         {
00054             StringUtil::trim(line);
00055             /* Ignore comments & blanks */
00056             if (line.length() > 0 && line.at(0) != '#' && line.at(0) != '@')
00057             {
00058                 /* Find the first seperator character and split the string there */
00059                 int separator_pos = line.find_first_of(separators, 0);
00060                 if (separator_pos != std::string::npos)
00061                 {
00062                     optName = line.substr(0, separator_pos);
00063                     /* Find the first non-seperator character following the name */
00064                     int nonseparator_pos = line.find_first_not_of(separators, separator_pos);
00065                     /* ... and extract the value */
00066                     optVal = line.substr(nonseparator_pos);
00067                     if (trimWhitespace)
00068                     {
00069                         StringUtil::trim(optVal);
00070                         StringUtil::trim(optName);
00071                     }
00072                     mSettings.insert(std::multimap<String, String>::value_type(optName, optVal));
00073                 }
00074             }
00075         }
00076 
00077     }
00078     //-----------------------------------------------------------------------
00079     String ConfigFile::getSetting(const String& key) const
00080     {
00081         std::multimap<String, String>::const_iterator i;
00082 
00083         i = mSettings.find(key);
00084         if (i == mSettings.end())
00085         {
00086             return "";
00087         }
00088         else
00089         {
00090             return i->second;
00091         }
00092     }
00093     //-----------------------------------------------------------------------
00094     StringVector ConfigFile::getMultiSetting(const String& key) const
00095     {
00096         StringVector ret;
00097 
00098 
00099         std::multimap<String, String>::const_iterator i;
00100 
00101         i = mSettings.find(key);
00102         // Iterate over matches
00103         while (i != mSettings.end() && i->first == key)
00104         {
00105             ret.push_back(i->second);
00106             ++i;
00107         }
00108 
00109         return ret;
00110 
00111 
00112     }
00113     //-----------------------------------------------------------------------
00114     ConfigFile::SettingsIterator ConfigFile::getSettingsIterator(void)
00115     {
00116         return SettingsIterator(mSettings.begin(), mSettings.end());
00117     }
00118 
00119 }

Copyright © 2002-2003 by The OGRE Team
Last modified Sun Nov 28 19:48:18 2004