5 #include "cdm/properties/SEProperty.h" 7 #define ZERO_APPROX 1e-10 26 bool m_readOnly=
false;
37 virtual void ForceInvalidate();
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);
71 double MultiplyValue(
double d);
73 void Average(
int cnt);
75 bool Equals(
const SEScalar& to)
const;
77 virtual std::string ToString()
const;
78 virtual void ToString(std::ostream &str)
const;
81 static unsigned long long int NaN;
82 static bool IsNumber(
double d);
83 static bool IsZero(
double value,
double limit);
84 static bool IsValue(
double target,
double value);
87 inline std::ostream& operator<< (std::ostream& out,
const SEScalar* s)
95 inline std::ostream& operator<< (std::ostream& out,
const SEScalar& s)
101 template <
typename Enum>
186 virtual bool IsValid()
const = 0;
189 virtual bool HasUnit()
const = 0;
202 virtual const CCompoundUnit* GetCompoundUnit(
const std::string& unit)
const = 0;
205 template <
typename Unit>
213 virtual void Invalidate()
override;
214 virtual void ForceInvalidate()
override;
215 virtual bool IsValid()
const override;
221 bool Set(
const SEScalar& s)
override;
223 bool Force(
const SEScalar& s)
override;
225 virtual double GetValue(
const CCompoundUnit& unit)
const override;
226 virtual void SetValue(
double d,
const CCompoundUnit& unit)
override;
227 virtual void ForceValue(
double d,
const CCompoundUnit& unit)
override;
228 virtual double IncrementValue(
double d,
const CCompoundUnit& unit)
override;
229 virtual double MultiplyValue(
double d,
const CCompoundUnit& unit)
override;
231 virtual const CCompoundUnit* GetCompoundUnit(
const std::string& unit)
const override;
239 virtual bool HasUnit()
const;
240 virtual const Unit* GetUnit()
const;
242 double GetValue()
const =
delete;
243 virtual double GetValue(
const Unit& unit)
const;
245 void SetValue(
double d) =
delete;
246 virtual void SetValue(
double d,
const Unit& unit);
248 void ForceValue(
double d) =
delete;
249 virtual void ForceValue(
double d,
const Unit& unit);
251 double IncrementValue(
double d) =
delete;
252 virtual double IncrementValue(
double d,
const Unit& unit);
254 double Increment(
const SEScalar& s) =
delete;
257 double MultiplyValue(
double d) =
delete;
258 virtual double MultiplyValue(
double d,
const Unit& unit);
260 double Multiply(
const SEScalar& s) =
delete;
263 bool Equals(
const SEScalar& to)
const =
delete;
266 virtual std::string ToString()
const;
267 virtual void ToString(std::ostream &str)
const;
270 const Unit* m_unit=
nullptr;
287 virtual bool HasScalar()
const;
288 virtual void SetScalar(
const SEScalar& s);
290 virtual bool IsValid()
const;
291 virtual bool IsInfinity()
const;
293 virtual bool HasUnit()
const;
296 virtual const CCompoundUnit* GetCompoundUnit(
const std::string& unit)
const;
298 virtual double GetValue()
const;
301 std::string GetString()
const;
325 inline void ValueOverride(
SEScalar& s,
double value)
341 inline void IncrementOverride(
SEScalar& s,
double value)
357 #define DEFINE_SCALAR_PTR(name, type) \ 359 bool Has##name() const \ 361 return m_##name==nullptr?false:m_##name->IsValid(); \ 363 SEScalar##type& Get##name() \ 365 if(m_##name==nullptr) \ 366 m_##name = new SE##type(); \ 369 double Get##name() const \ 371 if (m_##name == nullptr) \ 372 return SEScalar::dNaN(); \ 373 return m_##name->GetValue(); \ 376 SEScalar##type m_##name; 378 #define DEFINE_UNIT_SCALAR_PTR(name, type) \ 380 bool Has##name() const \ 382 return m_##name==nullptr?false:m_##name->IsValid(); \ 384 SEScalar##type& Get##name() \ 386 if(m_##name==nullptr) \ 387 m_##name = new SE##type(); \ 390 double Get##name(const type##Unit& unit) const \ 392 if (m_##name == nullptr) \ 393 return SEScalar::dNaN(); \ 394 return m_##name->GetValue(unit); \ 397 SEScalar##type m_##name; 399 #define DEFINE_SCALAR(name, type) \ 401 bool Has##name() const { return m_##name.IsValid(); } \ 402 SEScalar##type& Get##name() { return m_##name; } \ 403 double Get##name() const { return m_##name.GetValue(); } \ 405 SEScalar##type m_##name; 407 #define DEFINE_UNIT_SCALAR(name, type) \ 409 bool Has##name() const { return m_##name.IsValid(); } \ 410 SEScalar##type& Get##name() { return m_##name; } \ 411 double Get##name(const type##Unit& unit) const { return m_##name.GetValue(unit); } \ 413 SEScalar##type m_##name; virtual void ForceInvalidate() override
Definition: SEScalar.h:113
Definition: SEScalar.h:18
virtual ~NoUnit()
Definition: SEScalar.h:13
bool operator==(const Enum &e)
Definition: SEScalar.h:141
bool operator!=(const Enum &e)
Definition: SEScalar.h:145
void SetReadOnly(bool b)
Definition: SEScalar.cpp:141
void Set(const SEScalarEnum< Enum > &s)
Definition: SEScalar.h:119
bool IsInfinity() const
Definition: SEScalar.h:54
bool IsReadOnly() const
Definition: SEScalar.cpp:145
double Multiply(const SEScalar &s)
Definition: SEScalar.cpp:203
Enum m_enum
Definition: SEScalar.h:169
double Increment(const SEScalar &s)
Definition: SEScalar.cpp:182
double GetValue() const
Definition: SEScalar.cpp:150
virtual void Invalidate()=0
virtual double IncrementValue(double d, const CCompoundUnit &unit) override
Definition: SEScalar.cpp:471
virtual void SetValue(double d, const CCompoundUnit &unit) override
Definition: SEScalar.cpp:432
SEUnitScalar()
Definition: SEScalar.h:183
static unsigned long long int NaN
Definition: SEScalar.h:81
void SetValue(double d)
Definition: SEScalar.cpp:157
static void Copy(const SECurve &src, SECurve &dst)
Definition: PBProperties.cpp:80
If you want to querry what a scalar is and don't know what scalar type you have...
Definition: SEScalar.h:280
virtual void Invalidate() override
Definition: SEScalar.h:108
bool Set(const SEScalar &s) override
Definition: SEScalar.cpp:301
Definition: SEScalar.h:206
virtual ~SEScalarEnum()
Definition: SEScalar.h:106
Definition: SEScalar.h:102
double MultiplyValue(double d)
Definition: SEScalar.cpp:212
virtual void ForceInvalidate()
Definition: SEScalar.cpp:106
virtual bool IsValid() const
Definition: SEScalar.cpp:113
static const NoUnit unitless
Definition: SEScalar.h:15
bool Force(const SEScalar &s)
Definition: SEScalar.cpp:71
void Copy(const SEScalar &s)
Definition: SEScalar.cpp:88
bool IsZero(double limit=ZERO_APPROX) const
Definition: SEScalar.cpp:120
double m_value
Definition: SEScalar.h:22
double IncrementValue(double d)
Definition: SEScalar.cpp:191
An interface to be used for gaining access to a scalar with any unit type
Definition: SEScalar.h:177
virtual ~SEGenericScalar()
Definition: SEScalar.h:285
void operator=(const Enum &e)
Definition: SEScalar.h:136
Enum GetEnum() const
Definition: SEScalar.h:130
void ForceValue(double d)
Definition: SEScalar.cpp:170
virtual void Invalidate()
Definition: SEScalar.cpp:97
virtual bool IsValid() const =0
NoUnit()
Definition: SEScalar.h:12
bool IsNegative() const
Definition: SEScalar.cpp:134
bool Set(const SEScalar &s)
Definition: SEScalar.cpp:53
virtual ~SEUnitScalar()
Definition: SEScalar.h:184
const SEScalar * m_Scalar
Definition: SEScalar.h:305
friend SEGenericScalar
Definition: SEScalar.h:180
const SEUnitScalar * m_UnitScalar
Definition: SEScalar.h:306
SEScalarEnum()
Definition: SEScalar.h:105
void Copy(const SEScalarEnum< Enum > &s)
Definition: SEScalar.h:124
Definition: CompoundUnit.h:39
bool IsPositive() const
Definition: SEScalar.cpp:127
Definition: PBProperties.h:84
Definition: SEProperty.h:7
virtual std::string ToString() const
Definition: SEScalar.cpp:243
SEScalarQuantity()
Definition: SEScalar.h:210
void Average(int cnt)
Definition: SEScalar.cpp:223