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;