diff --git a/samples/blackmiscquantities/samplesphysicalquantities.cpp b/samples/blackmiscquantities/samplesphysicalquantities.cpp index 01c8cfac8..ed57baacd 100644 --- a/samples/blackmiscquantities/samplesphysicalquantities.cpp +++ b/samples/blackmiscquantities/samplesphysicalquantities.cpp @@ -2,19 +2,28 @@ using namespace BlackMisc::PhysicalQuantities; -namespace BlackMiscTest { +namespace BlackMiscTest +{ /** * Running the quantities */ -int CSamplesPhysicalQuantities::samples() { +int CSamplesPhysicalQuantities::samples() +{ // cases which must not work // CMeasurementUnit mu; //must not work // CLengthUnit du1(CAngleUnit::rad()); + + CMeasurementPrefix pf1 = CMeasurementPrefix::h(); + CMeasurementPrefix pf2 = CMeasurementPrefix::M(); + qDebug() << pf1 << pf2 << 1.0 * pf1; + CLengthUnit lu1(CLengthUnit::cm()); CLengthUnit lu2(CLengthUnit::ft()); - qDebug() << lu1 << lu2; + QString lu1s = lu1; + QString lu2s = lu2; + qDebug() << lu1 << lu2 << lu1s << lu2s; const CLength l1(5.0, CLengthUnit::ft()); // 5 ft CLength l2(1, CLengthUnit::NM()); // 1NM CLength l3(1, CLengthUnit::km()); @@ -22,7 +31,7 @@ int CSamplesPhysicalQuantities::samples() { qDebug() << CLengthUnit::ft(); qDebug() << l1 << l2 << l3 << l4; - qDebug() << l1.valueRoundedWithUnit(CLengthUnit::ft(),5) + qDebug() << l1.valueRoundedWithUnit(CLengthUnit::ft(), 5) << l2.valueRoundedWithUnit(CLengthUnit::km()); qDebug() << l3.getUnit(); @@ -36,7 +45,7 @@ int CSamplesPhysicalQuantities::samples() { qDebug() << f1 << f1.valueRoundedWithUnit(CFrequencyUnit::MHz()) << f1.valueRoundedWithUnit(CFrequencyUnit::GHz(), 3); CSpeed s1 = CSpeed(100, CSpeedUnit::km_h()); - CSpeed s2 = CSpeed(1000,CSpeedUnit::ft_min()); + CSpeed s2 = CSpeed(1000, CSpeedUnit::ft_min()); CSpeed s3 = CSpeed(s2); s3.switchUnit(CSpeedUnit::m_s()); qDebug() << s1 << s1.convertedSiValueRoundedWithUnit() << s1.valueRoundedWithUnit(CSpeedUnit::NM_h()); @@ -45,7 +54,7 @@ int CSamplesPhysicalQuantities::samples() { CAngle a1(180, CAngleUnit::deg()); CAngle a2(1.5 * CAngle::pi(), CAngleUnit::rad()); CAngle a3(180.5, CAngleUnit::deg()); - CAngle a4(35.4336,CAngleUnit::sexagesimalDeg()); // 35.72666 + CAngle a4(35.4336, CAngleUnit::sexagesimalDeg()); // 35.72666 a1 += a2; // a1 = d2; // must not work qDebug() << a1; @@ -60,7 +69,7 @@ int CSamplesPhysicalQuantities::samples() { a4.switchUnit(CAngleUnit::deg()); qDebug() << a3 << a4; - CMass w1(1,CMassUnit::t()); + CMass w1(1, CMassUnit::t()); CMass w2(w1); w2.switchUnit(CMassUnit::lb()); qDebug() << w1 << w1.valueRoundedWithUnit(CMassUnit::kg()) << w2; diff --git a/src/blackcore/vector_3d.h b/src/blackcore/vector_3d.h index 1383d59c9..d4061ba75 100644 --- a/src/blackcore/vector_3d.h +++ b/src/blackcore/vector_3d.h @@ -40,16 +40,16 @@ namespace BlackCore CVector3D & operator +=(const CVector3D &rhs); CVector3D & operator -=(const CVector3D &rhs); + CVector3D & operator = (const CVector3D &rhs); - CVector3D & operator = (const CVector3D &rhs); + CVector3D operator +(const CVector3D &rhs); + CVector3D operator -(const CVector3D &rhs); - CVector3D operator +(const CVector3D &rhs); - CVector3D operator -(const CVector3D &rhs); + bool operator ==(const CVector3D &rhs); + bool operator !=(const CVector3D &rhs); - bool operator ==(const CVector3D &rhs); - bool operator !=(const CVector3D &rhs); + //double crossProduct(qint32 ); - //double crossProduct(qint32 ); CVector3D & operator *=(const CVector3D &rhs); CVector3D operator *( const CVector3D &rhs); diff --git a/src/blackmisc/avaltitude.cpp b/src/blackmisc/avaltitude.cpp index 23e26b16c..718600400 100644 --- a/src/blackmisc/avaltitude.cpp +++ b/src/blackmisc/avaltitude.cpp @@ -16,9 +16,9 @@ namespace Aviation /* * Own implementation for streaming */ -QString CAltitude::stringForStreamingOperator() const +QString CAltitude::stringForConverter() const { - QString s = CLength::stringForStreamingOperator(); + QString s = CLength::stringForConverter(); return s.append(this->m_msl ? " MSL" : " AGL"); } diff --git a/src/blackmisc/avaltitude.h b/src/blackmisc/avaltitude.h index a13880389..aa2e6fa0c 100644 --- a/src/blackmisc/avaltitude.h +++ b/src/blackmisc/avaltitude.h @@ -26,7 +26,7 @@ protected: * \brief Specific stream operation for Altitude * \return */ - virtual QString stringForStreamingOperator() const; + virtual QString stringForConverter() const; public: /*! diff --git a/src/blackmisc/avheading.cpp b/src/blackmisc/avheading.cpp index 8a6d057f6..b66f56eeb 100644 --- a/src/blackmisc/avheading.cpp +++ b/src/blackmisc/avheading.cpp @@ -16,9 +16,9 @@ namespace Aviation /* * Own implementation for streaming */ -QString CHeading::stringForStreamingOperator() const +QString CHeading::stringForConverter() const { - QString s = CAngle::stringForStreamingOperator(); + QString s = CAngle::stringForConverter(); return s.append(this->m_magnetic ? " magnetic" : " true"); } diff --git a/src/blackmisc/avheading.h b/src/blackmisc/avheading.h index 5612a4be0..eae5b9991 100644 --- a/src/blackmisc/avheading.h +++ b/src/blackmisc/avheading.h @@ -25,7 +25,7 @@ protected: * \brief Specific stream operation for heading * \return */ - virtual QString stringForStreamingOperator() const; + virtual QString stringForConverter() const; public: /*! diff --git a/src/blackmisc/avtrack.cpp b/src/blackmisc/avtrack.cpp index 731bc13cf..c70aab144 100644 --- a/src/blackmisc/avtrack.cpp +++ b/src/blackmisc/avtrack.cpp @@ -16,9 +16,9 @@ namespace Aviation /* * Own implementation for streaming */ -QString CTrack::stringForStreamingOperator() const +QString CTrack::stringForConverter() const { - QString s = CAngle::stringForStreamingOperator(); + QString s = CAngle::stringForConverter(); return s.append(this->m_magnetic ? " magnetic" : " true"); } diff --git a/src/blackmisc/avtrack.h b/src/blackmisc/avtrack.h index 38a295b7a..f81725634 100644 --- a/src/blackmisc/avtrack.h +++ b/src/blackmisc/avtrack.h @@ -27,7 +27,7 @@ protected: * \brief Specific stream operation for Track * \return */ - virtual QString stringForStreamingOperator() const; + virtual QString stringForConverter() const; public: /*! diff --git a/src/blackmisc/basestreamstringifier.h b/src/blackmisc/basestreamstringifier.h new file mode 100644 index 000000000..c85374a13 --- /dev/null +++ b/src/blackmisc/basestreamstringifier.h @@ -0,0 +1,79 @@ +#ifndef BLACKMISC_BASESTREAMSTRINGIFIER_H +#define BLACKMISC_BASESTREAMSTRINGIFIER_H + +#include "blackmisc/debug.h" +#include +#include +#include + +namespace BlackMisc +{ +/*! + * \brief Provides "to QString" and stream operators + */ +template class CBaseStreamStringifier +{ + + /*! + * \brief Stream << overload to be used in debugging messages + * \param debug + * \param uc + * \return + */ + friend QDebug operator<<(QDebug debug, const UsingClass &uc) + { + const CBaseStreamStringifier &s = uc; + debug << s.stringForStreaming(); + return debug; + } + + /*! + * \brief Stream operator << for log messages + * \param log + * \param uc + * \return + */ + friend CLogMessage operator<<(CLogMessage log, const UsingClass &uc) + { + const CBaseStreamStringifier &s = uc; + log << s.stringForStreaming(); + return log; + } + +public: + /*! + * \brief Virtual destructor + */ + virtual ~CBaseStreamStringifier() {} + + /*! + * \brief Cast as QString + */ + operator QString() const + { + return this->stringForConverter(); + } + +protected: + + /*! + * \brief String for streaming operators + * \return + */ + virtual QString stringForStreaming() const + { + // simplest default implementation requires only one method + return this->stringForConverter(); + } + + /*! + * \brief String for converter + * \return + */ + virtual QString stringForConverter() const = 0; + +}; + +} // namespace + +#endif // guard diff --git a/src/blackmisc/blackmisc.h b/src/blackmisc/blackmisc.h index 94d1a9690..ba9974150 100644 --- a/src/blackmisc/blackmisc.h +++ b/src/blackmisc/blackmisc.h @@ -4,6 +4,11 @@ // just a dummy header, namespace documentation will go here /*! \file */ +/*! + * \namespace BlackMisc + * \brief Base and utility classes available in all other projects. + */ + /*! * \namespace BlackMisc::Aviation * \brief Aviation and Avionics classes such as CHeading or CTransponder . diff --git a/src/blackmisc/blackmisc.pro b/src/blackmisc/blackmisc.pro index a14331ad7..d02e53eb4 100644 --- a/src/blackmisc/blackmisc.pro +++ b/src/blackmisc/blackmisc.pro @@ -59,7 +59,8 @@ HEADERS += \ avionavsystem.h \ aviotransponder.h \ avioadfsystem.h \ - aviation.h + aviation.h \ + basestreamstringifier.h SOURCES += \ logmessage.cpp \ @@ -70,7 +71,6 @@ SOURCES += \ context.cpp \ config.cpp \ config_manager.cpp \ - serialize.cpp \ com_client.cpp \ com_server.cpp \ com_client_buffer.cpp \ diff --git a/src/blackmisc/com_handler.h b/src/blackmisc/com_handler.h index 2a98b2993..0c1797bff 100644 --- a/src/blackmisc/com_handler.h +++ b/src/blackmisc/com_handler.h @@ -10,10 +10,12 @@ class QTcpSocket; -const qint32 Sync_Marker = 0x1ACFFC1D; - namespace BlackMisc { + +const qint32 Sync_Marker = 0x1ACFFC1D; + + //! IComHandler Interface. /*! This interface implements the basic class for every InterCommunikation diff --git a/src/blackmisc/message.h b/src/blackmisc/message.h index 58c9a2061..d7ba1d312 100644 --- a/src/blackmisc/message.h +++ b/src/blackmisc/message.h @@ -6,67 +6,66 @@ #ifndef MESSAGE_H #define MESSAGE_H +#include "blackmisc/serialize.h" #include #include #include -#include "blackmisc/serialize.h" namespace BlackMisc { - class IMessage : public ISerialize +class IMessage : public ISerialize +{ +public: + IMessage(QString &id); + + QString getID() const; + + virtual QDataStream &operator<< (QDataStream &in) = 0; + virtual QDataStream &operator>> (QDataStream &out) const = 0; + + virtual QTextStream &operator<< (QTextStream &in) = 0; + virtual QTextStream &operator>> (QTextStream &out) const = 0; + + +protected: + QString m_message_id; +}; + +class TestMessage : public IMessage +{ +public: + TestMessage() : IMessage(QString("MSG_ID_TestMessage")) { - public: - IMessage(QString& id); + testString = "This is a test message!"; + } - QString getID() const; + QString getTestString() const { return testString; } - virtual QDataStream& operator<< ( QDataStream& in) = 0; - virtual QDataStream& operator>> (QDataStream& out) const = 0; + //QDataStream &operator>>(qint8 &i); - virtual QTextStream& operator<< ( QTextStream& in) = 0; - virtual QTextStream& operator>> (QTextStream& out) const = 0; - - - protected: - - QString m_message_id; - }; - - class TestMessage : public IMessage + virtual QDataStream &operator<< (QDataStream &in) { - public: - TestMessage() : IMessage(QString("MSG_ID_TestMessage")) - { - testString = "This is a test message!"; - } + in >> m_message_id; + in >> testString; + return in; + } - QString getTestString () const { return testString; } + virtual QDataStream &operator>> (QDataStream &out) const + { + out << m_message_id; + out << testString; + return out; + } - //QDataStream &operator>>(qint8 &i); + virtual QTextStream &operator<< (QTextStream &in) { return in; } + virtual QTextStream &operator>> (QTextStream &out) const { return out; } - virtual QDataStream& operator<< ( QDataStream& in) - { - in >> m_message_id; - in >> testString; - return in; - } +protected: - virtual QDataStream& operator>> (QDataStream& out) const - { - out << m_message_id; - out << testString; - return out; - } - - virtual QTextStream& operator<< ( QTextStream& in) { return in; } - virtual QTextStream& operator>> (QTextStream& out) const { return out; } - - protected: - - private: - QString testString; - }; +private: + QString testString; +}; } // namespace BlackMisc diff --git a/src/blackmisc/pqbase.cpp b/src/blackmisc/pqbase.cpp index 88fa25bea..913d38a61 100644 --- a/src/blackmisc/pqbase.cpp +++ b/src/blackmisc/pqbase.cpp @@ -78,24 +78,6 @@ bool CMeasurementPrefix::operator <(const CMeasurementPrefix &otherMultiplier) c return this->m_factor < otherMultiplier.m_factor; } -/* - * Stream to debug - */ -QDebug operator<<(QDebug d, const CMeasurementPrefix &multiplier) -{ - d << multiplier.m_name; - return d; -} - -/* - * Log to debug - */ -CLogMessage operator<<(CLogMessage log, const CMeasurementPrefix &multiplier) -{ - log << multiplier.m_name; - return log; -} - // ----------------------------------------------------------------------- // --- Measurement unit -------------------------------------------------- // ----------------------------------------------------------------------- @@ -155,24 +137,6 @@ bool CMeasurementUnit::operator ==(const CMeasurementUnit &otherUnit) const && this->m_isSiUnit == otherUnit.m_isSiUnit; } -/* - * Stream to debug - */ -QDebug operator <<(QDebug d, const CMeasurementUnit &unit) -{ - d << unit.m_name; - return d; -} - -/* - * Stream to log - */ -CLogMessage operator<<(CLogMessage log, const CMeasurementUnit &unit) -{ - log << unit.m_name; - return log; -} - /* * Unequal operator */ diff --git a/src/blackmisc/pqbase.h b/src/blackmisc/pqbase.h index 3674995eb..57f96c36e 100644 --- a/src/blackmisc/pqbase.h +++ b/src/blackmisc/pqbase.h @@ -6,6 +6,7 @@ #ifndef BLACKMISC_PQBASE_H #define BLACKMISC_PQBASE_H +#include "blackmisc/basestreamstringifier.h" #include "blackmisc/debug.h" #include #include @@ -22,23 +23,8 @@ namespace PhysicalQuantities * Use the static values such CMeasurementMultiplier::k() as to specify values. * \author KWB */ -class CMeasurementPrefix +class CMeasurementPrefix : public CBaseStreamStringifier { - /*! - * \brief Stream << overload to be used in debugging messages - * \param d - * \param multiplier - * \return - */ - friend QDebug operator<<(QDebug d, const CMeasurementPrefix &multiplier); - /*! - * \brief Stream operator << for log messages - * \param log - * \param multiplier - * \return - */ - friend CLogMessage operator<<(CLogMessage log, const CMeasurementPrefix &multiplier); - private: QString m_name; //!< name, e.g. "kilo" QString m_prefix; //!< prefix, e.g. "k" for kilo @@ -51,73 +37,89 @@ private: * \param factor */ CMeasurementPrefix(const QString &name, const QString &prefixName, double factor); + +protected: + /*! + * \brief Name as stringification + * \return + */ + virtual QString stringForConverter() const + { + return this->m_name; + } + public: /*! * \brief Copy constructor * \param otherMultiplier */ CMeasurementPrefix(const CMeasurementPrefix &otherMultiplier); + /*! * \brief Assigmnet operator = * \param otherMultiplier * \return */ CMeasurementPrefix &operator =(const CMeasurementPrefix &otherMultiplier); + /*! * \brief Equal operator == * \param otherMultiplier * \return */ bool operator == (const CMeasurementPrefix &otherMultiplier) const; + /*! * \brief Unequal operator != * \param otherMultiplier * \return */ bool operator != (const CMeasurementPrefix &otherMultiplier) const; + /*! * \brief Greater operator > * \param otherMultiplier * \return */ bool operator > (const CMeasurementPrefix &otherMultiplier) const; + /*! * \brief Less operator < * \param otherMultiplier * \return */ bool operator < (const CMeasurementPrefix &otherMultiplier) const; + /*! * \brief Cast as double */ - operator double() const { + operator double() const + { return this->m_factor; } - /*! - * \brief Cast as QString - */ - operator QString() const { - return this->m_name; - } + /*! * \brief Factor, e.g.1000 for "kilo" * \return */ - double getFactor() const { + double getFactor() const + { return this->m_factor; } /*! * \brief Name, e.g. "kilo" * \return */ - QString getName() const { + QString getName() const + { return this->m_name; } /*! * \brief Prefix, e.g. "k" for "kilo" * \return */ - QString getPrefix() const { + QString getPrefix() const + { return this->m_prefix; } @@ -129,7 +131,8 @@ public: * \brief Unit "None" * \return */ - static const CMeasurementPrefix &None() { + static const CMeasurementPrefix &None() + { static CMeasurementPrefix none("", "", 0.0); return none; } @@ -137,7 +140,8 @@ public: * \brief Unit "One" * \return */ - static const CMeasurementPrefix &One() { + static const CMeasurementPrefix &One() + { static CMeasurementPrefix one("one", "", 1.0); return one; } @@ -145,7 +149,8 @@ public: * \brief Unit "mega" * \return */ - static const CMeasurementPrefix &M() { + static const CMeasurementPrefix &M() + { static CMeasurementPrefix mega("mega", "M", 1E6); return mega; } @@ -153,7 +158,8 @@ public: * \brief Unit "kilo" * \return */ - static const CMeasurementPrefix &k() { + static const CMeasurementPrefix &k() + { static CMeasurementPrefix kilo("kilo", "k", 1000.0); return kilo; } @@ -161,7 +167,8 @@ public: * \brief Unit "giga" * \return */ - static const CMeasurementPrefix &G() { + static const CMeasurementPrefix &G() + { static CMeasurementPrefix giga("giga", "G", 1E9); return giga; } @@ -169,7 +176,8 @@ public: * \brief Unit "hecto" * \return */ - static const CMeasurementPrefix &h() { + static const CMeasurementPrefix &h() + { static CMeasurementPrefix hecto("hecto", "h", 100.0); return hecto; } @@ -177,7 +185,8 @@ public: * \brief Unit "centi" * \return */ - static const CMeasurementPrefix &c() { + static const CMeasurementPrefix &c() + { static CMeasurementPrefix centi("centi", "c", 0.01); return centi; } @@ -185,7 +194,8 @@ public: * \brief Unit "milli" * \return */ - static const CMeasurementPrefix &m() { + static const CMeasurementPrefix &m() + { static CMeasurementPrefix milli("milli", "m", 1E-03); return milli; } @@ -199,28 +209,12 @@ public: /*! * \brief Base class for all units, such as meter, hertz. */ -class CMeasurementUnit +class CMeasurementUnit: public CBaseStreamStringifier { - - /*! - * \brief Stream << overload to be used in debugging messages - * \param d - * \param unit - * \return - */ - friend QDebug operator<<(QDebug d, const CMeasurementUnit &unit); - - /*! - * \brief Stream operator << for log messages - * \param log - * \param unit - * \return - */ - friend CLogMessage operator<<(CLogMessage log, const CMeasurementUnit &unit); - protected: /*! - * Points to a individual converter method + * \brief Points to an individual converter method + * Conversion as perobject, as required for CAnglewith sexagesimal conversion */ typedef double(*UnitConverter)(const CMeasurementUnit &, double); @@ -238,7 +232,6 @@ private: UnitConverter m_fromSiConverter; //! allows an arbitrary conversion method as per object protected: - /*! * Constructor by parameter * \param name @@ -256,41 +249,67 @@ protected: CMeasurementUnit(const QString &name, const QString &unitName, const QString &type, bool isSiUnit, bool isSiBaseUnit, double conversionFactorToSI = 1, const CMeasurementPrefix &multiplier = CMeasurementPrefix::None(), qint32 displayDigits = 2, double epsilon = 1E-10, UnitConverter toSiConverter = nullptr, UnitConverter fromSiConverter = nullptr); + /*! * \brief Copy constructor * \param otherUnit */ CMeasurementUnit(const CMeasurementUnit &otherUnit); + /*! * \brief Assignment operator = * \param otherUnit * \return */ CMeasurementUnit &operator =(const CMeasurementUnit &otherUnit); + protected: + /*! + * \brief String for streaming operators is full name + * \return + */ + virtual QString stringForStreaming() const + { + return this->m_name; + } + + /*! + * \brief String for converter is unit + * \return + */ + virtual QString stringForConverter() const + { + return this->m_unitName; + } + /*! * \brief Conversion factor to SI conversion unit * \return */ - double getConversionFactorToSI() const { + double getConversionFactorToSI() const + { return this->m_conversionFactorToSIConversionUnit; } + /*! * Given value to conversion SI conversion unit (e.g. meter, hertz). * Standard implementaion is simply factor based. * \param value * \return */ - virtual double conversionToSiConversionUnit(double value) const { + virtual double conversionToSiConversionUnit(double value) const + { return value * this->m_conversionFactorToSIConversionUnit; } + /*! * \brief Value from SI conversion unit to this unit. * Standard implementation is simply factor based. * \param value * \return */ - virtual double conversionFromSiConversionUnit(double value) const { + virtual double conversionFromSiConversionUnit(double value) const + { return value / this->m_conversionFactorToSIConversionUnit; } @@ -301,72 +320,90 @@ public: * \return */ bool operator == (const CMeasurementUnit &otherUnit) const; + /*! * \brief Unequal operator != * \param otherUnit * \return */ bool operator != (const CMeasurementUnit &otherUnit) const; + /*! * \brief Representing an SI unit? Examples: kilometer, meter, hertz * \return */ - bool isSiUnit() const { + bool isSiUnit() const + { return this->m_isSiUnit; } + /*! * \brief Representing an base SI unit? Examples: second, meter * \return */ - bool isSiBaseUnit() const { + bool isSiBaseUnit() const + { return this->m_isSiUnit; } + /*! * \brief Representing an SI base unit? Example: meter * \return */ - bool isUnprefixedSiUnit() const { + bool isUnprefixedSiUnit() const + { return this->m_isSiUnit && this->m_multiplier.getFactor() == 1; } + /*! * \brief Name such as "meter" * \return */ - QString getName() const { + QString getName() const + { return this->m_name; } + /*! * \brief Unit name such as "m" * \return */ - QString getUnitName() const { + QString getUnitName() const + { return this->m_unitName; } + /*! * \brief Type such as "distance", "frequency" * \return */ - QString getType() const { + QString getType() const + { return this->m_type; } + /*! * Given value to conversion SI conversion unit (e.g. meter, hertz). * Standard implementation is simply factor based. * \param value * \return */ - double convertToSiConversionUnit(double value) const { + double convertToSiConversionUnit(double value) const + { return (this->m_toSiConverter) ? this->m_toSiConverter((*this), value) : this->conversionToSiConversionUnit(value); } + /*! * Value from SI conversion unit to this unit. * Standard implementation is simply factor based. * \param value * \return */ - double convertFromSiConversionUnit(double value) const { + double convertFromSiConversionUnit(double value) const + { return (this->m_fromSiConverter) ? this->m_fromSiConverter((*this), value) : this->conversionFromSiConversionUnit(value); } + /*! * Rounded string utility method, virtual so units can have * specialized formatting @@ -375,6 +412,7 @@ public: * \return */ virtual QString toQStringRounded(double value, int digits = -1) const; + /*! * \brief Rounded value * \param value @@ -382,6 +420,7 @@ public: * \return */ double valueRounded(double value, int digits = -1) const; + /*! * \brief Value rounded with unit, e.g. "5.00m", "30kHz" * \param value @@ -389,27 +428,34 @@ public: * \return */ virtual QString valueRoundedWithUnit(double value, int digits = -1) const; + /*! * \brief Threshold for rounding * \return */ - double getEpsilon() const { + double getEpsilon() const + { return this->m_epsilon; } + /*! * \brief getDisplayDigits * \return */ - qint32 getDisplayDigits() const { + qint32 getDisplayDigits() const + { return this->m_displayDigits; } + /*! * \brief Multiplier such as "kilo" * \return */ - CMeasurementPrefix getMultiplier() const { + CMeasurementPrefix getMultiplier() const + { return this->m_multiplier; } + /*! * \brief Factor to convert to given unit * \param value @@ -442,7 +488,8 @@ public: * \brief Unit is not specified * \return */ - static CMeasurementUnit &None() { + static CMeasurementUnit &None() + { static CMeasurementUnit none("none", "", "", false, false, 0.0, CMeasurementPrefix::None(), 0, 0); return none; } diff --git a/src/blackmisc/pqphysicalquantity.cpp b/src/blackmisc/pqphysicalquantity.cpp index fedc276e9..2e11d08fa 100644 --- a/src/blackmisc/pqphysicalquantity.cpp +++ b/src/blackmisc/pqphysicalquantity.cpp @@ -38,7 +38,7 @@ template CPhysicalQuantity::CPhysicalQuantity(const // void } -/*! +/* * Destructor */ template CPhysicalQuantity::~CPhysicalQuantity() diff --git a/src/blackmisc/pqphysicalquantity.h b/src/blackmisc/pqphysicalquantity.h index d8b0c4731..1c1dd3e62 100644 --- a/src/blackmisc/pqphysicalquantity.h +++ b/src/blackmisc/pqphysicalquantity.h @@ -21,35 +21,8 @@ namespace PhysicalQuantities * \brief A physical quantity such as "5m", "20s", "1500ft/s" * \author KWB */ -template class CPhysicalQuantity +template class CPhysicalQuantity : public BlackMisc::CBaseStreamStringifier { - /*! - * Stream operator for debugging - * \brief operator << - * \param debug - * \param quantity - * \return - * \remarks Has to be in the header files to avoid template link errors - */ - friend QDebug operator<<(QDebug debug, const CPhysicalQuantity &quantity) { - QString v = quantity.stringForStreamingOperator(); - debug << v; - return debug; - } - - /*! - * Stream operator for log messages - * \brief operator << - * \param log - * \param quantity - * \return - * \remarks Has to be in the header files to avoid template link errors - */ - friend CLogMessage operator<<(CLogMessage log, const CPhysicalQuantity &quantity) { - QString v = quantity.stringForStreamingOperator(); - log << v; - return log; - } private: qint32 m_unitValueI; //!< value backed by integer, allows sole integer arithmetic @@ -60,13 +33,6 @@ private: protected: MU m_unit; //!< unit MU m_conversionSiUnit; //!< corresponding SI base unit - /*! - * \brief String for streaming operators - * \return - */ - virtual QString stringForStreamingOperator() const { - return this->unitValueRoundedWithUnit(-1); - } /*! * \brief Constructor with int @@ -75,6 +41,7 @@ protected: * \param siConversionUnit */ CPhysicalQuantity(qint32 baseValue, const MU &unit, const MU &siConversionUnit); + /*! * \brief Constructor with double * \param baseValue @@ -82,77 +49,104 @@ protected: * \param siConversionUnit */ CPhysicalQuantity(double baseValue, const MU &unit, const MU &siConversionUnit); + + /*! + * \brief String for converter and streaming + * \return + */ + virtual QString stringForConverter() const + { + return this->unitValueRoundedWithUnit(-1); + } + /*! * \brief Init by integer * \param baseValue */ void setUnitValue(qint32 baseValue); + /*! * \brief Init by double * \param baseValue */ + void setUnitValue(double baseValue); /*! * \brief Set the SI value */ void setConversionSiUnitValue(); + public: /*! * \brief Copy constructor * \param otherQuantity */ CPhysicalQuantity(const CPhysicalQuantity &otherQuantity); + /*! * \brief Virtual destructor */ virtual ~CPhysicalQuantity(); + /*! * \brief Unit of the distance * \return */ - MU getUnit() const { + MU getUnit() const + { return this->m_unit; } + /*! * \brief Conversion SI unit * \return */ - MU getConversionSiUnit() const { + MU getConversionSiUnit() const + { return this->m_conversionSiUnit; } + /*! * \brief Switch unit, e.g. feet meter * \param newUnit * \return */ bool switchUnit(const MU &newUnit); + /*! * \brief Value in SI base unit? Meter is an SI base unit, hertz not! * \return */ - bool isSiBaseUnit() const { + bool isSiBaseUnit() const + { return this->m_unit.isSiBaseUnit(); } + /*! * \brief Value in SI unit? Hertz is an derived SI unit, NM not! * \return */ - bool isSiUnit() const { + bool isSiUnit() const + { return this->m_unit.isSiUnit(); } + /*! * \brief Value in unprefixed SI unit? Meter is a unprefixed, kilometer a prefixed SI Unit * \return */ - bool isUnprefixedSiUnit() const { + bool isUnprefixedSiUnit() const + { return this->m_unit.isUnprefixedSiUnit(); } + /*! * \brief Value in given unit * \param unit * @return */ double value(const MU &unit) const; + /*! * \brief Rounded value in unit * \param unit @@ -160,6 +154,7 @@ public: * @return */ double valueRounded(const MU &unit, int digits = -1) const; + /*! * \brief Value to QString with unit, e.g. "5.00m" * \param unit @@ -167,186 +162,223 @@ public: * @return */ QString valueRoundedWithUnit(const MU &unit, int digits = -1) const; + /*! * \brief Value a int * @return */ - qint32 unitValueToInteger() const { + qint32 unitValueToInteger() const + { return this->m_unitValueI; } + /*! * \brief Value a double * @return */ - double unitValueToDouble() const { + double unitValueToDouble() const + { return this->m_unitValueD; } + /*! * \brief Value to QString with unit, e.g. "5.00m" * \param digits * @return */ QString unitValueRoundedWithUnit(int digits = -1) const; + /*! * \brief SI value to integer * @return */ - qint32 siBaseUnitValueToInteger() const { + qint32 siBaseUnitValueToInteger() const + { return CMeasurementUnit::round(this->m_convertedSiUnitValueD, 0); } + /*! * \brief SI value to double * @return */ - double siBaseUnitValueToDouble() const { + double siBaseUnitValueToDouble() const + { return this->m_convertedSiUnitValueD; } + /*! * \brief Rounded value by n digits * \param digits * @return */ double unitValueToDoubleRounded(int digits = -1) const; + /*! * \brief Rounded value by n digits * \param digits if no value is provided, unit rounding is taken * @return */ QString unitValueToQStringRounded(int digits = -1) const; + /*! * \brief SI value as double * \return */ - double convertedSiValueToDouble() const { + double convertedSiValueToDouble() const + { return this->m_convertedSiUnitValueD; } + /*! * \brief SI value as integer * \return */ - qint32 convertedSiValueToInteger() const { + qint32 convertedSiValueToInteger() const + { return static_cast(CMeasurementUnit::round(this->m_convertedSiUnitValueD, 0)); } + /*! * \brief Rounded SI value by n digits * \param digits * @return */ double convertedSiValueToDoubleRounded(int digits = -1) const; + /*! * \brief Rounded value by n digits * \param digits if no value is provided, unit rounding is taken * @return */ QString convertedSiValueToQStringRounded(int digits = -1) const; + /*! * \brief SI Base unit value rounded * \param digits * @return */ QString convertedSiValueRoundedWithUnit(int digits = -1) const; + /*! * \brief Add to the unit value. * \remarks Since overloading the + operator with double did lead to unintended conversions, as explicit method * \param value */ void addUnitValue(double value); + /*! * \brief Substratc to the unit value. * \remarks Since overloading the - operator with double did lead to unintended conversions, as explicit method * \param value */ void substractUnitValue(double value); + /*! * \brief Cast as QString */ - operator QString() const { + operator QString() const + { return this->unitValueRoundedWithUnit(); } + /*! * \brief Multiply operator *= * \param multiply * \return */ CPhysicalQuantity &operator *=(double multiply); + /*! * \brief Divide operator /= * \param divide * @return */ CPhysicalQuantity &operator /=(double divide); + /*! * \brief Operator * * \param multiply * @return */ PQ operator *(double multiply) const; + /*! * \brief Operator / * \param divide * @return */ PQ operator /(double divide) const; + /*! * \brief Equal operator == * \param otherQuantity * @return */ bool operator==(const CPhysicalQuantity &otherQuantity) const; + /*! * \brief Not equal operator != * \param otherQuantity * @return */ bool operator!=(const CPhysicalQuantity &otherQuantity) const; + /*! * \brief Plus operator += * \param otherQuantity * @return */ CPhysicalQuantity &operator +=(const CPhysicalQuantity &otherQuantity); + /*! * \brief Minus operator-= * \param otherQuantity * @return */ CPhysicalQuantity &operator -=(const CPhysicalQuantity &otherQuantity); + /*! * \brief Greater operator > * \param otherQuantity * @return */ bool operator >(const CPhysicalQuantity &otherQuantity) const; + /*! * \brief Less operator < * \param otherQuantity * @return */ bool operator <(const CPhysicalQuantity &otherQuantity) const; + /*! * \brief Less equal operator <= * \param otherQuantity * @return */ bool operator <=(const CPhysicalQuantity &otherQuantity) const; + /*! * \brief Greater equal operator >= * \param otherQuantity * @return */ bool operator >=(const CPhysicalQuantity &otherQuantity) const; + /*! * \brief Assignment operator = * \param otherQuantity * @return */ CPhysicalQuantity &operator =(const CPhysicalQuantity &otherQuantity); + /*! * \brief Plus operator + * \param otherQuantity * @return */ PQ operator +(const PQ &otherQuantity) const; + /*! * \brief Minus operator - * \param otherQuantity diff --git a/src/blackmisc/serialize.cpp b/src/blackmisc/serialize.cpp deleted file mode 100644 index 7a864449e..000000000 --- a/src/blackmisc/serialize.cpp +++ /dev/null @@ -1,5 +0,0 @@ -#include "blackmisc/serialize.h" - -ISerialize::ISerialize() -{ -} diff --git a/src/blackmisc/serialize.h b/src/blackmisc/serialize.h index eeac22247..cf305f65f 100644 --- a/src/blackmisc/serialize.h +++ b/src/blackmisc/serialize.h @@ -5,17 +5,22 @@ #ifndef SERIALIZE_H #define SERIALIZE_H +#include -class QDataStream; +namespace BlackMisc +{ +/*! + * \brief Serialize interface + */ class ISerialize { public: - ISerialize(); - virtual ~ISerialize() {}; - - virtual QDataStream& operator<< (QDataStream& in) = 0; - virtual QDataStream& operator>> (QDataStream& out) const = 0; + ISerialize() {} + virtual ~ISerialize() {} + virtual QDataStream &operator<< (QDataStream &in) = 0; + virtual QDataStream &operator>> (QDataStream &out) const = 0; }; +} #endif // SERIALIZE_H