TVM  0.9.4
VariableVector.h
Go to the documentation of this file.
1 
3 #pragma once
4 
5 #include <tvm/api.h>
6 #include <tvm/defs.h>
7 
10 
11 #include <tvm/deprecated.hh>
12 
13 #include <map>
14 #include <memory>
15 #include <set>
16 #include <vector>
17 
18 namespace tvm
19 {
41 {
42 public:
56  template<typename... VarPtr>
57  VariableVector(VarPtr &&... variables);
58 
62 
65 
67 
80  bool add(VariablePtr v);
91  bool add(std::unique_ptr<Variable> v);
93  void add(const std::vector<VariablePtr> & variables);
95  void add(const VariableVector & variables);
108  int addAndGetIndex(VariablePtr v, bool containingIndex = false);
109 
120  bool remove(const Variable & v);
128  void remove(int i);
129 
131  void clear();
132 
134  int totalSize() const;
136  int numberOfVariables() const;
138  const VariablePtr operator[](int i) const;
140  const std::vector<VariablePtr> & variables() const;
141 
145  const Eigen::VectorXd & value() const;
151  TVM_DEPRECATED inline void value(const VectorConstRef & x) { set(x); }
157  void set(const VectorConstRef & val);
159  void setZero();
160 
162  bool contains(const Variable & v) const;
163 
165  bool intersects(const Variable & v) const;
166 
170  int indexOf(const Variable & v) const;
171 
177  Range getMappingOf(const Variable & v) const;
178 
182  int stamp() const;
183 
187  std::vector<VariablePtr>::const_iterator begin() const;
191  std::vector<VariablePtr>::const_iterator end() const;
192 
193 private:
194  void add_(VariablePtr v);
195  void remove_(std::vector<VariablePtr>::const_iterator it);
196  void getNewStamp() const;
197 
198  static int counter;
199 
200  mutable int stamp_;
201  int size_;
202  std::vector<VariablePtr> variables_;
203 
204  mutable Eigen::VectorXd value_;
205 };
206 
207 template<typename... VarPtr>
209 {
210  // clang-format off
211  static_assert((... && (std::is_same_v<typename std::decay_t<VarPtr>, VariablePtr>
212  || std::is_same_v<typename std::decay_t<VarPtr>, std::unique_ptr<Variable>>
213  || std::is_same_v<typename std::decay_t<VarPtr>, VariableVector>
214  || std::is_same_v<typename std::decay_t<VarPtr>, std::vector<VariablePtr>>)));
215  // clang-format on
216  (add(std::forward<VarPtr>(variables)), ...);
217 }
218 
227 VariableVector TVM_DLLAPI dot(const VariableVector & vars, int ndiff = 1);
228 
229 inline std::vector<VariablePtr>::const_iterator tvm::VariableVector::begin() const { return variables_.begin(); }
230 
231 inline std::vector<VariablePtr>::const_iterator tvm::VariableVector::end() const { return variables_.end(); }
232 
233 } // namespace tvm
#define TVM_DLLAPI
Definition: api.h:35
Definition: Range.h:19
Definition: VariableVector.h:41
std::vector< VariablePtr >::const_iterator begin() const
Definition: VariableVector.h:229
const std::vector< VariablePtr > & variables() const
bool add(VariablePtr v)
int addAndGetIndex(VariablePtr v, bool containingIndex=false)
Range getMappingOf(const Variable &v) const
TVM_DEPRECATED void value(const VectorConstRef &x)
Definition: VariableVector.h:151
void set(const VectorConstRef &val)
int totalSize() const
bool add(std::unique_ptr< Variable > v)
VariableVector(const VariableVector &other)
std::vector< VariablePtr >::const_iterator end() const
Definition: VariableVector.h:231
void add(const VariableVector &variables)
void remove(int i)
bool contains(const Variable &v) const
const Eigen::VectorXd & value() const
int indexOf(const Variable &v) const
VariableVector & operator=(VariableVector &&)=default
VariableVector(VariableVector &&)=default
const VariablePtr operator[](int i) const
int numberOfVariables() const
bool remove(const Variable &v)
VariableVector & operator=(const VariableVector &other)
void add(const std::vector< VariablePtr > &variables)
bool intersects(const Variable &v) const
Definition: Variable.h:49
Definition: ObjWithId.h:14
Definition: Clock.h:12
std::shared_ptr< Variable > VariablePtr
Definition: defs.h:65
Eigen::Ref< const Eigen::VectorXd > VectorConstRef
Definition: defs.h:50
VariablePtr TVM_DLLAPI dot(VariablePtr var, int ndiff=1, bool autoName=false)