X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/1b2ab8e6d556a8ed30d4feadc72263b3f4c86665..46b0747592074017ff0ea4b33d4a7194235886e5:/projects/sgconf/actions.h?ds=inline diff --git a/projects/sgconf/actions.h b/projects/sgconf/actions.h deleted file mode 100644 index c88de14d..00000000 --- a/projects/sgconf/actions.h +++ /dev/null @@ -1,163 +0,0 @@ -/* - * 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 - */ - -/* - * Author : Maxim Mamontov - */ - -#ifndef __STG_SGCONF_ACTIONS_H__ -#define __STG_SGCONF_ACTIONS_H__ - -#include "action.h" -#include "options.h" -#include "parser_state.h" - -#include "stg/common.h" -#include "stg/resetable.h" - -#include - -namespace SGCONF -{ - -typedef void (* FUNC0)(); - -template -class FUNC0_ACTION : public ACTION -{ - public: - FUNC0_ACTION(const F & func) : m_func(func) {} - - virtual ACTION * Clone() const { return new FUNC0_ACTION(*this); } - - virtual std::string ParamDescription() const { return ""; } - virtual std::string DefaultDescription() const { return ""; } - virtual OPTION_BLOCK & Suboptions() { return m_suboptions; } - virtual PARSER_STATE Parse(int argc, char ** argv) - { - m_func(); - return PARSER_STATE(true, argc, argv); - } - - private: - F m_func; - OPTION_BLOCK m_suboptions; -}; - -template -inline -FUNC0_ACTION * MakeFunc0Action(F func) -{ -return new FUNC0_ACTION(func); -} - -template -class PARAM_ACTION : public ACTION -{ - public: - PARAM_ACTION(RESETABLE & param, - const T & defaultValue, - const std::string & paramDescription) - : m_param(param), - m_defaltValue(defaultValue), - m_description(paramDescription), - m_hasDefault(true) - {} - PARAM_ACTION(RESETABLE & param, - const std::string & paramDescription) - : m_param(param), - m_description(paramDescription), - m_hasDefault(false) - {} - - virtual ACTION * Clone() const { return new PARAM_ACTION(*this); } - - virtual std::string ParamDescription() const { return m_description; } - virtual std::string DefaultDescription() const; - virtual OPTION_BLOCK & Suboptions() { return m_suboptions; } - virtual PARSER_STATE Parse(int argc, char ** argv); - - private: - RESETABLE & m_param; - T m_defaltValue; - std::string m_description; - bool m_hasDefault; - OPTION_BLOCK m_suboptions; -}; - -template -inline -std::string PARAM_ACTION::DefaultDescription() const -{ -return m_hasDefault ? " (default: '" + x2str(m_defaltValue) + "')" - : ""; -} - -template <> -inline -std::string PARAM_ACTION::DefaultDescription() const -{ -return m_hasDefault ? " (default: '" + m_defaltValue + "')" - : ""; -} - -template -inline -PARSER_STATE PARAM_ACTION::Parse(int argc, char ** argv) -{ -if (argc == 0 || - argv == NULL || - *argv == NULL) - throw ERROR("Missing argument."); -T value; -if (str2x(*argv, value)) - throw ERROR(std::string("Bad argument: '") + *argv + "'"); -m_param = value; -return PARSER_STATE(false, --argc, ++argv); -} - -template <> -inline -PARSER_STATE PARAM_ACTION::Parse(int argc, char ** argv) -{ -if (argc == 0 || - argv == NULL || - *argv == NULL) - throw ERROR("Missing argument."); -m_param = *argv; -return PARSER_STATE(false, --argc, ++argv); -} - -template -inline -PARAM_ACTION * MakeParamAction(RESETABLE & param, - const T & defaultValue, - const std::string & paramDescription) -{ -return new PARAM_ACTION(param, defaultValue, paramDescription); -} - -template -inline -PARAM_ACTION * MakeParamAction(RESETABLE & param, - const std::string & paramDescription) -{ -return new PARAM_ACTION(param, paramDescription); -} - -} // namespace SGCONF - -#endif