Mercurial > code
annotate modules/options/options.hpp @ 618:1ae8106369e5
Options: initial reimport, closes #705
author | David Demelier <markand@malikania.fr> |
---|---|
date | Tue, 26 Sep 2017 09:50:02 +0200 |
parents | |
children |
rev | line source |
---|---|
618
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 * options.hpp -- parse Unix command line options |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
4 * Copyright (c) 2015-2017 David Demelier <markand@malikania.fr> |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
19 #ifndef OPTIONS_HPP |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 #define OPTIONS_HPP |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 /** |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 * \file options.hpp |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
24 * \brief Basic Unix options parser. |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 */ |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
26 |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
27 /** |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
28 * \page options Options parser. |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 * |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
30 * ## Export macros |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
31 * |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
32 * You must define `OPTIONS_DLL` globally and `OPTIONS_BUILDING_DLL` when |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 * compiling the library if you want a DLL, alternatively you can provide your |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 * own `OPTIONS_EXPORT` macro instead. |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
35 */ |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
36 |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
37 /** |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
38 * \cond OPTIONS_HIDDEN_SYMBOLS |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
39 */ |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
40 |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 #if !defined(OPTIONS_EXPORT) |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
42 # if defined(OPTIONS_DLL) |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 # if defined(_WIN32) |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 # if defined(OPTIONS_BUILDING_DLL) |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
45 # define OPTIONS_EXPORT __declspec(dllexport) |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
46 # else |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
47 # define OPTIONS_EXPORT __declspec(dllimport) |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 # endif |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
49 # else |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
50 # define OPTIONS_EXPORT |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
51 # endif |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
52 # else |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
53 # define OPTIONS_EXPORT |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
54 # endif |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 #endif |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
57 /** |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
58 * \endcond |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
59 */ |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
60 |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
61 #include <exception> |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
62 #include <map> |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
63 #include <string> |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
64 #include <utility> |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
65 #include <vector> |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
66 |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 /** |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 * Namespace for options parsing. |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 */ |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 namespace option { |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
71 |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
72 /** |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
73 * \brief This exception is thrown when an invalid option has been found. |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
74 */ |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
75 class invalid_option : public std::exception { |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
76 private: |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
77 std::string message_; |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
78 std::string name_; |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
79 |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
80 public: |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
81 /** |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
82 * Construct the exception. |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
83 * |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
84 * \param arg the argument missing |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
85 */ |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
86 inline invalid_option(std::string name) |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
87 : name_(std::move(name)) |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
88 { |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
89 message_ = std::string("invalid option: ") + name_; |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
90 } |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
91 |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
92 /** |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
93 * Get the option name. |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
94 * |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
95 * \return the name |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
96 */ |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
97 inline const std::string& name() const noexcept |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
98 { |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
99 return name_; |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
100 } |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
101 |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
102 /** |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
103 * Get the error message. |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
104 * |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
105 * \return the error message |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
106 */ |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
107 const char* what() const noexcept override |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
108 { |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
109 return message_.c_str(); |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
110 } |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
111 }; |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
112 |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
113 /** |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
114 * \brief This exception is thrown when an option requires a value and no value |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
115 * has been given. |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
116 */ |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
117 class missing_value : public std::exception { |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
118 private: |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
119 std::string message_; |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
120 std::string name_; |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
121 |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
122 public: |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
123 /** |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
124 * Construct the exception. |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
125 * |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
126 * \param name the option that requires a value |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
127 */ |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
128 inline missing_value(std::string name) |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
129 : name_(std::move(name)) |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
130 { |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
131 message_ = std::string("missing argument for: ") + name_; |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
132 } |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
133 |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
134 /** |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
135 * Get the option name. |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
136 * |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
137 * \return the name |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
138 */ |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
139 inline const std::string& name() const noexcept |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
140 { |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
141 return name_; |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
142 } |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
143 |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
144 /** |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
145 * Get the error message. |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
146 * |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
147 * \return the error message |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
148 */ |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
149 const char* what() const noexcept override |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
150 { |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
151 return message_.c_str(); |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
152 } |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
153 }; |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
154 |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
155 /** |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
156 * Packed multimap of options. |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
157 */ |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
158 using result = std::multimap<std::string, std::string>; |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
159 |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
160 /** |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
161 * Define the allowed options. |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
162 */ |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
163 using options = std::map<std::string, bool>; |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
164 |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
165 /** |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
166 * Extract the command line options and return a result. |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
167 * |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
168 * \param args the arguments |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
169 * \param definition |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
170 * \warning the arguments vector is modified in place to remove parsed options |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
171 * \throw missing_value |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
172 * \throw invalid_option |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
173 */ |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
174 OPTIONS_EXPORT result read(std::vector<std::string>& args, const options& definition); |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
175 |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
176 /** |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
177 * Overloaded function for usage with main() arguments. |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
178 * |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
179 * \param argc the number of arguments |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
180 * \param argv the argument vector |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
181 * \param definition |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
182 * \note don't forget to remove the first argv[0] argument |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
183 * \warning the argc and argv are modified in place to remove parsed options |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
184 * \throw missing_value |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
185 * \throw invalid_option |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
186 */ |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
187 OPTIONS_EXPORT result read(int& argc, char**& argv, const options& definition); |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
188 |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
189 } // !option |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
190 |
1ae8106369e5
Options: initial reimport, closes #705
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
191 #endif // !OPTIONS_HPP |