26 #ifndef CASADI_SX_NODE_HPP
27 #define CASADI_SX_NODE_HPP
37 #include "sx_elem.hpp"
51 friend class Matrix<SXElem>;
52 friend class UniversalNodeOwner;
69 virtual bool is_constant()
const {
return false; }
70 virtual bool is_integer()
const {
return false; }
71 virtual bool is_symbolic()
const {
return false; }
72 virtual bool is_zero()
const {
return false; }
73 virtual bool is_op(casadi_int op)
const {
return false; }
74 virtual bool is_almost_zero(
double tol)
const {
return false; }
75 virtual bool is_one()
const {
return false; }
76 virtual bool is_minus_one()
const {
return false; }
77 virtual bool is_half()
const {
return false; }
78 virtual bool is_value(
double val)
const {
return false; }
79 virtual bool is_nan()
const {
return false; }
80 virtual bool is_inf()
const {
return false; }
81 virtual bool is_minus_inf()
const {
return false; }
82 virtual bool is_call()
const {
return false; }
83 virtual bool is_output()
const {
return false; }
84 virtual bool has_output()
const {
return false; }
91 virtual double to_double()
const;
92 virtual casadi_int to_int()
const;
96 virtual const std::string& name()
const;
101 virtual std::string class_name()
const = 0;
106 virtual casadi_int op()
const=0;
111 virtual Function which_function()
const;
116 virtual casadi_int which_output()
const;
121 virtual bool is_equal(
const SXNode* node, casadi_int depth)
const;
126 virtual casadi_int n_dep()
const {
return 0;}
131 virtual SXElem get_output(casadi_int oind)
const;
134 virtual std::vector<SXElem> get_output(
const std::vector<casadi_int>& oind)
const;
139 virtual const SXElem& dep(casadi_int i)
const;
144 virtual SXElem& dep(casadi_int i);
149 virtual bool is_smooth()
const {
return true; }
154 virtual void disp(std::ostream& stream,
bool more)
const;
159 void can_inline(std::map<const SXNode*, casadi_int>& nodeind)
const;
164 std::string print_compact(std::map<const SXNode*, casadi_int>& nodeind,
165 std::vector<std::string>& intermed)
const;
170 virtual std::string print(
const std::string& arg1,
const std::string& arg2)
const = 0;
181 static void safe_delete(SXNode* n);
184 static casadi_int eq_depth_;
187 SXElem shared_from_this();
190 const SXElem shared_from_this()
const;
199 #ifdef CASADI_WITH_THREADSAFE_SYMBOLICS
200 std::atomic<unsigned int> count;
208 void serialize(SerializingStream& s)
const;
210 virtual void serialize_node(SerializingStream& s)
const;
212 static SXNode* deserialize(DeserializingStream& s);
214 static std::map<casadi_int, SXNode* (*)(DeserializingStream&)> deserialize_map;