39 bool _is_empty =
true;
57 for (
auto& item : m_k_v) {
delete item.second; }
62 void add_arg(
const string& name,
const string& s_name,
arg_type type, T default_v,
65 ptr->_setted_v = default_v;
66 ptr->_name = name.substr(2, name.length() - 2);
67 ptr->_s_name = s_name.substr(1, name.length() - 1);
72 void add_arg(
const string& name,
const string& s_name,
arg_type type,
bool is_necessary) {
75 ptr->_is_necessary = is_necessary;
76 ptr->_name = name.substr(2, name.length() - 2);
77 ptr->_s_name = s_name.substr(1, name.length() - 1);
84 void add_arg(
const string& name,
const string& s_name,
bool is_necessary) {
86 ptr->_name = name.substr(2, name.length() - 2);
87 ptr->_s_name = s_name.substr(1, name.length() - 1);
88 ptr->_setted_v =
true;
94 m_k_v[name.substr(2, name.length() - 2)] = arg_ptr;
100 if (!m_parsed) { cout <<
"[Warn] You should call .parse function before get_item\n"; }
102 auto ptr = m_k_v[key];
104 return ptr_c->_setted_v;
109 return !m_k_v[key]->_is_empty;
112 virtual bool parse(
int argc,
char** args) {
113 m_current_prog = string(args[0]);
114 for (
int i = 0; i < argc; ++i) { m_visited.push_back(
false); }
116 for (
auto& item : m_k_v) {
117 string tmp_name =
"--" + item.second->_name;
118 string tmp_s_name =
"-" + item.second->_s_name;
119 for (
int i = 1; i < argc;) {
120 if ((!strcmp(tmp_name.c_str(), args[i])) || (!strcmp(tmp_s_name.c_str(), args[i]))) {
121 item.second->_is_empty =
false;
122 arg_type tmp_type = item.second->_type;
126 auto ptr = item.second;
128 m_visited[i + 1] =
true;
129 ptr_c->_setted_v = atof(args[++i]);
131 auto ptr = item.second;
133 m_visited[i + 1] =
true;
134 ptr_c->_setted_v = (double)atof(args[++i]);
136 auto ptr = item.second;
138 m_visited[i + 1] =
true;
139 ptr_c->_setted_v = atoi(args[++i]);
141 auto ptr = item.second;
143 m_visited[i + 1] =
true;
144 ptr_c->_setted_v = (
unsigned int)atoi(args[++i]);
146 auto ptr = item.second;
148 m_visited[i + 1] =
true;
149 ptr_c->_setted_v = string(args[++i]);
156 if (!m_visited.empty()) {
158 for (
auto idx : m_visited) {
159 if (!idx) { m_others.push_back(
string(args[cnt])); }
164 if (!m_others.empty()) {
165 cout <<
"[Warn] Found other args:\n";
166 for (
auto& item : m_others) { cout << item <<
"\n"; }
179 for (
auto& item : m_k_v) {
180 switch (item.second->_type) {
183 cout <<
"--" << ptr->_name <<
" -" << ptr->_s_name <<
" ";
184 cout <<
"Defualt is: " << ptr->_default_v <<
" ";
185 cout <<
"Setted value is: " << ptr->_setted_v << endl;
189 cout <<
"--" << ptr->_name <<
" -" << ptr->_s_name <<
" ";
190 cout <<
"Defualt is: " << ptr->_default_v <<
" ";
191 cout <<
"Setted value is: " << ptr->_setted_v << endl;
195 cout <<
"--" << ptr->_name <<
" -" << ptr->_s_name <<
" ";
196 cout <<
"Defualt is: " << ptr->_default_v <<
" ";
197 cout <<
"Setted value is: " << ptr->_setted_v << endl;
201 cout <<
"--" << ptr->_name <<
" -" << ptr->_s_name <<
" ";
202 cout <<
"Defualt is: " << ptr->_default_v <<
" ";
203 cout <<
"Setted value is: " << ptr->_setted_v << endl;
207 cout <<
"--" << ptr->_name <<
" -" << ptr->_s_name <<
" ";
208 cout <<
"Defualt is: " << ptr->_default_v <<
" ";
209 cout <<
"Setted value is: " << ptr->_setted_v << endl;
213 cout <<
"--" << ptr->_name <<
" -" << ptr->_s_name <<
" ";
214 cout <<
"is a no value flag" << endl;
222 bool m_parsed =
false;
223 map<string, arg_payload_obj*>
m_k_v;