Provide complete occurance info (callbacks)

This commit is contained in:
Martchus 2016-07-04 23:18:49 +02:00
parent 03094a1f61
commit d749ba7cc2
3 changed files with 9 additions and 7 deletions

View File

@ -980,7 +980,7 @@ void ArgumentParser::invokeCallbacks(const ArgumentVector &args)
// invoke the callback for each occurance of the argument
if(arg->m_callbackFunction) {
for(const auto &occurance : arg->m_occurances) {
arg->m_callbackFunction(occurance.values);
arg->m_callbackFunction(occurance);
}
}
// invoke the callbacks for sub arguments recursively
@ -1000,7 +1000,7 @@ void ArgumentParser::invokeCallbacks(const ArgumentVector &args)
HelpArgument::HelpArgument(ArgumentParser &parser) :
Argument("help", 'h', "shows this information")
{
setCallback([&parser] (const std::vector<const char *> &) {
setCallback([&parser] (const ArgumentOccurance &) {
CMD_UTILS_START_CONSOLE;
parser.printHelp(cout);
});

View File

@ -96,7 +96,7 @@ class LIB_EXPORT Argument
friend class ArgumentParser;
public:
typedef std::function <void (const std::vector<const char *> &)> CallbackFunction;
typedef std::function <void (const ArgumentOccurance &)> CallbackFunction;
Argument(const char *name, char abbreviation = '\0', const char *description = nullptr, const char *example = nullptr);
~Argument();

View File

@ -299,10 +299,12 @@ void ArgumentParserTests::testCallbacks()
ArgumentParser parser;
Argument callbackArg("with-callback", 't', "callback test");
callbackArg.setRequiredValueCount(2);
callbackArg.setCallback([] (const vector<const char *> &values) {
CPPUNIT_ASSERT(values.size() == 2);
CPPUNIT_ASSERT(!strcmp(values[0], "val1"));
CPPUNIT_ASSERT(!strcmp(values[1], "val2"));
callbackArg.setCallback([] (const ArgumentOccurance &occurance) {
CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(0), occurance.index);
CPPUNIT_ASSERT(occurance.path.empty());
CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), occurance.values.size());
CPPUNIT_ASSERT(!strcmp(occurance.values[0], "val1"));
CPPUNIT_ASSERT(!strcmp(occurance.values[1], "val2"));
throw 42;
});
Argument noCallbackArg("no-callback", 'l', "callback test");