56 static void removeArg(
int& argc,
char* argv[],
int pos,
int n)
58 for ( ; pos < argc - n; ++pos)
59 argv[pos] = argv[pos + n];
68class ArgBaseT :
public ArgBase
71 explicit ArgBaseT(
const T& def)
76 bool extract(
const char* str,
int& argc,
char* argv[],
int i,
int n)
78 std::istringstream s(str);
83 removeArg(argc, argv, i, n);
101class ArgBaseT<const char*> :
public ArgBase
104 explicit ArgBaseT(
const char* def)
109 bool extract(
const char* str,
int& argc,
char* argv[],
int i,
int n)
113 removeArg(argc, argv, i, n);
119 const char* get()
const
128class ArgBaseT<std::string> :
public ArgBase
131 explicit ArgBaseT(
const std::string& def)
136 bool extract(
const char* str,
int& argc,
char* argv[],
int i,
int n)
140 removeArg(argc, argv, i, n);
146 const std::string& get()
const
210class Arg :
public ArgBaseT<T>
226 Arg(
int& argc,
char* argv[],
char ch,
const T& def = T())
239 Arg(
int& argc,
char* argv[],
const char* str,
const T& def = T())
242 this->m_isset =
set(argc, argv, str);
247 Arg(
int& argc,
char* argv[])
250 this->m_isset =
set(argc, argv);
259 bool set(
int& argc,
char* argv[],
char ch)
265 for(
int i = 1; i < argc; ++i)
267 if (argv[i] && argv[i][0] ==
'-' && argv[i][1] == ch)
269 if(argv[i][2] ==
'\0' && i < argc - 1)
272 if (this->extract(argv[i + 1], argc, argv, i, 2))
277 if( this->extract(argv[i] + 2, argc, argv, i, 1) )
291 bool set(
int& argc,
char* argv[],
const char* str)
297 std::size_t n = std::strlen(str);
298 for (
int i = 1; i < argc; ++i)
300 if(argv[i] && (std::strncmp(argv[i], str, n) == 0))
302 if (i < argc - 1 && argv[i][n] ==
'\0')
305 if (this->extract(argv[i + 1], argc, argv, i, 2))
309 if (argv[i][n] ==
'=')
312 if (this->extract(argv[i] + n + 1, argc, argv, i, 1))
323 bool set(
int& argc,
char* argv[])
330 this->extract(argv[1], argc, argv, 1, 1);
332 return this->m_isset;
345class Arg<bool> :
public ArgBase
356 Arg(
int& argc,
char* argv[],
char ch,
bool def =
false)
359 m_isset =
set(argc, argv, ch);
364 Arg(
int& argc,
char* argv[],
const char* str,
bool def =
false)
367 m_isset =
set(argc, argv, str);
372 bool set(
int& argc,
char* argv[],
char ch)
378 for (
int i = 1; i < argc; ++i)
380 if (argv[i][0] ==
'-' && argv[i][1] !=
'-')
383 if (argv[i][1] == ch && argv[i][2] ==
'\0')
388 removeArg(argc, argv, i, 1);
391 else if(argv[i][1] == ch &&
398 removeArg(argc, argv, i, 1);
404 for (
char* p = argv[i] + 1; *p !=
'\0'; ++p)
415 while (*p++ !=
'\0');
429 bool set(
int& argc,
char* argv[],
const char* str)
435 for (
int i = 1; i < argc; ++i)
437 if (std::strcmp(argv[i], str) == 0)
441 removeArg(argc, argv, i, 1);
456 operator bool()
const
470 return out << arg.get();
Arg(bool def=false)
Constructs with a default value.
Definition Arg.h:350
const T & get() const
Returns the value.
Definition Arg.h:92
bool get() const
Returns the switch value.
Definition Arg.h:451
bool set(int &argc, char *argv[], const char *str)
Extracts a long switch from argc and argv.
Definition Arg.h:429
Arg(int &argc, char *argv[], const char *str, bool def=false)
Extracts a long switch from argc and argv.
Definition Arg.h:364
Arg(int &argc, char *argv[], char ch, bool def=false)
Extracts a short switch from argc and argv.
Definition Arg.h:356
bool set(int &argc, char *argv[], char ch)
Extracts a short switch from argc and argv.
Definition Arg.h:372
bool set(int &argc, char *argv[])
Extracts the next positional argument from argv.
Definition Arg.h:323
std::ostream & operator<<(std::ostream &out, const Arg< T > &arg)
Write Arg to an std::ostream.
Definition Arg.h:468
Arg(int &argc, char *argv[])
Extracts the next positional argument from argv.
Definition Arg.h:247
bool set(int &argc, char *argv[], const char *str)
Extracts a long option from argc and argv.
Definition Arg.h:291
Arg(int &argc, char *argv[], char ch, const T &def=T())
Extracts a short option from argc and argv.
Definition Arg.h:226
Arg(int &argc, char *argv[], const char *str, const T &def=T())
Extracts a long option from argc and argv.
Definition Arg.h:239
bool set(int &argc, char *argv[], char ch)
Extracts a short option from argc and argv.
Definition Arg.h:259
Arg(const T &def=T())
Constructs with a default value.
Definition Arg.h:215
Core module.
Definition Allocator.h:33