瀏覽代碼

LibCore: Add Vector<size_t> variant of add_option()

This adds a Vector<size_t> variant of add_option(). The signature
includes a separator parameter which defaults to ','.
Kenneth Myhra 3 年之前
父節點
當前提交
23a87a41ff
共有 2 個文件被更改,包括 27 次插入0 次删除
  1. 26 0
      Userland/Libraries/LibCore/ArgsParser.cpp
  2. 1 0
      Userland/Libraries/LibCore/ArgsParser.h

+ 26 - 0
Userland/Libraries/LibCore/ArgsParser.cpp

@@ -520,6 +520,32 @@ void ArgsParser::add_option(Optional<size_t>& value, const char* help_string, co
     add_option(move(option));
     add_option(move(option));
 }
 }
 
 
+void ArgsParser::add_option(Vector<size_t>& values, char const* help_string, char const* long_name, char short_name, char const* value_name, char separator, bool hidden)
+{
+    Option option {
+        true,
+        help_string,
+        long_name,
+        short_name,
+        value_name,
+        [&values, separator](char const* s) {
+            bool parsed_all_values = true;
+
+            StringView { s }.for_each_split_view(separator, false, [&](auto value) {
+                if (auto maybe_value = AK::StringUtils::convert_to_uint<size_t>(value); maybe_value.has_value())
+                    values.append(*maybe_value);
+                else
+                    parsed_all_values = false;
+            });
+
+            return parsed_all_values;
+        },
+        hidden
+    };
+
+    add_option(move(option));
+}
+
 void ArgsParser::add_positional_argument(Arg&& arg)
 void ArgsParser::add_positional_argument(Arg&& arg)
 {
 {
     m_positional_args.append(move(arg));
     m_positional_args.append(move(arg));

+ 1 - 0
Userland/Libraries/LibCore/ArgsParser.h

@@ -80,6 +80,7 @@ public:
     void add_option(double& value, char const* help_string, char const* long_name, char short_name, char const* value_name, bool hidden = false);
     void add_option(double& value, char const* help_string, char const* long_name, char short_name, char const* value_name, bool hidden = false);
     void add_option(Optional<double>& value, char const* help_string, char const* long_name, char short_name, char const* value_name, bool hidden = false);
     void add_option(Optional<double>& value, char const* help_string, char const* long_name, char short_name, char const* value_name, bool hidden = false);
     void add_option(Optional<size_t>& value, char const* help_string, char const* long_name, char short_name, char const* value_name, bool hidden = false);
     void add_option(Optional<size_t>& value, char const* help_string, char const* long_name, char short_name, char const* value_name, bool hidden = false);
+    void add_option(Vector<size_t>& values, char const* help_string, char const* long_name, char short_name, char const* value_name, char separator = ',', bool hidden = false);
 
 
     void add_positional_argument(Arg&&);
     void add_positional_argument(Arg&&);
     void add_positional_argument(char const*& value, char const* help_string, char const* name, Required required = Required::Yes);
     void add_positional_argument(char const*& value, char const* help_string, char const* name, Required required = Required::Yes);