From 71f0f1a6d5a500c8221945417eb67a72b914919b Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 28 Mar 2018 11:47:08 +0200 Subject: [PATCH] density is not an SI base unit --- src/Base/Unit.cpp | 62 +++++++++-------------------------------------- src/Base/Unit.h | 4 +-- 2 files changed, 13 insertions(+), 53 deletions(-) diff --git a/src/Base/Unit.cpp b/src/Base/Unit.cpp index aade0f5a98..cc2872938c 100644 --- a/src/Base/Unit.cpp +++ b/src/Base/Unit.cpp @@ -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 << ')'; } diff --git a/src/Base/Unit.h b/src/Base/Unit.h index ab53cd9f28..d4d822c3f4 100644 --- a/src/Base/Unit.h +++ b/src/Base/Unit.h @@ -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);