command_line.h 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. /*
  2. * Copyright (c) 2012-2014 Daniele Bartolini and individual contributors.
  3. * License: https://github.com/taylor001/crown/blob/master/LICENSE
  4. */
  5. #pragma once
  6. #include "string_utils.h"
  7. namespace crown
  8. {
  9. /// Helper for parsing command line.
  10. struct CommandLine
  11. {
  12. CommandLine(int argc, char** argv)
  13. : _argc(argc)
  14. , _argv(argv)
  15. {
  16. }
  17. int find_argument(const char* longopt, char shortopt)
  18. {
  19. for (int i = 0; i < _argc; i++)
  20. {
  21. if ((shortopt != '\0' && strlen(_argv[i]) > 1 && _argv[i][0] == '-' && _argv[i][1] == shortopt) ||
  22. (strlen(_argv[i]) > 2 && _argv[i][0] == '-' && _argv[i][1] == '-' && strcmp(&_argv[i][2], longopt) == 0))
  23. {
  24. return i;
  25. }
  26. }
  27. return _argc;
  28. }
  29. const char* get_parameter(const char* longopt, char shortopt = '\0')
  30. {
  31. int argc = find_argument(longopt, shortopt);
  32. return argc < _argc ? _argv[argc + 1] : NULL;
  33. }
  34. bool has_argument(const char* longopt, char shortopt = '\0')
  35. {
  36. return find_argument(longopt, shortopt) < _argc;
  37. }
  38. private:
  39. int _argc;
  40. char** _argv;
  41. };
  42. } // namespace crown