odin-blend2d

Odin bindings to Blend2D
Log | Files | Refs | README | LICENSE

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