+++ /dev/null
-///////////////////////////////////////////////////////////////////////////
-//
-// Copyright 2011
-//
-// This file is part of starlight.
-//
-// starlight 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 3 of the License, or
-// (at your option) any later version.
-//
-// starlight 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 starlight. If not, see <http://www.gnu.org/licenses/>.
-//
-///////////////////////////////////////////////////////////////////////////
-//
-// File and Version Information:
-// $Rev:: $: revision of last commit
-// $Author:: $: author of last commit
-// $Date:: $: date of last commit
-//
-// Description:
-//
-//
-//
-///////////////////////////////////////////////////////////////////////////
-
-
-#ifndef INPUTPARSER_H
-#define INPUTPARSER_H
-
-#include <string>
-#include <typeinfo>
-#include <iostream>
-#include <map>
-
-#include <reportingUtils.h>
-
-class inputParser
-{
-public:
-
- /** Constructor */
- inputParser();
-
- /** Destructor */
- ~inputParser();
-
- /** Parse a file */
- int parseFile(std::string filename);
-
- /** Parse a file */
- int parseString(std::string str);
-
- /** Add parameter to pass */
- void addIntParameter(std::string name, int *var, bool required = true);
-
- /** Add parameter to pass */
- void addUintParameter(std::string name, unsigned int *var, bool required = true);
-
- /** Add parameter to pass */
- void addFloatParameter(std::string name, float *var, bool required = true);
-
- /** Add parameter to pass */
- void addDoubleParameter(std::string name, double *var, bool required = true);
-
- /** Add parameter to pass */
- void addBoolParameter(std::string name, bool *var, bool required = true);
-
- /** Add parameter to pass */
- void addStringParameter(std::string name, std::string *var, bool required = true);
-
- /** Print info */
- void printParameterInfo(std::ostream &out = std::cout);
-
- /** Validate */
- bool validateParameters(std::ostream &warnOut = std::cout, std::ostream &errOut = std::cerr);
-
- /** Add a parameter */
- template<typename S>
- inline void addParameter(S ¶m);
-
- /** Add a parameter */
- template<typename P>
- inline void addParameter(const std::string &name, P *varPtr, bool required = false);
-
-private:
-
- template <class T>
- class _parameter
- {
- public:
- _parameter(std::string name, T *val, bool required = true, bool found = false) : _name(name), _val(val), _required(required), _found(found){}
-
- bool operator==(const _parameter &rhs) const { return _name == rhs._name; }
-
- bool operator<(const _parameter &rhs) const { return _name.c_str()[0] < rhs._name.c_str()[0]; }
-
- void printParameterInfo(std::ostream &out = std::cout)
- {
- out << std::boolalpha << _name << "\t\t";
- if(_found)
- {
- out << *_val << std::endl;
- }
- else
- {
- out << "NOT FOUND" << std::endl;
- }
- out << std::noboolalpha;
- }
-
-
- std::string _name;
- T *_val;
- bool _required;
- bool _found;
- };
-
- std::map<std::string, _parameter<int> > _intParameters;
- std::map<std::string, _parameter<unsigned int> > _uintParameters;
- std::map<std::string, _parameter<float> > _floatParameters;
- std::map<std::string, _parameter<double> > _doubleParameters;
- std::map<std::string, _parameter<bool> > _boolParameters;
- std::map<std::string, _parameter<std::string> > _stringParameters;
-
-};
-
-template<typename S>
-void inputParser::addParameter(S& param)
-{
- addParameter(param.name(), param.ptr(), param.required());
-
-}
-
-template<typename P>
-void inputParser::addParameter(const std::string& name, P* /*varPtr*/, bool /*required*/)
-{
- printWarn << "Trying to add unknown parameter type with name: " << name;
-}
-
-
-#endif // INPUTPARSER_H