1+ #pragma once
2+ #include < string>
3+ #include < vector>
4+ #include < set>
5+ #include < functional>
6+
7+ struct arg_parser_arg {
8+ const std::wstring m_name;
9+ std::vector<std::wstring> m_aliases{};
10+ const std::wstring m_description;
11+
12+ int m_arg_count; // -1 for variable number of arguments
13+ bool m_is_parsed = false ;
14+ std::vector<std::wstring> m_values{};
15+
16+ std::vector <std::function<bool (const std::wstring&)>> m_check_funcs = {};
17+
18+ inline bool operator ==(const std::wstring& other) const ;
19+
20+ public:
21+ arg_parser_arg (
22+ const std::wstring name,
23+ const std::vector<std::wstring> alias,
24+ const std::wstring description,
25+ const int arg_count
26+ );
27+ bool is_match (const std::wstring& arg) const ;
28+ virtual std::wstring get_help () const ;
29+ virtual std::wstring get_usage_text () const ;
30+ arg_parser_arg add_alias (std::wstring new_alias);
31+ int get_arg_count () const ;
32+ std::wstring get_name () const ;
33+ std::wstring get_alias_string () const ;
34+ arg_parser_arg add_check_func (std::function<bool (const std::wstring&)> check_func);
35+ void set_is_parsed ();
36+ bool parse (std::vector<std::wstring> arg_vect);
37+ };
38+
39+ class arg_parser_arg_opt : arg_parser_arg {
40+ arg_parser_arg_opt (
41+ const std::wstring name,
42+ const std::vector<std::wstring> alias,
43+ const std::wstring description,
44+ const int arg_count
45+ ) : arg_parser_arg(name, alias, description, 0 ) {};
46+ };
47+
48+ class arg_parser_arg_pos : arg_parser_arg {
49+ arg_parser_arg_pos (
50+ const std::wstring name,
51+ const std::vector<std::wstring> alias,
52+ const std::wstring description,
53+ const int arg_count
54+ ) : arg_parser_arg(name, alias, description, arg_count) {};
55+ };
56+
57+ class arg_parser_arg_command : arg_parser_arg {
58+ arg_parser_arg_command (
59+ const std::wstring name,
60+ const std::vector<std::wstring> alias,
61+ const std::wstring description,
62+ const int arg_count,
63+ const std::wstring examples
64+ ) : arg_parser_arg(name, alias, description, 1 ) {};
65+ const std::wstring m_examples;
66+ };
0 commit comments