5#include "cdm/properties/SEProperty.h"
7#define ZERO_APPROX 1e-10
26 bool m_readOnly=
false;
36 virtual void Invalidate();
37 virtual void ForceInvalidate();
53 virtual bool IsValid()
const;
56 bool IsPositive()
const;
57 bool IsNegative()
const;
58 bool IsZero(
double limit = ZERO_APPROX)
const;
60 void SetReadOnly(
bool b);
61 bool IsReadOnly()
const;
63 double GetValue()
const;
64 void SetValue(
double d);
65 void ForceValue(
double d);
68 double IncrementValue(
double d);
69 double ForceIncrementValue(
double d);
72 double MultiplyValue(
double d);
74 void Average(
int cnt);
76 bool Equals(
const SEScalar& to)
const;
78 virtual std::string ToString()
const;
79 virtual void ToString(std::ostream &str)
const;
82 static bool IsNumber(
double d);
83 static bool IsZero(
double value,
double limit);
84 static bool IsValue(
double target,
double value);
87inline std::ostream& operator<< (std::ostream& out,
const SEScalar* s)
95inline std::ostream& operator<< (std::ostream& out,
const SEScalar& s)
101template <
typename Enum>
207template <
typename Unit>
217 virtual bool IsValid()
const override;
243 const Unit*
GetUnit()
const override;
246 virtual double GetValue(
const Unit& unit)
const;
249 virtual void SetValue(
double d,
const Unit& unit);
252 virtual void ForceValue(
double d,
const Unit& unit);
272 std::string
ToString()
const override;
273 void ToString(std::ostream &str)
const override;
293 virtual bool HasScalar()
const;
294 virtual void SetScalar(
const SEScalar& s);
296 virtual bool IsValid()
const;
297 virtual bool IsInfinity()
const;
299 virtual bool HasUnit()
const;
302 virtual const CCompoundUnit* GetCompoundUnit(
const std::string& unit)
const;
304 virtual double GetValue()
const;
307 std::string GetString()
const;
331inline void ValueOverride(
SEScalar& s,
double value)
347inline void IncrementOverride(
SEScalar& s,
double value)
363#define DEFINE_SCALAR_PTR(name, type) \
365 bool Has##name() const \
367 return m_##name==nullptr?false:m_##name->IsValid(); \
369 SEScalar##type& Get##name() \
371 if(m_##name==nullptr) \
372 m_##name = new SE##type(); \
375 double Get##name() const \
377 if (m_##name == nullptr) \
378 return SEScalar::dNaN(); \
379 return m_##name->GetValue(); \
382 SEScalar##type m_##name;
384#define DEFINE_UNIT_SCALAR_PTR(name, type) \
386 bool Has##name() const \
388 return m_##name==nullptr?false:m_##name->IsValid(); \
390 SEScalar##type& Get##name() \
392 if(m_##name==nullptr) \
393 m_##name = new SE##type(); \
396 double Get##name(const type##Unit& unit) const \
398 if (m_##name == nullptr) \
399 return SEScalar::dNaN(); \
400 return m_##name->GetValue(unit); \
403 SEScalar##type m_##name;
405#define DEFINE_SCALAR(name, type) \
407 bool Has##name() const { return m_##name.IsValid(); } \
408 SEScalar##type& Get##name() { return m_##name; } \
409 double Get##name() const { return m_##name.GetValue(); } \
411 SEScalar##type m_##name;
413#define DEFINE_UNIT_SCALAR(name, type) \
415 bool Has##name() const { return m_##name.IsValid(); } \
416 SEScalar##type& Get##name() { return m_##name; } \
417 double Get##name(const type##Unit& unit) const { return m_##name.GetValue(unit); } \
419 SEScalar##type m_##name;
Definition: CompoundUnit.h:40
Definition: SEScalar.h:10
static const NoUnit unitless
Definition: SEScalar.h:15
virtual ~NoUnit()
Definition: SEScalar.h:13
NoUnit()
Definition: SEScalar.h:12
Definition: PBProperties.h:86
static void Copy(const SECurve &src, SECurve &dst)
Definition: PBProperties.cpp:81
If you want to querry what a scalar is and don't know what scalar type you have...
Definition: SEScalar.h:287
const SEScalar * m_Scalar
Definition: SEScalar.h:311
const SEUnitScalar * m_UnitScalar
Definition: SEScalar.h:312
virtual ~SEGenericScalar()
Definition: SEScalar.h:291
Definition: SEProperty.h:8
Definition: SEScalar.h:103
bool operator==(const Enum &e)
Definition: SEScalar.h:141
Enum m_enum
Definition: SEScalar.h:170
bool operator!=(const Enum &e)
Definition: SEScalar.h:145
void operator=(const Enum &e)
Definition: SEScalar.h:136
void Set(const SEScalarEnum< Enum > &s)
Definition: SEScalar.h:119
Enum GetEnum() const
Definition: SEScalar.h:130
void Copy(const SEScalarEnum< Enum > &s)
Definition: SEScalar.h:124
virtual void ForceInvalidate() override
Definition: SEScalar.h:113
SEScalarEnum()
Definition: SEScalar.h:105
virtual ~SEScalarEnum()
Definition: SEScalar.h:106
virtual void Invalidate() override
Definition: SEScalar.h:108
Definition: SEScalar.h:19
double MultiplyValue(double d)
Definition: SEScalar.cpp:210
double Multiply(const SEScalar &s)
Definition: SEScalar.cpp:201
double ForceIncrementValue(double d)
Definition: SEScalar.cpp:190
bool IsInfinity() const
Definition: SEScalar.h:54
bool Set(const SEScalar &s)
Definition: SEScalar.cpp:41
virtual void ForceInvalidate()
Definition: SEScalar.cpp:94
static double dNaN()
Definition: SEScalar.cpp:10
void Average(int cnt)
Definition: SEScalar.cpp:221
double IncrementValue(double d)
Definition: SEScalar.cpp:179
void SetReadOnly(bool b)
Definition: SEScalar.cpp:129
void ForceValue(double d)
Definition: SEScalar.cpp:158
void SetValue(double d)
Definition: SEScalar.cpp:145
virtual std::string ToString() const
Definition: SEScalar.cpp:241
bool IsReadOnly() const
Definition: SEScalar.cpp:133
virtual void Invalidate()
Definition: SEScalar.cpp:85
bool IsPositive() const
Definition: SEScalar.cpp:115
double m_value
Definition: SEScalar.h:22
bool IsZero(double limit=ZERO_APPROX) const
Definition: SEScalar.cpp:108
bool IsNegative() const
Definition: SEScalar.cpp:122
double Increment(const SEScalar &s)
Definition: SEScalar.cpp:170
Definition: SEScalar.h:209
bool Force(const SEScalar &s) override
Definition: SEScalar.cpp:341
double IncrementValue(double d)=delete
double ForceIncrementValue(double d)=delete
virtual double ForceIncrementValue(double d, const CCompoundUnit &unit) override
Definition: SEScalar.cpp:490
double GetValue() const =delete
virtual void ForceValue(double d, const CCompoundUnit &unit) override
Definition: SEScalar.cpp:438
virtual void Invalidate() override
Definition: SEScalar.cpp:275
virtual bool IsValid() const override
Definition: SEScalar.cpp:289
void SetValue(double d)=delete
virtual void ForceInvalidate() override
Definition: SEScalar.cpp:282
const Unit * GetUnit() const override
Definition: SEScalar.cpp:394
virtual double IncrementValue(double d, const CCompoundUnit &unit) override
Definition: SEScalar.cpp:469
double MultiplyValue(double d)=delete
double Multiply(const SEScalar &s)=delete
void ForceValue(double d)=delete
const Unit * m_unit
Definition: SEScalar.h:276
bool HasUnit() const override
Definition: SEScalar.cpp:389
virtual const CCompoundUnit * GetCompoundUnit(const std::string &unit) const override
Definition: SEScalar.cpp:547
bool Set(const SEScalar &s) override
Definition: SEScalar.cpp:299
SEScalarQuantity()
Definition: SEScalar.h:212
std::string ToString() const override
Definition: SEScalar.cpp:553
void Copy(const SEScalar &s) override
Definition: SEScalar.cpp:326
double Increment(const SEScalar &s)=delete
virtual void SetValue(double d, const CCompoundUnit &unit) override
Definition: SEScalar.cpp:430
virtual double MultiplyValue(double d, const CCompoundUnit &unit) override
Definition: SEScalar.cpp:521
virtual ~SEScalarQuantity()
Definition: SEScalar.cpp:269
bool Equals(const SEScalar &to) const =delete
An interface to be used for gaining access to a scalar with any unit type
Definition: SEScalar.h:179
SEUnitScalar()
Definition: SEScalar.h:184
virtual double ForceIncrementValue(double d, const CCompoundUnit &unit)=0
friend SEGenericScalar
Definition: SEScalar.h:181
virtual double MultiplyValue(double d, const CCompoundUnit &unit)=0
virtual ~SEUnitScalar()
Definition: SEScalar.h:185
virtual bool Set(const SEScalar &s)=0
virtual void Invalidate()=0
virtual void SetValue(double d, const CCompoundUnit &unit)=0
virtual bool HasUnit() const =0
virtual double GetValue(const CCompoundUnit &unit) const =0
virtual void Copy(const SEScalar &s)=0
virtual bool Force(const SEScalar &s)=0
virtual const CCompoundUnit * GetUnit() const =0
virtual double IncrementValue(double d, const CCompoundUnit &unit)=0
virtual void ForceInvalidate()=0
virtual void ForceValue(double d, const CCompoundUnit &unit)=0
virtual bool IsValid() const =0
virtual const CCompoundUnit * GetCompoundUnit(const std::string &unit) const =0