cmdline.h (1769B)
1 // This file is part of Blend2D project <https://blend2d.com> 2 // 3 // See blend2d.h or LICENSE.md for license and copyright information 4 // SPDX-License-Identifier: Zlib 5 6 // This file provides utility classes and functions shared between some tests. 7 8 #ifndef TESTING_CMDLINE_H_INCLUDED 9 #define TESTING_CMDLINE_H_INCLUDED 10 11 #include <stdio.h> 12 #include <stdlib.h> 13 #include <string.h> 14 15 class CmdLine { 16 public: 17 int _argc; 18 const char* const* _argv; 19 20 CmdLine(int argc, const char* const* argv) 21 : _argc(argc), 22 _argv(argv) {} 23 24 inline int count() const { return _argc; } 25 inline const char* const* args() const { return _argv; } 26 27 int find_arg(const char* key) const { 28 for (int i = 1; i < _argc; i++) { 29 if (strcmp(key, _argv[i]) == 0) 30 return i; 31 } 32 33 return -1; 34 } 35 36 bool has_arg(const char* key) const { 37 return find_arg(key) > 0; 38 } 39 40 const char* value_of(const char* key, const char* default_value) const { 41 size_t key_size = strlen(key); 42 for (int i = 1; i < _argc; i++) { 43 const char* val = _argv[i]; 44 if (strlen(val) >= key_size + 1 && val[key_size] == '=' && memcmp(val, key, key_size) == 0) 45 return val + key_size + 1; 46 } 47 48 return default_value; 49 } 50 51 int value_as_int(const char* key, int default_value) const { 52 const char* val = value_of(key, nullptr); 53 if (val == nullptr || val[0] == '\0') 54 return default_value; 55 56 return atoi(val); 57 } 58 59 unsigned value_as_uint(const char* key, unsigned default_value) const { 60 const char* val = value_of(key, nullptr); 61 if (val == nullptr || val[0] == '\0') 62 return default_value; 63 64 int v = atoi(val); 65 if (v < 0) 66 return default_value; 67 else 68 return unsigned(v); 69 } 70 }; 71 72 #endif // TESTING_CMDLINE_H_INCLUDED