mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-02 15:15:50 +08:00
String-ifier for streams as preparation for the GeoClasses
This commit is contained in:
@@ -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");
|
||||
}
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ protected:
|
||||
* \brief Specific stream operation for Altitude
|
||||
* \return
|
||||
*/
|
||||
virtual QString stringForStreamingOperator() const;
|
||||
virtual QString stringForConverter() const;
|
||||
|
||||
public:
|
||||
/*!
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ protected:
|
||||
* \brief Specific stream operation for heading
|
||||
* \return
|
||||
*/
|
||||
virtual QString stringForStreamingOperator() const;
|
||||
virtual QString stringForConverter() const;
|
||||
|
||||
public:
|
||||
/*!
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ protected:
|
||||
* \brief Specific stream operation for Track
|
||||
* \return
|
||||
*/
|
||||
virtual QString stringForStreamingOperator() const;
|
||||
virtual QString stringForConverter() const;
|
||||
|
||||
public:
|
||||
/*!
|
||||
|
||||
79
src/blackmisc/basestreamstringifier.h
Normal file
79
src/blackmisc/basestreamstringifier.h
Normal file
@@ -0,0 +1,79 @@
|
||||
#ifndef BLACKMISC_BASESTREAMSTRINGIFIER_H
|
||||
#define BLACKMISC_BASESTREAMSTRINGIFIER_H
|
||||
|
||||
#include "blackmisc/debug.h"
|
||||
#include <QString>
|
||||
#include <QtGlobal>
|
||||
#include <QDebug>
|
||||
|
||||
namespace BlackMisc
|
||||
{
|
||||
/*!
|
||||
* \brief Provides "to QString" and stream operators
|
||||
*/
|
||||
template <class UsingClass> 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
|
||||
@@ -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 .
|
||||
|
||||
@@ -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 \
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -6,67 +6,66 @@
|
||||
#ifndef MESSAGE_H
|
||||
#define MESSAGE_H
|
||||
|
||||
#include "blackmisc/serialize.h"
|
||||
#include <QtGlobal>
|
||||
#include <QDataStream>
|
||||
#include <QTextStream>
|
||||
#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
|
||||
|
||||
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#ifndef BLACKMISC_PQBASE_H
|
||||
#define BLACKMISC_PQBASE_H
|
||||
|
||||
#include "blackmisc/basestreamstringifier.h"
|
||||
#include "blackmisc/debug.h"
|
||||
#include <QString>
|
||||
#include <QtGlobal>
|
||||
@@ -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<CMeasurementPrefix>
|
||||
{
|
||||
/*!
|
||||
* \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<CMeasurementUnit>
|
||||
{
|
||||
|
||||
/*!
|
||||
* \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;
|
||||
}
|
||||
|
||||
@@ -38,7 +38,7 @@ template <class MU, class PQ> CPhysicalQuantity<MU, PQ>::CPhysicalQuantity(const
|
||||
// void
|
||||
}
|
||||
|
||||
/*!
|
||||
/*
|
||||
* Destructor
|
||||
*/
|
||||
template <class MU, class PQ> CPhysicalQuantity<MU, PQ>::~CPhysicalQuantity()
|
||||
|
||||
@@ -21,35 +21,8 @@ namespace PhysicalQuantities
|
||||
* \brief A physical quantity such as "5m", "20s", "1500ft/s"
|
||||
* \author KWB
|
||||
*/
|
||||
template <class MU, class PQ> class CPhysicalQuantity
|
||||
template <class MU, class PQ> class CPhysicalQuantity : public BlackMisc::CBaseStreamStringifier<PQ>
|
||||
{
|
||||
/*!
|
||||
* 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<qint32>(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
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
#include "blackmisc/serialize.h"
|
||||
|
||||
ISerialize::ISerialize()
|
||||
{
|
||||
}
|
||||
@@ -5,17 +5,22 @@
|
||||
|
||||
#ifndef SERIALIZE_H
|
||||
#define SERIALIZE_H
|
||||
#include <QDataStream>
|
||||
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user