annotate cpp/options/options.hpp @ 658:868663a44b5e

options: use std::string_view::compare for better readability
author David Demelier <markand@malikania.fr>
date Mon, 15 Jul 2019 20:58:11 +0200
parents 11fa64b69530
children 913c8ef054d3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
657
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * options.hpp -- getopt(3) similar interface for C++
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2019 David Demelier <markand@malikania.fr>
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #ifndef OPTIONS_HPP
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #define OPTIONS_HPP
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
21
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 /**
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 * \file options.hpp
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 * \brief C++ alternative to getopt(3).
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 */
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
26
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 #include <stdexcept>
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 #include <string>
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 #include <string_view>
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 #include <tuple>
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 #include <unordered_map>
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 #include <vector>
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
33
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 /**
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 * \brief C++ alternative to getopt(3).
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 */
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 namespace options {
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
38
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 /**
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 * Store the positional arguments and options.
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 */
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 using pack = std::tuple<
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 std::vector<std::string>,
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 std::unordered_multimap<char, std::string>
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 >;
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
46
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 /**
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 * Parse a collection of options and arguments.
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 *
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 * This function uses the same format as getopt(3) function, you need specify
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 * each option in the fmt string and add a colon after the option character if
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 * it requires a value.
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 *
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 * If a -- option appears in the argument list, it stops option parsing and all
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 * next tokens are considered arguments even if they start with an hyphen.
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 *
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
57 * Example of format strings:
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 *
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 * - "abc": are all three boolean options,
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 * - "c:v": v is a boolean option c requires a value.
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
61 *
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 * Example of invocation:
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
63 *
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 * - `mycli -v -a`: is similar to `-va` if both 'v' and 'a' are boolean options,
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 * - `mycli -v -- -c`: -c will be a positional argument rather than an option
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 * but '-v' is still an option.
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 *
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 * \tparam InputIt must dereference a string type (literal, std::string_view or
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 * std::string)
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
70 * \param it the first item
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 * \param end the next item
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 * \param fmt the format string
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
73 * \return the result
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 */
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 template <typename InputIt>
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
76 inline auto parse(InputIt it, InputIt end, std::string_view fmt) -> pack
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
77 {
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 pack result;
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
79
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
80 for (; it != end; ++it) {
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 const std::string_view token(*it);
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
82
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
83 if (token == "--") {
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 for (++it; it != end; ++it)
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
85 std::get<0>(result).push_back(std::string(*it));
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
86 break;
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 }
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
88
658
868663a44b5e options: use std::string_view::compare for better readability
David Demelier <markand@malikania.fr>
parents: 657
diff changeset
89 if (token.compare(0, 1, "-") != 0) {
657
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
90 std::get<0>(result).push_back(std::string(token));
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 continue;
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
92 }
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
93
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
94 const auto sub = it->substr(1);
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
95
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
96 for (std::size_t i = 0U; i < sub.size(); ++i) {
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
97 const auto idx = fmt.find(sub[i]);
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
98
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
99 if (idx == std::string_view::npos)
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
100 throw std::runtime_error("invalid option");
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
101
658
868663a44b5e options: use std::string_view::compare for better readability
David Demelier <markand@malikania.fr>
parents: 657
diff changeset
102 if (fmt.compare(idx + 1U, 1, ":") != 0) {
657
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
103 std::get<1>(result).emplace(sub[i], "");
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
104 continue;
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
105 }
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
106
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
107 if (idx + 1U < sub.size()) {
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
108 std::get<1>(result).emplace(sub[i], std::string(sub.substr(i + 1)));
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
109 break;
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
110 }
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
111
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
112 if (++it == end || std::string_view(*it).compare(0U, 1U, "-") == 0)
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
113 throw std::runtime_error("option require a value");
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
114
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
115 std::get<1>(result).emplace(sub[i], std::string(*it));
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
116 }
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
117 }
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
118
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
119 return result;
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
120 }
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
121
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
122 /**
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
123 * Convenient overload with an initializer_list.
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
124 *
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
125 * \tparam StringType must be either a std::string or std::string_view
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
126 * \param args the arguments
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
127 * \param fmt the format string
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
128 * \return the result
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
129 */
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
130 inline auto parse(std::initializer_list<std::string_view> args, std::string_view fmt) -> pack
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
131 {
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
132 return parse(args.begin(), args.end(), fmt);
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
133 }
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
134
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
135 /**
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
136 * Convenient overload for main() arguments.
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
137 *
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
138 * \param argc the number of arguments
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
139 * \param argv the arguments
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
140 * \param fmt the format string
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
141 * \return the result
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
142 */
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
143 inline auto parse(int argc, char** argv, std::string_view fmt) -> pack
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
144 {
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
145 std::vector<std::string_view> args(argc);
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
146
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
147 for (int i = 0; i < argc; ++i)
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
148 args[i] = argv[i];
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
149
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
150 return parse(args.begin(), args.end(), fmt);
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
151 }
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
152
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
153
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
154 } // !options
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
155
11fa64b69530 options: reintroduce a very basic getopt(3) alternative
David Demelier <markand@malikania.fr>
parents:
diff changeset
156 #endif // !OPTIONS_HPP