summaryrefslogtreecommitdiffstats
path: root/Source/cmArgumentParser.cxx
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2022-07-06 15:30:22 (GMT)
committerBrad King <brad.king@kitware.com>2022-07-07 13:48:58 (GMT)
commite6d1e29ffa6bd3141a769d1281f3407ed0774139 (patch)
tree667e168e1643d72da6c88433c3c71a26c4fdcb0e /Source/cmArgumentParser.cxx
parent4c50f639c7e67098eba14bc41869dd5c354d0da6 (diff)
downloadCMake-e6d1e29ffa6bd3141a769d1281f3407ed0774139.zip
CMake-e6d1e29ffa6bd3141a769d1281f3407ed0774139.tar.gz
CMake-e6d1e29ffa6bd3141a769d1281f3407ed0774139.tar.bz2
cmArgumentParser: Model maybe-empty and non-empty lists with wrapper types
Previously bindings to `std::vector<std::string>` required at least one value. Some clients have been filtering `keywordsMissingValue` to support keywords followed by empty lists. Instead, require clients to specify whether a keyword's list can be empty as part of the binding type.
Diffstat (limited to 'Source/cmArgumentParser.cxx')
-rw-r--r--Source/cmArgumentParser.cxx11
1 files changed, 10 insertions, 1 deletions
diff --git a/Source/cmArgumentParser.cxx b/Source/cmArgumentParser.cxx
index 1a05dbc..1bb9051 100644
--- a/Source/cmArgumentParser.cxx
+++ b/Source/cmArgumentParser.cxx
@@ -4,6 +4,8 @@
#include <algorithm>
+#include "cmArgumentParserTypes.h"
+
namespace ArgumentParser {
auto ActionMap::Emplace(cm::string_view name, Action action)
@@ -44,7 +46,14 @@ void Instance::Bind(std::string& val)
this->ExpectValue = true;
}
-void Instance::Bind(std::vector<std::string>& val)
+void Instance::Bind(MaybeEmpty<std::vector<std::string>>& val)
+{
+ this->CurrentString = nullptr;
+ this->CurrentList = &val;
+ this->ExpectValue = false;
+}
+
+void Instance::Bind(NonEmpty<std::vector<std::string>>& val)
{
this->CurrentString = nullptr;
this->CurrentList = &val;