29 #include "sx_node.hpp"
30 #include "serializing_stream.hpp"
42 class UnarySX :
public SXNode {
48 UnarySX(
unsigned char op,
const SXElem& dep) : op_(op), dep_(dep) {}
55 inline static SXElem create(
unsigned char op,
const SXElem& dep) {
56 if (dep.is_constant()) {
60 casadi_math<double>::fun(op, dep_val, dep_val, ret_val);
64 return SXElem::create(
new UnarySX(op, dep));
72 safe_delete(dep_.assignNoDelete(casadi_limits<SXElem>::nan));
76 std::string class_name()
const override {
return "UnarySX";}
78 bool is_smooth()
const override {
return operation_checker<SmoothChecker>(op_);}
80 bool is_op(casadi_int op)
const override {
return op_==op; }
85 bool is_equal(
const SXNode* node, casadi_int depth)
const override {
86 const UnarySX* n =
dynamic_cast<const UnarySX*
>(node);
87 return n && n->op_ == op_ && SXElem::is_equal(n->dep_, dep_, depth-1);
93 casadi_int n_dep()
const override {
return 1;}
98 const SXElem& dep(casadi_int i)
const override {
return dep_; }
99 SXElem& dep(casadi_int i)
override {
return dep_; }
104 casadi_int op()
const override {
return op_;}
109 std::string print(
const std::string& arg1,
const std::string& arg2)
const override {
110 return casadi_math<double>::print(op_, arg1);
123 void serialize_node(SerializingStream& s)
const override {
124 s.pack(
"UnarySX::dep", dep_);
127 static SXNode* deserialize(DeserializingStream& s, casadi_int op) {
129 s.unpack(
"UnarySX::dep", dep);
130 return new UnarySX(op, dep);