TVM  0.9.4
Option.h
Go to the documentation of this file.
1 
3 #pragma once
4 
5 #include <optional>
6 #include <type_traits>
7 
9 #define TVM_ADD_OPTION_GET_SET(optionName, type) \
10 public: \
11  const std::optional<type> & optionName() const { return optionName##_; } \
12  auto & optionName(const type & v) \
13  { \
14  optionName##_ = v; \
15  return *this; \
16  }
17 
21 #define TVM_ADD_DEFAULT_OPTION(optionName, type) \
22 private: \
23  using optionName##_t = type; \
24  std::optional<type> optionName##_; \
25  TVM_ADD_OPTION_GET_SET(optionName, type)
26 
30 #define TVM_ADD_NON_DEFAULT_OPTION(optionName, defaultValue) \
31 private: \
32  using optionName##_t = std::remove_const_t<decltype(defaultValue)>; \
33  std::optional<optionName##_t> optionName##_ = defaultValue; \
34  TVM_ADD_OPTION_GET_SET(optionName, optionName##_t)
35 
39 #define TVM_PROCESS_OPTION_2(optionName, target, setterName) \
40  if(options.optionName()) \
41  target.setterName(options.optionName().value());
42 
44 #define TVM_PROCESS_OPTION(optionName, target) TVM_PROCESS_OPTION_2(optionName, target, optionName)
45 
49 #define TVM_PROCESS_OPTION_PUBLIC_ACCESS_2(optionName, target, fieldName) \
50  if(options.optionName()) \
51  target.fieldName = options.optionName().value();
52 
54 #define TVM_PROCESS_OPTION_PUBLIC_ACCESS(optionName, target) \
55  TVM_PROCESS_OPTION_PUBLIC_ACCESS_2(optionName, target, optionName)