requested field's options as an ordered multi-map v_0
authorFrantišek Kučera <franta-hg@frantovo.cz>
Fri, 18 Jan 2019 16:47:56 +0100
branchv_0
changeset 12 0a297eb46ba1
parent 11 f12594938a03
child 13 b0fabeceb18a
requested field's options as an ordered multi-map
src/CLIParser.h
src/RequestedField.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<string_t>& aliases, std::map<string_t, string_t>& options) {
+	void addField(Configuration& c, string_t& group, string_t& name, std::vector<string_t>& aliases, std::vector<string_t>& 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<string_t> currentAliases;
-			std::map<string_t, string_t> currentOptions;
+			std::vector<string_t> 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;
--- 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<string_t> aliases;
-	std::map<string_t, string_t> options;
+	/**
+	 * used as an ordered multi-map
+	 * option name, value, name, value,…
+	 */
+	std::vector<string_t> options;
 
-	RequestedField(const string_t& group, const string_t& name, const std::vector<string_t>& aliases = {}, const std::map<string_t, string_t>& options = {}) : group(group), name(name), aliases(aliases), options(options) {
+	RequestedField(const string_t& group, const string_t& name, const std::vector<string_t>& aliases = {}, const std::vector<string_t>& options = {}) : group(group), name(name), aliases(aliases), options(options) {
 	}
 
 	/**