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;
136 virtual const SXElem& dep(casadi_int i)
const;
141 virtual SXElem& dep(casadi_int i);
146 virtual bool is_smooth()
const {
return true; }
151 virtual void disp(std::ostream& stream,
bool more)
const;
156 void can_inline(std::map<const SXNode*, casadi_int>& nodeind)
const;
161 std::string print_compact(std::map<const SXNode*, casadi_int>& nodeind,
162 std::vector<std::string>& intermed)
const;
167 virtual std::string print(
const std::string& arg1,
const std::string& arg2)
const = 0;
178 static void safe_delete(SXNode* n);
181 static casadi_int eq_depth_;
184 SXElem shared_from_this();
187 const SXElem shared_from_this()
const;
196 #ifdef CASADI_WITH_THREADSAFE_SYMBOLICS
197 std::atomic<unsigned int> count;
205 void serialize(SerializingStream& s)
const;
207 virtual void serialize_node(SerializingStream& s)
const;
209 static SXNode* deserialize(DeserializingStream& s);
211 static std::map<casadi_int, SXNode* (*)(DeserializingStream&)> deserialize_map;