TVM  0.9.4
ProblemDefinitionEvent.h
Go to the documentation of this file.
1 
3 #pragma once
4 
5 #include <memory>
6 
7 namespace tvm
8 {
9 class TaskWithRequirements;
10 namespace hint
11 {
12 class Substitution;
13 }
14 
15 namespace scheme::internal
16 {
19 {
20 public:
21  enum class Type
22  {
29  };
30 
31  template<Type t>
32  using EmitterType = std::conditional_t<t <= Type::TaskRemoval, TaskWithRequirements, hint::Substitution>;
33 
35  : type_(type), emitter_(static_cast<void const *>(&emitter))
36  { assert(type <= Type::TaskRemoval); }
37 
39  : type_(type), emitter_(static_cast<void const *>(emitter))
41 
46 
47  Type type() const { return type_; }
48  void const * emitter() const { return emitter_; }
49  template<Type t>
50  const auto & typedEmitter() const
51  { return *static_cast<EmitterType<t> const *>(emitter_); }
52 
53 private:
54  Type type_;
55  void const * emitter_;
56 };
57 } // namespace scheme::internal
58 } // namespace tvm
Definition: ControlProblem.h:22
Definition: Substitution.h:29
Definition: ProblemDefinitionEvent.h:19
ProblemDefinitionEvent(Type type, const TaskWithRequirements &emitter)
Definition: ProblemDefinitionEvent.h:34
ProblemDefinitionEvent(const ProblemDefinitionEvent &)=default
ProblemDefinitionEvent(Type type, hint::Substitution const *emitter)
Definition: ProblemDefinitionEvent.h:38
ProblemDefinitionEvent & operator=(const ProblemDefinitionEvent &)=default
std::conditional_t< t<=Type::TaskRemoval, TaskWithRequirements, hint::Substitution > EmitterType
Definition: ProblemDefinitionEvent.h:32
void const * emitter() const
Definition: ProblemDefinitionEvent.h:48
Type type() const
Definition: ProblemDefinitionEvent.h:47
const auto & typedEmitter() const
Definition: ProblemDefinitionEvent.h:50
Type
Definition: ProblemDefinitionEvent.h:22
ProblemDefinitionEvent(ProblemDefinitionEvent &&)=default
ProblemDefinitionEvent & operator=(ProblemDefinitionEvent &&)=default
Definition: Clock.h:12