/***********************************************************************
* Copyright (C) 2006 by René Bählkow                                   *
*                                                                      *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or    *
* (at your option) any later version.                                  *
*                                                                      *
* This program is distributed in the hope that it will be useful,      *
* but WITHOUT ANY WARRANTY; without even the implied warranty of       *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the        *
* GNU General Public License for more details.                         *
*                                                                      *
* You should have received a copy of the GNU General Public License    *
* along with this program; if not, write to the                        *
* Free Software Foundation, Inc.,                                      *
* 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.            *
***********************************************************************/

#ifndef PLOW_INI_PARSER_H
#define PLOW_INI_PARSER_H

#include "types.h"

using namespace std;

/**
 * @brief simple parser for INI like configuration files
 *
 * a configuration file is structured like this:
 * <pre>
 *   # comment
 *   [section]
 *   option  = value
 *   option2 = " a value containing spaces "
 * </pre>
 */
class IniParser
{
  public:
    /**
     * creates a new IniParser of a given configuration file
     *
     * @param iniFile the configuration file name
     *
     * @throws PlowException on any error
     */
    IniParser(const char *iniFile);

    /**
     * returns the value for the given @a option
     *
     * @param option the key you want to have the value for,
     *               key has to be something like "[section]option"
     *
     * @returns the value, or an empty string if @a option not found
     */
    string get(const char *option);

    /**
     * destroys the IniParser
     */
    ~IniParser();

  private:
    StrMap *mSM_options;
};

#endif
