#include "api_action.h"
#include "actions.h"
#include "parser_state.h"
SGCONF::PARSER_STATE SGCONF::API_ACTION::Parse(int argc, char ** argv, void * /*data*/)
{
PARSER_STATE state(false, argc, argv);
if (!m_argument.empty())
{
if (argc == 0 ||
argv == NULL ||
*argv == NULL)
throw ERROR("Missing argument.");
m_argument = *argv;
--state.argc;
++state.argv;
}
state = m_suboptions.Parse(state.argc, state.argv, &m_params);
m_commands.Add(m_funPtr, m_argument, m_params);
return state;
}
SGCONF::API_ACTION::API_ACTION(COMMANDS & commands,
const std::string & paramDescription,
bool needArgument,
const std::vector & params,
API_FUNCTION funPtr)
: m_commands(commands),
m_description(paramDescription),
m_argument(needArgument ? "1" : ""), // Hack
m_funPtr(funPtr)
{
std::vector::const_iterator it(params.begin());
while (it != params.end())
{
m_suboptions.Add(it->name, MakeKVAction(it->name, it->shortDescr), it->longDescr);
++it;
}
}