26 #ifndef CASADI_CONSTANT_SX_HPP
27 #define CASADI_CONSTANT_SX_HPP
29 #include "sx_node.hpp"
30 #include "serializing_stream.hpp"
36 #include <unordered_map>
37 #define CACHING_MAP std::unordered_map
54 std::string
class_name()
const override {
return "ConstantSX";}
84 std::string
print(
const std::string& arg1,
const std::string& arg2)
const override {
111 #ifdef CASADI_WITH_THREADSAFE_SYMBOLICS
113 std::lock_guard<std::mutex> lock(mutex_cached_constants);
116 assert(num_erased==1);
122 #ifdef CASADI_WITH_THREADSAFE_SYMBOLICS
124 std::lock_guard<std::mutex> lock(mutex_cached_constants);
149 casadi_int
to_int()
const override {
return static_cast<casadi_int
>(
value);}
155 s.
pack(
"ConstantSX::type",
'r');
167 #ifdef CASADI_WITH_THREADSAFE_SYMBOLICS
168 static std::mutex mutex_cached_constants;
188 casadi_assert(
value<=std::numeric_limits<int>::max() &&
189 value>=std::numeric_limits<int>::min(),
"Integer overflow");
196 #ifdef CASADI_WITH_THREADSAFE_SYMBOLICS
198 std::lock_guard<std::mutex> lock(mutex_cached_constants);
201 assert(num_erased==1);
207 #ifdef CASADI_WITH_THREADSAFE_SYMBOLICS
209 std::lock_guard<std::mutex> lock(mutex_cached_constants);
234 casadi_int
to_int()
const override {
return static_cast<casadi_int
>(
value); }
243 s.
pack(
"ConstantSX::type",
'i');
256 #ifdef CASADI_WITH_THREADSAFE_SYMBOLICS
257 static std::mutex mutex_cached_constants;
289 casadi_int
to_int()
const override {
return 0;}
297 bool is_zero()
const override {
return true; }
302 s.
pack(
"ConstantSX::type",
'0');
320 static OneSX instance;
329 casadi_int
to_int()
const override {
return 1;}
335 bool is_one()
const override {
return true; }
338 s.
pack(
"ConstantSX::type",
'1');
368 casadi_int
to_int()
const override {
return -1;}
380 s.
pack(
"ConstantSX::type",
'm');
399 static InfSX instance;
407 double to_double()
const override {
return std::numeric_limits<double>::infinity();}
412 bool is_inf()
const override {
return true; }
415 s.
pack(
"ConstantSX::type",
'F');
443 double to_double()
const override {
return -std::numeric_limits<double>::infinity();}
451 s.
pack(
"ConstantSX::type",
'f');
468 static NanSX instance;
476 double to_double()
const override {
return std::numeric_limits<double>::quiet_NaN();}
481 bool is_nan()
const override {
return true; }
484 s.
pack(
"ConstantSX::type",
'n');
491 s.
unpack(
"ConstantSX::type", type);
497 s.
unpack(
"ConstantSX::value", value);
502 s.
unpack(
"ConstantSX::value", value);
510 default: casadi_error(
"ConstantSX::deserialize error");
Represents a constant SX.
casadi_int op() const override
Get the operation.
std::string class_name() const override
Get type name.
std::string print(const std::string &arg1, const std::string &arg2) const override
Print expression.
bool is_equal(const SXNode *node, casadi_int depth) const override
Check if two nodes are equivalent up to a given depth.
bool is_constant() const override
Properties.
double to_double() const override=0
Get the value must be defined.
Helper class for Serialization.
void unpack(Sparsity &e)
Reconstruct an object from the input stream.
Represents an infinity SX.
double to_double() const override
Get the value.
static InfSX * singleton()
void serialize_node(SerializingStream &s) const override
bool is_inf() const override
Properties.
Represents a constant integer SX.
static CACHING_MAP< casadi_int, IntegerSX * > cached_constants_
Hash map of all constants currently allocated.
static IntegerSX * create(casadi_int value)
Static creator function (use instead of constructor)
casadi_int to_int() const override
evaluate function
void serialize_node(SerializingStream &s) const override
~IntegerSX() override
Destructor.
double to_double() const override
evaluate function
bool is_integer() const override
Properties.
Represents a minus infinity SX.
bool is_minus_inf() const override
Properties.
void serialize_node(SerializingStream &s) const override
double to_double() const override
Get the value.
static MinusInfSX * singleton()
Represents a minus one SX.
double to_double() const override
Get the value.
bool is_minus_one() const override
Properties.
bool is_integer() const override
Properties.
static MinusOneSX * singleton()
void serialize_node(SerializingStream &s) const override
casadi_int to_int() const override
Get the value.
Represents a not-a-number SX.
bool is_nan() const override
Properties.
static NanSX * singleton()
double to_double() const override
Get the value.
void serialize_node(SerializingStream &s) const override
double to_double() const override
Get the value.
void serialize_node(SerializingStream &s) const override
bool is_integer() const override
Properties.
casadi_int to_int() const override
Get value of a constant node.
static OneSX * singleton()
bool is_one() const override
check properties of a node
static CACHING_MAP< double, RealtypeSX * > cached_constants_
Hash map of all constants currently allocated.
double value
Data members.
bool is_almost_zero(double tol) const override
check properties of a node
~RealtypeSX() override
Destructor.
double to_double() const override
Get the value.
static RealtypeSX * create(double value)
Static creator function (use instead of constructor)
void serialize_node(SerializingStream &s) const override
casadi_int to_int() const override
Get the value.
Internal node class for SX.
Helper class for Serialization.
void pack(const Sparsity &e)
Serializes an object to the output stream.
void serialize_node(SerializingStream &s) const override
casadi_int to_int() const override
Get the value.
double to_double() const override
Get the value.
bool is_almost_zero(double tol) const override
Properties.
bool is_integer() const override
Properties.
static ZeroSX * singleton()
bool is_zero() const override
Properties.
SXNode * ConstantSX_deserialize(DeserializingStream &s)