Joedb 9.6.1
The Journal-Only Embedded Database
Loading...
Searching...
No Matches
Arguments.h
Go to the documentation of this file.
1#ifndef joedb_Arguments_declared
2#define joedb_Arguments_declared
3
4#include <string_view>
5#include <vector>
6#include <ostream>
7
8namespace joedb
9{
10 /// Class for conveniently parsing command-line arguments
11 ///
12 /// All strings passed as input to this class are zero-terminated, so all
13 /// the std::string_view returned by member functions are zero-terminated.
14 /// This way, it is safe to use view.data() as zero-terminated string.
15 ///
16 /// @ingroup ui
18 {
19 private:
20 const int argc;
21 const char * const * const argv;
22
23 struct Argument
24 {
25 std::string_view s;
26 std::string_view option;
27 bool used;
28
29 Argument(const char *argv);
30 };
31
32 std::vector<Argument> args;
33 int index = 1;
34 bool missing_arg = false;
35
36 struct Option
37 {
38 std::string_view name;
39 std::string_view parameter;
40 const std::vector<const char *> *labels = nullptr;
41 const size_t default_index = 0;
42
43 Option(std::string_view parameter):
44 parameter(parameter)
45 {
46 }
47
48 Option(std::string_view name, std::string_view parameter):
49 name(name),
50 parameter(parameter)
51 {
52 }
53
54 Option
55 (
56 std::string_view name,
57 const std::vector<const char *> &labels,
58 size_t default_index
59 ):
60 name(name),
61 labels(&labels),
62 default_index(default_index)
63 {
64 }
65 };
66
67 std::vector<Option> options;
68
69 void update_index();
70 std::string_view use_index();
71
72 public:
73 Arguments(int argc, const char * const *argv);
74
75 bool has_flag(const char * name);
76
77 std::string_view get_string_option
78 (
79 const char * name,
80 const char * description,
81 const char * default_string
82 );
83
84 size_t get_enum_option
85 (
86 const char * name,
87 const std::vector<const char *> &labels,
88 size_t default_index
89 );
90
91 template<typename T> T get_option
92 (
93 const char * name,
94 const char * description,
95 T default_value
96 );
97
98 std::string_view get_next();
99 std::string_view get_next(const char * parameter);
100 bool peek(const char *s);
101 void add_parameter(const char * parameter);
102 std::ostream &print_help(std::ostream &out) const;
103
104 int get_remaining_count() const {return int(args.size() - index);}
105 int get_index() const {return int(index);}
106 bool missing() const {return missing_arg;}
107 size_t size() const {return args.size();}
108 std::string_view operator[](size_t i) const {return args[i].s;}
109 };
110}
111
112#endif
Class for conveniently parsing command-line arguments.
Definition Arguments.h:18
bool peek(const char *s)
std::string_view operator[](size_t i) const
Definition Arguments.h:108
size_t size() const
Definition Arguments.h:107
bool missing() const
Definition Arguments.h:106
size_t get_enum_option(const char *name, const std::vector< const char * > &labels, size_t default_index)
Definition Arguments.cpp:79
std::string_view get_next()
std::string_view get_string_option(const char *name, const char *description, const char *default_string)
Definition Arguments.cpp:56
T get_option(const char *name, const char *description, T default_value)
int get_index() const
Definition Arguments.h:105
int get_remaining_count() const
Definition Arguments.h:104
bool has_flag(const char *name)
Definition Arguments.cpp:38
std::ostream & print_help(std::ostream &out) const
void add_parameter(const char *parameter)
Definition Blob.h:7