density is not an SI base unit
This commit is contained in:
@@ -33,8 +33,7 @@
|
||||
using namespace Base;
|
||||
|
||||
static inline void checkRange(const char * op, int length, int mass, int time, int electricCurrent,
|
||||
int thermodynamicTemperature, int amountOfSubstance, int luminousIntensity, int angle,
|
||||
int density)
|
||||
int thermodynamicTemperature, int amountOfSubstance, int luminousIntensity, int angle)
|
||||
{
|
||||
if ( ( length >= (1 << (UnitSignatureLengthBits - 1)) ) ||
|
||||
( mass >= (1 << (UnitSignatureMassBits - 1)) ) ||
|
||||
@@ -43,8 +42,7 @@ static inline void checkRange(const char * op, int length, int mass, int time, i
|
||||
( thermodynamicTemperature >= (1 << (UnitSignatureThermodynamicTemperatureBits - 1)) ) ||
|
||||
( amountOfSubstance >= (1 << (UnitSignatureAmountOfSubstanceBits - 1)) ) ||
|
||||
( luminousIntensity >= (1 << (UnitSignatureLuminousIntensityBits - 1)) ) ||
|
||||
( angle >= (1 << (UnitSignatureAngleBits - 1)) ) ||
|
||||
( density >= (1 << (UnitSignatureDensityBits - 1)) ) )
|
||||
( angle >= (1 << (UnitSignatureAngleBits - 1)) ) )
|
||||
throw Base::OverflowError((std::string("Unit overflow in ") + std::string(op)).c_str());
|
||||
if ( ( length < -(1 << (UnitSignatureLengthBits - 1)) ) ||
|
||||
( mass < -(1 << (UnitSignatureMassBits - 1)) ) ||
|
||||
@@ -53,8 +51,7 @@ static inline void checkRange(const char * op, int length, int mass, int time, i
|
||||
( thermodynamicTemperature < -(1 << (UnitSignatureThermodynamicTemperatureBits - 1)) ) ||
|
||||
( amountOfSubstance < -(1 << (UnitSignatureAmountOfSubstanceBits - 1)) ) ||
|
||||
( luminousIntensity < -(1 << (UnitSignatureLuminousIntensityBits - 1)) ) ||
|
||||
( angle < -(1 << (UnitSignatureAngleBits - 1)) ) ||
|
||||
( density < -(1 << (UnitSignatureDensityBits - 1)) ) )
|
||||
( angle < -(1 << (UnitSignatureAngleBits - 1)) ) )
|
||||
throw Base::OverflowError((std::string("Unit underflow in ") + std::string(op)).c_str());
|
||||
}
|
||||
|
||||
@@ -65,8 +62,7 @@ Unit::Unit(int8_t Length,
|
||||
int8_t ThermodynamicTemperature,
|
||||
int8_t AmountOfSubstance,
|
||||
int8_t LuminousIntensity,
|
||||
int8_t Angle,
|
||||
int8_t Density)
|
||||
int8_t Angle)
|
||||
{
|
||||
checkRange("unit",
|
||||
(int32_t)Length,
|
||||
@@ -76,8 +72,7 @@ Unit::Unit(int8_t Length,
|
||||
(int32_t)ThermodynamicTemperature,
|
||||
(int32_t)AmountOfSubstance,
|
||||
(int32_t)LuminousIntensity,
|
||||
(int32_t)Angle,
|
||||
(int32_t)Density);
|
||||
(int32_t)Angle);
|
||||
|
||||
Sig.Length = Length;
|
||||
Sig.Mass = Mass;
|
||||
@@ -87,7 +82,6 @@ Unit::Unit(int8_t Length,
|
||||
Sig.AmountOfSubstance = AmountOfSubstance;
|
||||
Sig.LuminousIntensity = LuminousIntensity;
|
||||
Sig.Angle = Angle;
|
||||
Sig.Density = Density;
|
||||
}
|
||||
|
||||
|
||||
@@ -101,7 +95,6 @@ Unit::Unit()
|
||||
Sig.AmountOfSubstance = 0;
|
||||
Sig.LuminousIntensity = 0;
|
||||
Sig.Angle = 0;
|
||||
Sig.Density = 0;
|
||||
}
|
||||
|
||||
Unit::Unit(const Unit& that)
|
||||
@@ -123,7 +116,6 @@ Unit::Unit(const QString& expr)
|
||||
Sig.AmountOfSubstance = 0;
|
||||
Sig.LuminousIntensity = 0;
|
||||
Sig.Angle = 0;
|
||||
Sig.Density = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -137,8 +129,7 @@ Unit Unit::pow(signed char exp) const
|
||||
(int32_t)Sig.ThermodynamicTemperature * (int32_t)exp,
|
||||
(int32_t)Sig.AmountOfSubstance * (int32_t)exp,
|
||||
(int32_t)Sig.LuminousIntensity * (int32_t)exp,
|
||||
(int32_t)Sig.Angle * (int32_t)exp,
|
||||
(int32_t)Sig.Density * (int32_t)exp);
|
||||
(int32_t)Sig.Angle * (int32_t)exp);
|
||||
|
||||
Unit result;
|
||||
result.Sig.Length = Sig.Length * exp;
|
||||
@@ -149,7 +140,6 @@ Unit Unit::pow(signed char exp) const
|
||||
result.Sig.AmountOfSubstance = Sig.AmountOfSubstance * exp;
|
||||
result.Sig.LuminousIntensity = Sig.LuminousIntensity * exp;
|
||||
result.Sig.Angle = Sig.Angle * exp;
|
||||
result.Sig.Density = Sig.Density * exp;
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -163,8 +153,7 @@ bool Unit::isEmpty(void)const
|
||||
&& (this->Sig.ThermodynamicTemperature == 0)
|
||||
&& (this->Sig.AmountOfSubstance == 0)
|
||||
&& (this->Sig.LuminousIntensity == 0)
|
||||
&& (this->Sig.Angle == 0)
|
||||
&& (this->Sig.Density == 0);
|
||||
&& (this->Sig.Angle == 0);
|
||||
}
|
||||
|
||||
bool Unit::operator ==(const Unit& that) const
|
||||
@@ -176,8 +165,7 @@ bool Unit::operator ==(const Unit& that) const
|
||||
&& (this->Sig.ThermodynamicTemperature == that.Sig.ThermodynamicTemperature)
|
||||
&& (this->Sig.AmountOfSubstance == that.Sig.AmountOfSubstance)
|
||||
&& (this->Sig.LuminousIntensity == that.Sig.LuminousIntensity)
|
||||
&& (this->Sig.Angle == that.Sig.Angle)
|
||||
&& (this->Sig.Density == that.Sig.Density);
|
||||
&& (this->Sig.Angle == that.Sig.Angle);
|
||||
}
|
||||
|
||||
|
||||
@@ -191,8 +179,7 @@ Unit Unit::operator *(const Unit &right) const
|
||||
(int32_t)Sig.ThermodynamicTemperature + (int32_t)right.Sig.ThermodynamicTemperature,
|
||||
(int32_t)Sig.AmountOfSubstance + (int32_t)right.Sig.AmountOfSubstance,
|
||||
(int32_t)Sig.LuminousIntensity + (int32_t)right.Sig.LuminousIntensity,
|
||||
(int32_t)Sig.Angle + (int32_t)right.Sig.Angle,
|
||||
(int32_t)Sig.Density + (int32_t)right.Sig.Density);
|
||||
(int32_t)Sig.Angle + (int32_t)right.Sig.Angle);
|
||||
|
||||
Unit result;
|
||||
result.Sig.Length = Sig.Length + right.Sig.Length;
|
||||
@@ -203,7 +190,6 @@ Unit Unit::operator *(const Unit &right) const
|
||||
result.Sig.AmountOfSubstance = Sig.AmountOfSubstance + right.Sig.AmountOfSubstance;
|
||||
result.Sig.LuminousIntensity = Sig.LuminousIntensity + right.Sig.LuminousIntensity;
|
||||
result.Sig.Angle = Sig.Angle + right.Sig.Angle;
|
||||
result.Sig.Density = Sig.Density + right.Sig.Density;
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -218,8 +204,7 @@ Unit Unit::operator /(const Unit &right) const
|
||||
(int32_t)Sig.ThermodynamicTemperature - (int32_t)right.Sig.ThermodynamicTemperature,
|
||||
(int32_t)Sig.AmountOfSubstance - (int32_t)right.Sig.AmountOfSubstance,
|
||||
(int32_t)Sig.LuminousIntensity - (int32_t)right.Sig.LuminousIntensity,
|
||||
(int32_t)Sig.Angle - (int32_t)right.Sig.Angle,
|
||||
(int32_t)Sig.Density - (int32_t)right.Sig.Density);
|
||||
(int32_t)Sig.Angle - (int32_t)right.Sig.Angle);
|
||||
|
||||
Unit result;
|
||||
result.Sig.Length = Sig.Length - right.Sig.Length;
|
||||
@@ -230,7 +215,6 @@ Unit Unit::operator /(const Unit &right) const
|
||||
result.Sig.AmountOfSubstance = Sig.AmountOfSubstance - right.Sig.AmountOfSubstance;
|
||||
result.Sig.LuminousIntensity = Sig.LuminousIntensity - right.Sig.LuminousIntensity;
|
||||
result.Sig.Angle = Sig.Angle - right.Sig.Angle;
|
||||
result.Sig.Density = Sig.Density - right.Sig.Density;
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -245,7 +229,6 @@ Unit& Unit::operator = (const Unit &New)
|
||||
Sig.AmountOfSubstance = New.Sig.AmountOfSubstance;
|
||||
Sig.LuminousIntensity = New.Sig.LuminousIntensity;
|
||||
Sig.Angle = New.Sig.Angle;
|
||||
Sig.Density = New.Sig.Density;
|
||||
|
||||
return *this;
|
||||
}
|
||||
@@ -264,8 +247,7 @@ QString Unit::getString(void) const
|
||||
Sig.ThermodynamicTemperature> 0 ||
|
||||
Sig.AmountOfSubstance > 0 ||
|
||||
Sig.LuminousIntensity > 0 ||
|
||||
Sig.Angle > 0 ||
|
||||
Sig.Density > 0 ){
|
||||
Sig.Angle > 0 ){
|
||||
|
||||
bool mult = false;
|
||||
if (Sig.Length > 0) {
|
||||
@@ -336,15 +318,6 @@ QString Unit::getString(void) const
|
||||
if (Sig.Angle > 1)
|
||||
ret << "^" << Sig.Angle;
|
||||
}
|
||||
|
||||
if (Sig.Density > 0) {
|
||||
if (mult)
|
||||
ret<<'*';
|
||||
mult = true;
|
||||
ret << "kg/m^3";
|
||||
if (Sig.Density > 1)
|
||||
ret << "^" << Sig.Density;
|
||||
}
|
||||
}
|
||||
else {
|
||||
ret << "1";
|
||||
@@ -357,8 +330,7 @@ QString Unit::getString(void) const
|
||||
Sig.ThermodynamicTemperature< 0 ||
|
||||
Sig.AmountOfSubstance < 0 ||
|
||||
Sig.LuminousIntensity < 0 ||
|
||||
Sig.Angle < 0 ||
|
||||
Sig.Density < 0 ){
|
||||
Sig.Angle < 0 ){
|
||||
ret << "/";
|
||||
|
||||
int nnom = 0;
|
||||
@@ -370,7 +342,6 @@ QString Unit::getString(void) const
|
||||
nnom += Sig.AmountOfSubstance<0?1:0;
|
||||
nnom += Sig.LuminousIntensity<0?1:0;
|
||||
nnom += Sig.Angle<0?1:0;
|
||||
nnom += Sig.Density<0?1:0;
|
||||
|
||||
if (nnom > 1)
|
||||
ret << '(';
|
||||
@@ -446,15 +417,6 @@ QString Unit::getString(void) const
|
||||
ret << "^" << abs(Sig.Angle);
|
||||
}
|
||||
|
||||
if (Sig.Density < 0) {
|
||||
if (mult)
|
||||
ret<<'*';
|
||||
mult = true;
|
||||
ret << "kg/m^3";
|
||||
if (Sig.Density < -1)
|
||||
ret << "^" << abs(Sig.Density);
|
||||
}
|
||||
|
||||
if (nnom > 1)
|
||||
ret << ')';
|
||||
}
|
||||
|
||||
@@ -42,7 +42,6 @@ namespace Base {
|
||||
#define UnitSignatureAmountOfSubstanceBits 4
|
||||
#define UnitSignatureLuminousIntensityBits 4
|
||||
#define UnitSignatureAngleBits 4
|
||||
#define UnitSignatureDensityBits 4
|
||||
|
||||
struct UnitSignature{
|
||||
int32_t Length:UnitSignatureLengthBits;
|
||||
@@ -53,7 +52,6 @@ struct UnitSignature{
|
||||
int32_t AmountOfSubstance:UnitSignatureAmountOfSubstanceBits;
|
||||
int32_t LuminousIntensity:UnitSignatureLuminousIntensityBits;
|
||||
int32_t Angle:UnitSignatureAngleBits;
|
||||
int32_t Density:UnitSignatureDensityBits;
|
||||
};
|
||||
/**
|
||||
* The Unit class.
|
||||
@@ -62,7 +60,7 @@ class BaseExport Unit
|
||||
{
|
||||
public:
|
||||
/// default constructor
|
||||
Unit(int8_t Length,int8_t Mass=0,int8_t Time=0,int8_t ElectricCurrent=0,int8_t ThermodynamicTemperature=0,int8_t AmountOfSubstance=0,int8_t LuminousIntensity=0,int8_t Angle=0, int8_t Density=0);
|
||||
Unit(int8_t Length,int8_t Mass=0,int8_t Time=0,int8_t ElectricCurrent=0,int8_t ThermodynamicTemperature=0,int8_t AmountOfSubstance=0,int8_t LuminousIntensity=0,int8_t Angle=0);
|
||||
Unit(void);
|
||||
Unit(const Unit&);
|
||||
Unit(const QString& expr);
|
||||
|
||||
Reference in New Issue
Block a user