# HG changeset patch # User František Kučera # Date 1547826476 -3600 # Node ID 0a297eb46ba1a726a8fc0d99246791b5af2c8fb7 # Parent f12594938a0351faa7b43d4e3652f5972c671a12 requested field's options as an ordered multi-map diff -r f12594938a03 -r 0a297eb46ba1 src/CLIParser.h --- a/src/CLIParser.h Thu Jan 17 23:26:48 2019 +0100 +++ b/src/CLIParser.h Fri Jan 18 16:47:56 2019 +0100 @@ -40,7 +40,7 @@ else throw relpipe::cli::RelpipeCLIException(L"Missing CLI argument" + (i > 0 ? (L" after " + arguments[i - 1]) : L""), relpipe::cli::CLI::EXIT_CODE_BAD_CLI_ARGUMENTS); } - void addField(Configuration& c, string_t& group, string_t& name, std::vector& aliases, std::map& options) { + void addField(Configuration& c, string_t& group, string_t& name, std::vector& aliases, std::vector& options) { if (group.size()) { c.fields.push_back(RequestedField(group, name, aliases, options)); group.clear(); @@ -77,7 +77,7 @@ string_t currentGroup; string_t currentName; std::vector currentAliases; - std::map currentOptions; + std::vector currentOptions; for (int i = 0; i < arguments.size();) { string_t option = readNext(arguments, i); @@ -89,14 +89,13 @@ } else if (option == OPTION_AS) { currentAliases.push_back(readNext(arguments, i)); } else if (option == OPTION_OPTION) { - string_t key = readNext(arguments, i); - string_t value = readNext(arguments, i); - currentOptions[key] = value; + currentOptions.push_back(readNext(arguments, i)); + currentOptions.push_back(readNext(arguments, i)); } else { throw relpipe::cli::RelpipeCLIException(L"Unsupported CLI option: " + option, relpipe::cli::CLI::EXIT_CODE_BAD_CLI_ARGUMENTS); } } - + addField(c, currentGroup, currentName, currentAliases, currentOptions); // last field } return c; diff -r f12594938a03 -r 0a297eb46ba1 src/RequestedField.h --- a/src/RequestedField.h Thu Jan 17 23:26:48 2019 +0100 +++ b/src/RequestedField.h Fri Jan 18 16:47:56 2019 +0100 @@ -34,9 +34,13 @@ string_t group; string_t name; std::vector aliases; - std::map options; + /** + * used as an ordered multi-map + * option name, value, name, value,… + */ + std::vector options; - RequestedField(const string_t& group, const string_t& name, const std::vector& aliases = {}, const std::map& options = {}) : group(group), name(name), aliases(aliases), options(options) { + RequestedField(const string_t& group, const string_t& name, const std::vector& aliases = {}, const std::vector& options = {}) : group(group), name(name), aliases(aliases), options(options) { } /**