🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
Quantity.hpp
浏览该文件的文档.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include "AstUtil/Unit.hpp"
25#include <string>
26#include <limits> // for std::numeric_limits
27
28AST_NAMESPACE_BEGIN
29
43class Quantity;
44
49AST_UTIL_API Quantity aQuantityAdd(const Quantity& q1, const Quantity& q2);
50
55AST_UTIL_API Quantity aQuantitySub(const Quantity& q1, const Quantity& q2);
56
57
62AST_UTIL_API Quantity aQuantityMul(const Quantity& q1, const Quantity& q2);
63
64
69AST_UTIL_API Quantity aQuantityMul(const Quantity& q, const Unit& unit);
70
71
76AST_UTIL_API Quantity aQuantityDiv(const Quantity& q1, const Quantity& q2);
77
78
83AST_UTIL_API Quantity aQuantityDiv(const Quantity& q, const Unit& unit);
84
85
88AST_UTIL_API void aQuantityReduce(Quantity& q);
89
90
94AST_UTIL_API std::string aQuantityToString(const Quantity& q);
95
96A_ALWAYS_INLINE std::string aFormatQuantity(const Quantity& q)
97{
98 return aQuantityToString(q);
99}
100
105AST_UTIL_API Quantity operator*(double value, const Unit& unit);
106
107
108
114{
115public:
117 static Quantity NaN()
118 {
119 // 无效数量值使用NaN表示
120 return Quantity(std::numeric_limits<double>::quiet_NaN(), Unit::NaN());
121 }
122
124 static Quantity Zero()
125 {
126 return Scalar(0.0);
127 }
128
130 static Quantity One()
131 {
132 return Scalar(1.0);
133 }
134
136 static Quantity Scalar(double value)
137 {
138 return Quantity(value, Unit::None());
139 }
140
141public:
142 Quantity()
143 : magnitude_(0.0), unit_{}
144 {}
148 Quantity(double magnitude, const Unit& unit)
149 : magnitude_(magnitude), unit_(unit)
150 {}
154 explicit Quantity(double magnitude)
155 : magnitude_(magnitude), unit_(Unit::None())
156 {}
157public:
160 double magnitude() const { return magnitude_; }
161
164 double& magnitude() { return magnitude_; }
165
168 double getMagnitude() const { return magnitude_; }
169
172 void setMagnitude(double value) { magnitude_ = value; }
173
176 const Unit& unit() const { return unit_; }
177
180 Unit& unit() { return unit_; }
181
184 const Unit& getUnit() const { return unit_; }
185
190 void setUnit(const Unit& unit) { unit_ = unit; }
191
196 void changeUnit(const Unit& unit);
197
200 EDimension dimension() const { return unit_.dimension(); }
201
204 double getValueSI() const { return unit_.toSI(magnitude_); }
205
209 void setValueSI(double value) { magnitude_ = unit_.fromSI(value); }
210
214 double getValueInUnit(const Unit& unit) const { return unit_.convertTo(magnitude_, unit); }
215
220 void setValueInUnit(double value, const Unit& unit) { magnitude_ = unit_.convertFrom(value, unit); }
221
225 void setValueUnit(double value, const Unit& unit) { magnitude_ = value; unit_ = unit; }
226
229 bool isValid() const { return unit_.isValid(); }
230
234 bool operator ==(const Quantity& q) const{
235 return this->dimension() == q.dimension() && this->getValueSI() == q.getValueSI();
236 }
240 bool operator !=(const Quantity& q) const{return !(*this == q);}
241
245 bool operator == (double value) const{
246 return this->dimension() == EDimension::eUnit && this->getValueSI() == value;
247 }
248
252 bool operator != (double value) const{
253 return !(*this == value);
254 }
255
257 Quantity invert() const { return Quantity(1.0 / magnitude_, unit_.invert()); }
258
260 Quantity operator+() const { return *this; }
262 Quantity operator-() const { return Quantity(-magnitude_, unit_); }
263
265 Quantity operator*(double scale) const { return Quantity(magnitude_ * scale, unit_); }
267 Quantity operator/(double scale) const { return Quantity(magnitude_ / scale, unit_); }
269 Quantity& operator*=(double scale) { magnitude_ *= scale; return *this; }
271 Quantity& operator/=(double scale) { magnitude_ /= scale; return *this; }
273 Quantity operator*(const Unit& unit) const { return aQuantityMul(*this, unit); }
275 Quantity operator/(const Unit& unit) const { return aQuantityDiv(*this, unit); }
277 Quantity& operator*=(const Unit& unit) { *this = aQuantityMul(*this, unit); return *this; }
279 Quantity& operator/=(const Unit& unit) { *this = aQuantityDiv(*this, unit); return *this; }
280
281
283 Quantity operator+(const Quantity& q) const { return aQuantityAdd(*this, q); }
285 Quantity operator-(const Quantity& q) const { return aQuantitySub(*this, q); }
287 Quantity operator*(const Quantity& q) const { return aQuantityMul(*this, q); }
289 Quantity operator/(const Quantity& q) const { return aQuantityDiv(*this, q); }
291 Quantity& operator+=(const Quantity& q) { *this = aQuantityAdd(*this, q); return *this; }
293 Quantity& operator-=(const Quantity& q) { *this = aQuantitySub(*this, q); return *this; }
295 Quantity& operator*=(const Quantity& q) { *this = aQuantityMul(*this, q); return *this; }
297 Quantity& operator/=(const Quantity& q) { *this = aQuantityDiv(*this, q); return *this; }
300 std::string toString() const{return aQuantityToString(*this);}
301private:
302 double magnitude_;
303 Unit unit_;
304};
305
306inline void Quantity::changeUnit(const Unit &unit)
307{
308 magnitude_ = unit_.convertTo(magnitude_, unit);
309 unit_ = unit;
310}
311
312inline Quantity operator*(double value, const Quantity& q)
313{
314 return q * value;
315}
316
317inline Quantity operator/(double value, const Quantity& q)
318{
319 return value * q.invert();
320}
321
324AST_NAMESPACE_END
数量值
定义 Quantity.hpp:114
Quantity & operator*=(const Quantity &q)
数量值乘法赋值
定义 Quantity.hpp:295
Quantity operator/(double scale) const
数量值除法
定义 Quantity.hpp:267
Quantity & operator*=(const Unit &unit)
数量值单位乘法赋值
定义 Quantity.hpp:277
Quantity & operator/=(const Quantity &q)
数量值除法赋值
定义 Quantity.hpp:297
Quantity operator*(const Unit &unit) const
数量值单位乘法
定义 Quantity.hpp:273
Quantity & operator-=(const Quantity &q)
数量值减法赋值
定义 Quantity.hpp:293
Quantity & operator+=(const Quantity &q)
数量值加法赋值
定义 Quantity.hpp:291
Quantity operator-() const
数量值取负
定义 Quantity.hpp:262
void setValueSI(double value)
设置国际单位表示的值
定义 Quantity.hpp:209
void setValueUnit(double value, const Unit &unit)
设置数值大小和单位
定义 Quantity.hpp:225
Quantity & operator*=(double scale)
数量值缩放赋值
定义 Quantity.hpp:269
static Quantity Zero()
零数量值
定义 Quantity.hpp:124
double getValueInUnit(const Unit &unit) const
获取指定单位下的值
定义 Quantity.hpp:214
double getValueSI() const
获取国际单位表示的值
定义 Quantity.hpp:204
Quantity operator/(const Quantity &q) const
数量值除法
定义 Quantity.hpp:289
Quantity operator+(const Quantity &q) const
数量值加法
定义 Quantity.hpp:283
void setUnit(const Unit &unit)
设置单位
定义 Quantity.hpp:190
const Unit & getUnit() const
获取单位
定义 Quantity.hpp:184
static Quantity Scalar(double value)
标量数量值
定义 Quantity.hpp:136
double & magnitude()
获取可修改的数值大小
定义 Quantity.hpp:164
Quantity & operator/=(double scale)
数量值除法赋值
定义 Quantity.hpp:271
Quantity operator*(double scale) const
数量值缩放
定义 Quantity.hpp:265
Quantity(double magnitude)
构造函数
定义 Quantity.hpp:154
Quantity operator+() const
数量值取正
定义 Quantity.hpp:260
static Quantity One()
单位数量值
定义 Quantity.hpp:130
EDimension dimension() const
获取量纲
定义 Quantity.hpp:200
bool isValid() const
检查数量值是否有效
定义 Quantity.hpp:229
Quantity & operator/=(const Unit &unit)
数量值单位除法赋值
定义 Quantity.hpp:279
void setMagnitude(double value)
设置数值大小
定义 Quantity.hpp:172
Quantity(double magnitude, const Unit &unit)
构造函数
定义 Quantity.hpp:148
Quantity invert() const
数量值取倒数
定义 Quantity.hpp:257
Quantity operator-(const Quantity &q) const
数量值减法
定义 Quantity.hpp:285
void setValueInUnit(double value, const Unit &unit)
设置指定单位下的值
定义 Quantity.hpp:220
std::string toString() const
数量值转换为字符串
定义 Quantity.hpp:300
double getMagnitude() const
获取数值大小
定义 Quantity.hpp:168
const Unit & unit() const
获取单位
定义 Quantity.hpp:176
static Quantity NaN()
无效数量值
定义 Quantity.hpp:117
double magnitude() const
获取数值大小
定义 Quantity.hpp:160
Quantity operator*(const Quantity &q) const
数量值乘法
定义 Quantity.hpp:287
Unit & unit()
获取可修改的单位
定义 Quantity.hpp:180
Quantity operator/(const Unit &unit) const
数量值单位除法
定义 Quantity.hpp:275
单位
定义 Unit.hpp:136
double convertTo(double value, const Unit &unit) const
转换为指定单位下的值
定义 Unit.hpp:424
Quantity aQuantityAdd(const Quantity &q1, const Quantity &q2)
数量值加法
定义 Quantity.cpp:34
std::string aQuantityToString(const Quantity &q)
数量值转换为字符串
定义 Quantity.cpp:89
Quantity aQuantityMul(const Quantity &q1, const Quantity &q2)
数量值乘法
定义 Quantity.cpp:59
void aQuantityReduce(Quantity &q)
数量值简化
定义 Quantity.cpp:27
Quantity aQuantitySub(const Quantity &q1, const Quantity &q2)
数量值减法
定义 Quantity.cpp:54
Quantity aQuantityDiv(const Quantity &q1, const Quantity &q2)
数量值除法
定义 Quantity.cpp:73
EDimension
量纲枚举类
定义 Dimension.hpp:293