TVM  0.9.4
TaskDynamicsImpl.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 
7 #include <tvm/defs.h>
8 
9 #include <tvm/constraint/enums.h>
12 
13 #include <Eigen/Core>
14 
15 #include <memory>
16 #include <typeinfo>
17 
18 // FIXME add mechanisms for when the function's output is resized
19 // FIXME Consider the possibility of having variables in task dynamics?
20 
21 namespace tvm
22 {
23 
24 namespace task_dynamics
25 {
26 
27 namespace abstract
28 {
29 class TaskDynamics;
30 
32 class TVM_DLLAPI TaskDynamicsImpl : public graph::abstract::Node<TaskDynamicsImpl>
33 {
34 public:
36  SET_UPDATES(TaskDynamicsImpl, UpdateValue)
37 
38  virtual ~TaskDynamicsImpl() = default;
39 
40  const Eigen::VectorXd & value() const;
41  Order order() const;
42 
43  virtual void updateValue() = 0;
44 
46  template<typename T>
47  bool checkType() const;
48 
49 protected:
50  TaskDynamicsImpl(Order order, FunctionPtr f, constraint::Type t, const Eigen::VectorXd & rhs);
51 
53  const function::abstract::Function & function() const;
55  constraint::Type type() const;
57  const Eigen::VectorXd & rhs() const;
58 
60  Eigen::VectorXd value_;
61 
62 private:
63  void setFunction(FunctionPtr f);
64 
65  Order order_;
66  FunctionPtr f_;
67  constraint::Type type_;
68  Eigen::VectorXd rhs_;
69 
70  friend TaskDynamics;
71 };
72 
73 inline const Eigen::VectorXd & TaskDynamicsImpl::value() const { return value_; }
74 
75 inline Order TaskDynamicsImpl::order() const { return order_; }
76 
78 {
79  assert(f_);
80  return *f_;
81 }
82 
83 inline constraint::Type TaskDynamicsImpl::type() const { return type_; }
84 
85 inline const Eigen::VectorXd & TaskDynamicsImpl::rhs() const { return rhs_; }
86 
87 template<typename T>
88 inline bool TaskDynamicsImpl::checkType() const
89 { return dynamic_cast<const T *>(this) != nullptr; }
90 
91 } // namespace abstract
92 
93 } // namespace task_dynamics
94 
95 } // namespace tvm
#define SET_UPDATES(SelfT,...)
Definition: AbstractNode.h:138
#define SET_OUTPUTS(SelfT,...)
Definition: Outputs.h:113
#define TVM_DLLAPI
Definition: api.h:35
Definition: Function.h:45
Definition: Node.h:27
Definition: TaskDynamicsImpl.h:33
constraint::Type type() const
Definition: TaskDynamicsImpl.h:83
bool checkType() const
Definition: TaskDynamicsImpl.h:88
const function::abstract::Function & function() const
Definition: TaskDynamicsImpl.h:77
Order order() const
Definition: TaskDynamicsImpl.h:75
const Eigen::VectorXd & rhs() const
Definition: TaskDynamicsImpl.h:85
Definition: TaskDynamics.h:37
Definition: AffineExprDetail.h:95
Type
Definition: enums.h:15
Order
Definition: enums.h:14
Definition: Clock.h:12
std::shared_ptr< function::abstract::Function > FunctionPtr
Definition: defs.h:57