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_nan()
const {
return false; }
78 virtual bool is_inf()
const {
return false; }
79 virtual bool is_minus_inf()
const {
return false; }
80 virtual bool is_call()
const {
return false; }
81 virtual bool is_output()
const {
return false; }
82 virtual bool has_output()
const {
return false; }
89 virtual double to_double()
const;
90 virtual casadi_int to_int()
const;
94 virtual const std::string& name()
const;
99 virtual std::string class_name()
const = 0;
104 virtual casadi_int op()
const=0;
109 virtual Function which_function()
const;
114 virtual casadi_int which_output()
const;
119 virtual bool is_equal(
const SXNode* node, casadi_int depth)
const;
124 virtual casadi_int n_dep()
const {
return 0;}
129 virtual SXElem get_output(casadi_int oind)
const;
134 virtual const SXElem& dep(casadi_int i)
const;
139 virtual SXElem& dep(casadi_int i);
144 virtual bool is_smooth()
const {
return true; }
149 virtual void disp(std::ostream& stream,
bool more)
const;
154 void can_inline(std::map<const SXNode*, casadi_int>& nodeind)
const;
159 std::string print_compact(std::map<const SXNode*, casadi_int>& nodeind,
160 std::vector<std::string>& intermed)
const;
165 virtual std::string print(
const std::string& arg1,
const std::string& arg2)
const = 0;
176 static void safe_delete(SXNode* n);
179 static casadi_int eq_depth_;
182 SXElem shared_from_this();
185 const SXElem shared_from_this()
const;
194 #ifdef CASADI_WITH_THREADSAFE_SYMBOLICS
195 std::atomic<unsigned int> count;
203 void serialize(SerializingStream& s)
const;
205 virtual void serialize_node(SerializingStream& s)
const;
207 static SXNode* deserialize(DeserializingStream& s);
209 static std::map<casadi_int, SXNode* (*)(DeserializingStream&)> deserialize_map;