TVM  0.9.4
Task.h
Go to the documentation of this file.
1 /* Copyright 2017-2020 CNRS-AIST JRL and CNRS-UM LIRMM */
2 
3 #pragma once
4 
5 #include <tvm/api.h>
6 #include <tvm/defs.h>
7 
8 #include <tvm/constraint/enums.h>
11 #include <tvm/utils/ProtoTask.h>
12 
13 #include <memory>
14 
15 namespace tvm
16 {
20 {
21 public:
27  const Eigen::VectorXd & rhs);
32  const Eigen::VectorXd & l,
33  const Eigen::VectorXd & u);
38 
39  FunctionPtr function() const;
43  const; // the dynamics of the upper bound, in the case of double-sided task only.
44 
45  template<typename T, typename TDImpl = typename T::Impl>
46  std::shared_ptr<TDImpl> taskDynamics() const;
47 
48  template<typename T, typename TDImpl = typename T::Impl>
49  std::shared_ptr<TDImpl> secondBoundTaskDynamics() const;
50 
51 private:
52  FunctionPtr f_;
53  constraint::Type type_;
54  TaskDynamicsPtr td_;
55  TaskDynamicsPtr td2_ = nullptr; // used only for double sided tasks, as dynamics for upper bound.
56 };
57 
58 template<typename T, typename TDImpl>
59 std::shared_ptr<TDImpl> Task::taskDynamics() const
60 {
61  if(td_->checkType<TDImpl>())
62  return std::static_pointer_cast<TDImpl>(td_);
63  else
64  throw std::runtime_error("Unable to cast the task dynamics into the desired type.");
65 }
66 
67 template<typename T, typename TDImpl>
68 std::shared_ptr<TDImpl> Task::secondBoundTaskDynamics() const
69 {
70  if(td2_->checkType<TDImpl>())
71  return std::static_pointer_cast<TDImpl>(td2_);
72  else
73  throw std::runtime_error("Unable to cast the task dynamics into the desired type.");
74 }
75 
76 } // namespace tvm
#define TVM_DLLAPI
Definition: api.h:35
Definition: Task.h:20
TaskDynamicsPtr secondBoundTaskDynamics() const
Task(utils::ProtoTaskGT proto, const task_dynamics::abstract::TaskDynamics &td)
Task(FunctionPtr f, constraint::Type t, const task_dynamics::abstract::TaskDynamics &td, double rhs)
Task(FunctionPtr f, constraint::Type t, const task_dynamics::abstract::TaskDynamics &td)
Task(FunctionPtr f, constraint::Type t, const task_dynamics::abstract::TaskDynamics &td, const Eigen::VectorXd &rhs)
Task(FunctionPtr f, constraint::Type t, const task_dynamics::abstract::TaskDynamics &td, double l, double u)
Task(FunctionPtr f, constraint::Type t, const task_dynamics::abstract::TaskDynamics &td, const Eigen::VectorXd &l, const Eigen::VectorXd &u)
constraint::Type type() const
Task(utils::ProtoTaskDS proto, const task_dynamics::abstract::TaskDynamics &td)
TaskDynamicsPtr taskDynamics() const
Task(utils::ProtoTaskLT proto, const task_dynamics::abstract::TaskDynamics &td)
Task(utils::ProtoTaskEQ proto, const task_dynamics::abstract::TaskDynamics &td)
Definition: TaskDynamics.h:37
Definition: ProtoTask.h:29
Type
Definition: enums.h:15
Definition: Clock.h:12
std::shared_ptr< task_dynamics::abstract::TaskDynamicsImpl > TaskDynamicsPtr
Definition: defs.h:64
std::shared_ptr< function::abstract::Function > FunctionPtr
Definition: defs.h:57