LIPH's C++ Codes
flags.h
Go to the documentation of this file.
1#ifndef LIPH_FLAGS_H_
2#define LIPH_FLAGS_H_
3
4#include <cstdint>
5#include <string>
6#include <unordered_map>
7#include <vector>
8
9#include "liph/string.h"
10
11namespace liph {
12
13class flags {
14public:
15 flags() = default;
16
17 bool register_bool_flag(const std::string& name, bool default_value = false, std::string help_message = "");
18 bool register_int32_flag(const std::string& name, int32_t default_value = 0, std::string help_message = "");
19 bool register_double_flag(const std::string& name, double default_value = 0.0, std::string help_message = "");
20 bool register_string_flag(const std::string& name, std::string default_value = "", std::string help_message = "");
21
23 bool parse_flags(int argc, char ***argv);
24
25 bool has_flag(const std::string& name) const;
26
27 bool bool_ref(const std::string& name); // todo: return bool&
28 int32_t& int32_ref(const std::string& name);
29 double& double_ref(const std::string& name);
30 std::string& string_ref(const std::string& name);
31
32 std::string help() const;
33
34private:
35 enum flag_type { flag_bool, flag_int32, flag_double, flag_string };
36 struct flag_info {
37 flag_type type;
38 size_t idx;
39 std::string help_message;
40 };
41 std::unordered_map<std::string, flag_info> registered_flags_;
42 std::vector<bool> values_bool_;
43 std::vector<int32_t> values_int32_;
44 std::vector<double> values_double_;
45 std::vector<std::string> values_string_;
46
47 bool parse_{false};
48 std::vector<char *> new_argv_;
49};
50
51} // namespace liph
52
53#endif // LIPH_FLAGS_H_
Definition: flags.h:13
std::string & string_ref(const std::string &name)
Definition: flags.cpp:134
bool register_int32_flag(const std::string &name, int32_t default_value=0, std::string help_message="")
Definition: flags.cpp:26
bool has_flag(const std::string &name) const
Definition: flags.cpp:114
std::string help() const
Definition: flags.cpp:140
bool register_double_flag(const std::string &name, double default_value=0.0, std::string help_message="")
Definition: flags.cpp:33
bool register_string_flag(const std::string &name, std::string default_value="", std::string help_message="")
Definition: flags.cpp:40
bool parse_flags(int argc, char ***argv)
parse command line and remove registered flags
Definition: flags.cpp:47
bool register_bool_flag(const std::string &name, bool default_value=false, std::string help_message="")
Definition: flags.cpp:19
int32_t & int32_ref(const std::string &name)
Definition: flags.cpp:122
flags()=default
double & double_ref(const std::string &name)
Definition: flags.cpp:128
bool bool_ref(const std::string &name)
Definition: flags.cpp:116
Definition: algorithm.h:10