Shaka Packager SDK
gflags_hex_bytes.h
1 // Copyright 2017 Google Inc. All rights reserved.
2 //
3 // Use of this source code is governed by a BSD-style
4 // license that can be found in the LICENSE file or at
5 // https://developers.google.com/open-source/licenses/bsd
6 //
7 // Extends gflags to support hex formatted bytes.
8 
9 #ifndef PACKAGER_APP_GFLAGS_HEX_BYTES_H_
10 #define PACKAGER_APP_GFLAGS_HEX_BYTES_H_
11 
12 #include <gflags/gflags.h>
13 
14 #include <string>
15 #include <vector>
16 
17 namespace shaka {
18 bool ValidateHexString(const char* flagname,
19  const std::string& value,
20  std::vector<uint8_t>* value_bytes);
21 } // namespace shaka
22 
23 // The raw bytes will be available in FLAGS_##name##_bytes.
24 // The original gflag variable FLAGS_##name is defined in shaka_gflags_extension
25 // and not exposed directly.
26 #define DECLARE_hex_bytes(name) \
27  namespace shaka_gflags_extension { \
28  DECLARE_string(name); \
29  } \
30  namespace shaka_gflags_extension { \
31  extern std::vector<uint8_t> FLAGS_##name##_bytes; \
32  } \
33  using shaka_gflags_extension::FLAGS_##name##_bytes
34 
35 #define DEFINE_hex_bytes(name, val, txt) \
36  namespace shaka_gflags_extension { \
37  DEFINE_string(name, val, txt); \
38  } \
39  namespace shaka_gflags_extension { \
40  std::vector<uint8_t> FLAGS_##name##_bytes; \
41  static bool hex_validator_##name = gflags::RegisterFlagValidator( \
42  &FLAGS_##name, \
43  [](const char* flagname, const std::string& value) { \
44  return shaka::ValidateHexString(flagname, value, \
45  &FLAGS_##name##_bytes); \
46  }); \
47  } \
48  using shaka_gflags_extension::FLAGS_##name##_bytes
49 
50 #endif // PACKAGER_APP_GFLAGS_HEX_BYTES_H_
All the methods that are virtual are virtual for mocking.