| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- /*
- * Copyright (c) 2012-2017 Daniele Bartolini and individual contributors.
- * License: https://github.com/taylor001/crown/blob/master/LICENSE
- */
- #include "command_line.h"
- #include "string_utils.h"
- namespace crown
- {
- namespace
- {
- bool is_shortopt(const char* arg, char shortopt)
- {
- return shortopt != '\0'
- && strlen32(arg) > 1
- && arg[0] == '-'
- && arg[1] == shortopt
- ;
- }
- bool is_longopt(const char* arg, const char* longopt)
- {
- return longopt != NULL
- && strlen32(arg) > 2
- && arg[0] == '-'
- && arg[1] == '-'
- && strcmp(&arg[2], longopt) == 0
- ;
- }
- int find_option(int argc, const char** argv, const char* longopt, char shortopt)
- {
- for (int i = 0; i < argc; ++i)
- {
- if (is_longopt(argv[i], longopt) || is_shortopt(argv[i], shortopt))
- return i;
- }
- return argc;
- }
- }
- CommandLine::CommandLine(int argc, const char** argv)
- : _argc(argc)
- , _argv(argv)
- {
- }
- const char* CommandLine::get_parameter(int i, const char* longopt, char shortopt)
- {
- int argc = find_option(_argc, _argv, longopt, shortopt);
- return argc + i < _argc ? _argv[argc + i + 1] : NULL;
- }
- bool CommandLine::has_option(const char* longopt, char shortopt)
- {
- return find_option(_argc, _argv, longopt, shortopt) < _argc;
- }
- } // namespace crown
|