Main MRPT website > C++ reference
MRPT logo

CConfigFile.h

Go to the documentation of this file.
00001 /* +---------------------------------------------------------------------------+
00002    |          The Mobile Robot Programming Toolkit (MRPT) C++ library          |
00003    |                                                                           |
00004    |                   http://mrpt.sourceforge.net/                            |
00005    |                                                                           |
00006    |   Copyright (C) 2005-2011  University of Malaga                           |
00007    |                                                                           |
00008    |    This software was written by the Machine Perception and Intelligent    |
00009    |      Robotics Lab, University of Malaga (Spain).                          |
00010    |    Contact: Jose-Luis Blanco  <jlblanco@ctima.uma.es>                     |
00011    |                                                                           |
00012    |  This file is part of the MRPT project.                                   |
00013    |                                                                           |
00014    |     MRPT is free software: you can redistribute it and/or modify          |
00015    |     it under the terms of the GNU General Public License as published by  |
00016    |     the Free Software Foundation, either version 3 of the License, or     |
00017    |     (at your option) any later version.                                   |
00018    |                                                                           |
00019    |   MRPT is distributed in the hope that it will be useful,                 |
00020    |     but WITHOUT ANY WARRANTY; without even the implied warranty of        |
00021    |     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         |
00022    |     GNU General Public License for more details.                          |
00023    |                                                                           |
00024    |     You should have received a copy of the GNU General Public License     |
00025    |     along with MRPT.  If not, see <http://www.gnu.org/licenses/>.         |
00026    |                                                                           |
00027    +---------------------------------------------------------------------------+ */
00028 #ifndef  CConfigFile_H
00029 #define  CConfigFile_H
00030 
00031 #include <mrpt/utils/utils_defs.h>
00032 #include <mrpt/utils/CConfigFileBase.h>
00033 #include <mrpt/utils/safe_pointers.h>
00034 
00035 /*---------------------------------------------------------------
00036         Class
00037   ---------------------------------------------------------------*/
00038 namespace mrpt
00039 {
00040 namespace utils
00041 {
00042         /** This class allows loading and storing values and vectors of different types from ".ini" files easily.
00043           *  The contents of the file will be modified by "write" operations in memory, and will be saved back
00044           *   to the file at the destructor, and only if at least one write operation has been applied.
00045           *
00046           */
00047         class BASE_IMPEXP CConfigFile : public CConfigFileBase
00048         {
00049         private:
00050                 /** The name of the file
00051                   */
00052                 std::string             m_file;
00053 
00054                 /** The interface to the file:
00055                   */
00056                 void_ptr_noncopy m_ini;
00057 
00058                 /** If modified since load.
00059                   */
00060                 bool                    m_modified;
00061 
00062         protected:
00063                 /** A virtual method to write a generic string.
00064                   */
00065                 void  writeString(const std::string &section,const std::string &name, const std::string &str);
00066 
00067                 /** A virtual method to read a generic string.
00068          * \exception std::exception If the key name is not found and "failIfNotFound" is true. Otherwise the "defaultValue" is returned.
00069                  */
00070                 std::string  readString(
00071             const std::string &section,
00072             const std::string &name,
00073             const std::string &defaultStr,
00074             bool failIfNotFound = false) const;
00075 
00076         public:
00077                 /** Constructor that opens a configuration file. */
00078                 CConfigFile( const std::string &fileName );
00079 
00080                 /** Constructor, does not open any file. You should call "setFileName" before reading or writting or otherwise nothing will be read and write operations will be eventually lost.
00081                   * However, it's perfectly right to use this object without an associated file, in which case it will behave as an "in-memory" file.
00082                   */
00083                 CConfigFile();
00084 
00085         /** Associate this object with the given file, so future read/write operations will be applied to that file (it's synchronized at destruction).
00086           */
00087                 void setFileName(const std::string &fil_path);
00088 
00089         /** Dumps the changes to the physical configuration file now, not waiting until destruction. */
00090                 void writeNow();
00091 
00092         /** Returns the file currently open by this object.
00093           */
00094                 std::string getAssociatedFile() const { return m_file; }
00095 
00096                 /** Destructor
00097                   */
00098         virtual ~CConfigFile();
00099 
00100                 /** Returns a list with all the section names.
00101                   */
00102                 virtual void getAllSections( vector_string      &sections ) const;
00103 
00104                 /** Returs a list with all the keys into a section.
00105                   */
00106                 virtual void getAllKeys( const std::string section, vector_string       &keys ) const;
00107 
00108         }; // End of class def.
00109 
00110         } // End of namespace
00111 } // end of namespace
00112 #endif



Page generated by Doxygen 1.7.3 for MRPT 0.9.4 SVN: at Sat Mar 26 06:40:17 UTC 2011