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; }
86 virtual double to_double()
const;
87 virtual casadi_int to_int()
const;
91 virtual const std::string& name()
const;
96 virtual std::string class_name()
const = 0;
101 virtual casadi_int op()
const=0;
106 virtual bool is_equal(
const SXNode* node, casadi_int depth)
const;
111 virtual casadi_int n_dep()
const {
return 0;}
116 virtual const SXElem& dep(casadi_int i)
const;
121 virtual SXElem& dep(casadi_int i);
126 virtual bool is_smooth()
const {
return true; }
131 virtual void disp(std::ostream& stream,
bool more)
const;
136 void can_inline(std::map<const SXNode*, casadi_int>& nodeind)
const;
141 std::string print_compact(std::map<const SXNode*, casadi_int>& nodeind,
142 std::vector<std::string>& intermed)
const;
147 virtual std::string print(
const std::string& arg1,
const std::string& arg2)
const = 0;
158 static void safe_delete(SXNode* n);
161 static casadi_int eq_depth_;
175 void serialize(SerializingStream& s)
const;
177 virtual void serialize_node(SerializingStream& s)
const;
179 static SXNode* deserialize(DeserializingStream& s);
181 static std::map<casadi_int, SXNode* (*)(DeserializingStream&)> deserialize_map;