46 static constexpr
unsigned int OutputSize = 0;
55 static constexpr
auto OutputBaseName =
"Outputs";
63 template<
typename EnumT>
67 int i =
static_cast<int>(e);
68 return isOutputEnabled(i);
72 bool isOutputEnabled(
int i)
const {
return isOutputStaticallyEnabled(i) && isOutputCustomEnabled(i); }
95 template<
typename EnumT>
101 bool is_node_ =
false;
113 #define SET_OUTPUTS(SelfT, ...) PP_ID(EXTEND_ENUM(Output, SelfT, __VA_ARGS__))
118 #define DISABLE_OUTPUTS(...) PP_ID(DISABLE_SIGNALS(Output, __VA_ARGS__))
121 #define CLEAR_DISABLED_OUTPUTS() PP_ID(CLEAR_DISABLED_SIGNALS(Output))
124 template<
typename T,
typename EnumT>
127 static_assert(std::is_base_of<Outputs, T>::value,
128 "Cannot test output validity for a type that is not derived of Outputs");
129 static_assert(std::is_enum<EnumT>::value,
"Cannot test output validity for a value that is not an enumeration");
130 return std::is_same<typename T::Output_, EnumT>::value
131 || ((!std::is_same<typename T::OutputParent, typename T::OutputBase>::value)
132 && is_valid_output<typename T::OutputParent>(v));
136 template<
typename T,
typename EnumT,
typename... Args>
138 {
return is_valid_output<T>(v) && is_valid_output<T>(args...); }
#define TVM_DLLAPI
Definition: api.h:35
Definition: CallGraph.h:23
bool isOutputEnabled(EnumT e) const
Definition: Outputs.h:64
static constexpr const char * OutputName(Output_)
Definition: Outputs.h:58
virtual ~Outputs()=default
virtual bool isOutputStaticallyEnabled(int) const
Definition: Outputs.h:81
Output_
Definition: Outputs.h:39
bool isOutputEnabled(int i) const
Definition: Outputs.h:72
static constexpr bool OutputStaticallyEnabled(EnumT)
Definition: Outputs.h:96
virtual bool isOutputCustomEnabled(int) const
Definition: Outputs.h:88
constexpr bool is_valid_output(EnumT v)
Definition: Outputs.h:125