TVM  0.9.4
Node.h
Go to the documentation of this file.
1 /*
2  * Copyright 2017-2020 CNRS-AIST JRL and CNRS-UM LIRMM
3  */
4 
5 #pragma once
6 
8 
9 namespace tvm
10 {
11 
12 namespace graph
13 {
14 
15 namespace abstract
16 {
17 
25 template<typename T>
27 {
28 protected:
35  template<typename EnumT, typename U, typename... Args>
36  void registerUpdates(EnumT u, void (U::*fn)(), Args... args);
37 
39  template<typename EnumT, typename U>
40  void registerUpdates(EnumT u, void (U::*fn)());
41 
48  template<typename U = T, typename EnumO, typename EnumU>
49  void addOutputDependency(EnumO o, EnumU u);
50 
52  template<typename U = T, typename EnumO, typename EnumU>
53  void addOutputDependency(std::initializer_list<EnumO> os, EnumU u);
54 
60  template<typename U = T, typename EnumU1, typename EnumU2>
61  void addInternalDependency(EnumU1 uDependent, EnumU2 u);
62 
64  template<typename U = T, typename EnumU, typename S, typename EnumO, typename... Args>
65  void addInputDependency(EnumU u, std::shared_ptr<S> source, EnumO i, Args... args);
66 
72  template<typename U = T,
73  typename EnumU,
74  typename S,
75  typename EnumO,
76  typename... Args,
77  typename std::enable_if<std::is_base_of<abstract::Outputs, S>::value, int>::type = 0>
78  void addInputDependency(EnumU u, S & source, EnumO i, Args... args);
79 
90  template<typename U = T, typename EnumO, typename S, typename EnumI>
91  void addDirectDependency(EnumO o, std::shared_ptr<S> source, EnumI i);
92 
105  template<typename U = T,
106  typename EnumO,
107  typename S,
108  typename EnumI,
109  typename std::enable_if<std::is_base_of<abstract::Outputs, S>::value, int>::type = 0>
110  void addDirectDependency(EnumO o, S & source, EnumI i);
111 
112 private:
113  /* Internal version that takes a pointer to the source */
114  template<typename U, typename EnumU, typename S>
115  void checkAddInputDependency(EnumU u);
116  template<typename U = T, typename EnumU, typename S, typename EnumO>
117  void addInputDependency(EnumU u, S * source, EnumO i);
118  template<typename U = T, typename EnumU, typename S, typename EnumO, typename... Args>
119  void addInputDependency(EnumU u, S * source, EnumO i, Args... args);
120  template<typename U, typename EnumO, typename S, typename EnumI>
121  void checkAddDirectDependency(EnumO o);
122  template<typename U = T, typename EnumO, typename S, typename EnumI>
123  void addDirectDependency(EnumO o, S * source, EnumI i);
124 };
125 
126 } // namespace abstract
127 
128 } // namespace graph
129 
130 } // namespace tvm
131 
132 #include "Node.hpp"
Definition: Node.h:27
void addInputDependency(EnumU u, S &source, EnumO i, Args... args)
void registerUpdates(EnumT u, void(U::*fn)())
void addOutputDependency(std::initializer_list< EnumO > os, EnumU u)
void registerUpdates(EnumT u, void(U::*fn)(), Args... args)
void addInputDependency(EnumU u, std::shared_ptr< S > source, EnumO i, Args... args)
void addOutputDependency(EnumO o, EnumU u)
void addInternalDependency(EnumU1 uDependent, EnumU2 u)
void addDirectDependency(EnumO o, S &source, EnumI i)
void addDirectDependency(EnumO o, std::shared_ptr< S > source, EnumI i)
Definition: AbstractNode.h:37
Definition: Clock.h:12