From 36a2e1a2bba19d468902037bff49fb513f76671b Mon Sep 17 00:00:00 2001 From: Mathew Sutcliffe Date: Sun, 3 May 2015 23:34:06 +0100 Subject: [PATCH] refs #413 All value classes which had custom policies shall inherit from mixins instead. --- src/blackmisc/aviation/adfsystem.h | 32 +- src/blackmisc/aviation/altitude.cpp | 2 +- src/blackmisc/aviation/altitude.h | 51 ++- src/blackmisc/aviation/avionicsbase.h | 17 +- src/blackmisc/aviation/comsystem.h | 32 +- src/blackmisc/aviation/heading.h | 48 ++- src/blackmisc/aviation/navsystem.h | 33 +- src/blackmisc/aviation/track.h | 48 ++- src/blackmisc/aviation/transponder.h | 8 - .../blackmiscfreefunctions_pqmeta.cpp | 1 - src/blackmisc/containerbase.h | 26 +- src/blackmisc/dictionary.h | 16 +- src/blackmisc/eveventhotkeyfunction.h | 2 +- src/blackmisc/evoriginator.h | 19 +- src/blackmisc/geo/earthangle.cpp | 6 +- src/blackmisc/geo/earthangle.h | 10 +- src/blackmisc/geo/latitude.h | 32 +- src/blackmisc/geo/longitude.h | 32 +- src/blackmisc/logpattern.h | 20 +- src/blackmisc/network/client.h | 2 +- src/blackmisc/pq/acceleration.h | 15 +- src/blackmisc/pq/angle.h | 20 +- src/blackmisc/pq/frequency.h | 16 +- src/blackmisc/pq/length.h | 15 +- src/blackmisc/pq/mass.h | 15 +- src/blackmisc/pq/measurementunit.h | 21 +- src/blackmisc/pq/physicalquantity.cpp | 4 +- src/blackmisc/pq/physicalquantity.h | 25 +- src/blackmisc/pq/pressure.h | 15 +- src/blackmisc/pq/speed.h | 15 +- src/blackmisc/pq/temperature.h | 15 +- src/blackmisc/pq/time.cpp | 4 +- src/blackmisc/pq/time.h | 15 +- src/blackmisc/pq/units.h | 205 ++++++++-- src/blackmisc/propertyindexvariantmap.h | 13 +- src/blackmisc/valueobject.h | 363 ++++++------------ src/blackmisc/valueobject_private.h | 59 ++- src/blackmisc/variant.h | 50 +-- 38 files changed, 658 insertions(+), 664 deletions(-) diff --git a/src/blackmisc/aviation/adfsystem.h b/src/blackmisc/aviation/adfsystem.h index 5bd71a48c..3e063ab54 100644 --- a/src/blackmisc/aviation/adfsystem.h +++ b/src/blackmisc/aviation/adfsystem.h @@ -18,33 +18,33 @@ namespace BlackMisc { - namespace Aviation { class CAdfSystem; } - - //! \private - template <> struct CValueObjectPolicy : public CValueObjectPolicy<> - { - using MetaType = Policy::MetaType::Default; - using Equals = Policy::Equals::None; - using LessThan = Policy::LessThan::None; - using Compare = Policy::Compare::None; - using Hash = Policy::Hash::Own; - using DBus = Policy::DBus::Own; - using Json = Policy::Json::Own; - }; - namespace Aviation { //! ADF system ("for NDBs") - class BLACKMISC_EXPORT CAdfSystem : public CValueObject> + class BLACKMISC_EXPORT CAdfSystem : + public CModulator, + public Mixin::MetaType, + public Mixin::JsonOperators { public: + //! Base type + using base_type = CModulator; + + using Mixin::MetaType::registerMetadata; + using Mixin::MetaType::getMetaTypeId; + using Mixin::MetaType::isA; + using Mixin::MetaType::toCVariant; + using Mixin::MetaType::toQVariant; + using Mixin::MetaType::convertFromCVariant; + using Mixin::MetaType::convertFromQVariant; + //! Default constructor CAdfSystem() = default; //! Constructor CAdfSystem(const QString &name, const PhysicalQuantities::CFrequency &activeFrequency, const PhysicalQuantities::CFrequency &standbyFrequency = CModulator::FrequencyNotSet()): - CValueObject(name, activeFrequency, standbyFrequency == CModulator::FrequencyNotSet() ? activeFrequency : standbyFrequency) + CModulator(name, activeFrequency, standbyFrequency == CModulator::FrequencyNotSet() ? activeFrequency : standbyFrequency) { } //! Valid aviation frequency? diff --git a/src/blackmisc/aviation/altitude.cpp b/src/blackmisc/aviation/altitude.cpp index 73d49644b..6d24bfb9d 100644 --- a/src/blackmisc/aviation/altitude.cpp +++ b/src/blackmisc/aviation/altitude.cpp @@ -19,7 +19,7 @@ namespace BlackMisc namespace Aviation { - CAltitude::CAltitude(const QString &altitudeAsString, BlackMisc::PhysicalQuantities::CPqString::SeparatorMode mode) : CValueObject(0, BlackMisc::PhysicalQuantities::CLengthUnit::m()), m_datum(MeanSeaLevel) + CAltitude::CAltitude(const QString &altitudeAsString, BlackMisc::PhysicalQuantities::CPqString::SeparatorMode mode) : CLength(0, BlackMisc::PhysicalQuantities::CLengthUnit::m()), m_datum(MeanSeaLevel) { this->parseFromString(altitudeAsString, mode); } diff --git a/src/blackmisc/aviation/altitude.h b/src/blackmisc/aviation/altitude.h index 860b2cb7e..727b3e7fe 100644 --- a/src/blackmisc/aviation/altitude.h +++ b/src/blackmisc/aviation/altitude.h @@ -17,27 +17,46 @@ namespace BlackMisc { - namespace Aviation { class CAltitude; } - - //! \private - template <> struct CValueObjectPolicy : public CValueObjectPolicy<> - { - using Equals = Policy::Equals::MetaTuple; - using Compare = Policy::Compare::MetaTuple; - using Hash = Policy::Hash::MetaTuple; - using DBus = Policy::DBus::MetaTuple; - using Json = Policy::Json::MetaTuple; - }; - namespace Aviation { + /*! * Altitude as used in aviation, can be AGL or MSL altitude * \remarks Intentionally allowing +/- CLength , and >= / <= CLength. */ - class BLACKMISC_EXPORT CAltitude : public CValueObject + class BLACKMISC_EXPORT CAltitude : + public PhysicalQuantities::CLength, + public Mixin::MetaTypeAndQList, + public Mixin::EqualsByTuple, + public Mixin::CompareByTuple, + public Mixin::HashByTuple, + public Mixin::DBusByTuple, + public Mixin::JsonByTuple, + public Mixin::String, + public Mixin::Icon { public: + //! Base type + using base_type = PhysicalQuantities::CLength; + + using Mixin::MetaTypeAndQList::registerMetadata; + using Mixin::MetaTypeAndQList::getMetaTypeId; + using Mixin::MetaTypeAndQList::isA; + using Mixin::MetaTypeAndQList::toCVariant; + using Mixin::MetaTypeAndQList::toQVariant; + using Mixin::MetaTypeAndQList::convertFromCVariant; + using Mixin::MetaTypeAndQList::convertFromQVariant; + using Mixin::String::toQString; + using Mixin::String::toFormattedQString; + using Mixin::String::toStdString; + using Mixin::String::stringForStreaming; + using Mixin::DBusByTuple::marshallToDbus; + using Mixin::DBusByTuple::unmarshallFromDbus; + using Mixin::JsonByTuple::toJson; + using Mixin::JsonByTuple::convertFromJson; + using Mixin::Icon::toIcon; + using Mixin::Icon::toPixmap; + /*! * Enum type to distinguish between MSL and AGL */ @@ -52,16 +71,16 @@ namespace BlackMisc QString convertToQString(bool i18n = false) const; //! Default constructor: 0 Altitude true - CAltitude() : CValueObject(0, BlackMisc::PhysicalQuantities::CLengthUnit::m()), m_datum(MeanSeaLevel) {} + CAltitude() : CLength(0, BlackMisc::PhysicalQuantities::CLengthUnit::m()), m_datum(MeanSeaLevel) {} //! Constructor - CAltitude(double value, ReferenceDatum datum, const BlackMisc::PhysicalQuantities::CLengthUnit &unit) : CValueObject(value, unit), m_datum(datum) {} + CAltitude(double value, ReferenceDatum datum, const BlackMisc::PhysicalQuantities::CLengthUnit &unit) : CLength(value, unit), m_datum(datum) {} //! Altitude as string CAltitude(const QString &altitudeAsString, BlackMisc::PhysicalQuantities::CPqString::SeparatorMode mode = BlackMisc::PhysicalQuantities::CPqString::SeparatorsLocale); //! Constructor by CLength - CAltitude(BlackMisc::PhysicalQuantities::CLength altitude, ReferenceDatum datum) : CValueObject(altitude), m_datum(datum) {} + CAltitude(BlackMisc::PhysicalQuantities::CLength altitude, ReferenceDatum datum) : CLength(altitude), m_datum(datum) {} //! AGL Above ground level? bool isAboveGroundLevel() const { return AboveGround == this->m_datum; } diff --git a/src/blackmisc/aviation/avionicsbase.h b/src/blackmisc/aviation/avionicsbase.h index 641948e22..5fa0e70c6 100644 --- a/src/blackmisc/aviation/avionicsbase.h +++ b/src/blackmisc/aviation/avionicsbase.h @@ -16,19 +16,18 @@ namespace BlackMisc { - namespace Aviation { class CAvionicsBase; } - - //! \private - template <> struct CValueObjectPolicy : public CValueObjectPolicy<> - { - using MetaType = Policy::MetaType::None; - }; - namespace Aviation { //! Base class for avionics - class BLACKMISC_EXPORT CAvionicsBase : public CValueObject + class BLACKMISC_EXPORT CAvionicsBase : + public Mixin::HashByTuple, + public Mixin::DBusByTuple, + public Mixin::JsonByTuple, + public Mixin::EqualsByTuple, + public Mixin::LessThanByTuple, + public Mixin::CompareByTuple, + public Mixin::String { protected: QString m_name; //!< name of the unit diff --git a/src/blackmisc/aviation/comsystem.h b/src/blackmisc/aviation/comsystem.h index 6936c3f62..38206b51f 100644 --- a/src/blackmisc/aviation/comsystem.h +++ b/src/blackmisc/aviation/comsystem.h @@ -17,25 +17,27 @@ namespace BlackMisc { - namespace Aviation { class CComSystem; } - - //! \private - template <> struct CValueObjectPolicy : public CValueObjectPolicy<> - { - using MetaType = Policy::MetaType::Default; - using LessThan = Policy::LessThan::None; - using Compare = Policy::Compare::None; - using Hash = Policy::Hash::Own; - using DBus = Policy::DBus::Own; - using Json = Policy::Json::Own; - }; - namespace Aviation { + //! COM system (aka "radio") - class BLACKMISC_EXPORT CComSystem : public CValueObject> + class BLACKMISC_EXPORT CComSystem : + public CModulator, + public Mixin::MetaType, + public Mixin::JsonOperators { public: + //! Base type + using base_type = CModulator; + + using Mixin::MetaType::registerMetadata; + using Mixin::MetaType::getMetaTypeId; + using Mixin::MetaType::isA; + using Mixin::MetaType::toCVariant; + using Mixin::MetaType::toQVariant; + using Mixin::MetaType::convertFromCVariant; + using Mixin::MetaType::convertFromQVariant; + //! Channel spacing frequency enum ChannelSpacing { @@ -56,7 +58,7 @@ namespace BlackMisc //! Constructor CComSystem(const QString &name, const BlackMisc::PhysicalQuantities::CFrequency &activeFrequency, const BlackMisc::PhysicalQuantities::CFrequency &standbyFrequency = CModulator::FrequencyNotSet()): - CValueObject(name, activeFrequency, standbyFrequency == CModulator::FrequencyNotSet() ? activeFrequency : standbyFrequency) + CModulator(name, activeFrequency, standbyFrequency == CModulator::FrequencyNotSet() ? activeFrequency : standbyFrequency) { } //! Set active frequency diff --git a/src/blackmisc/aviation/heading.h b/src/blackmisc/aviation/heading.h index 0a8e6e684..44b8c9708 100644 --- a/src/blackmisc/aviation/heading.h +++ b/src/blackmisc/aviation/heading.h @@ -17,27 +17,43 @@ namespace BlackMisc { - namespace Aviation { class CHeading; } - - //! \private - template <> struct CValueObjectPolicy : public CValueObjectPolicy<> - { - using Equals = Policy::Equals::MetaTuple; - using Compare = Policy::Compare::MetaTuple; - using Hash = Policy::Hash::MetaTuple; - using DBus = Policy::DBus::MetaTuple; - using Json = Policy::Json::MetaTuple; - }; - namespace Aviation { + /*! * \brief Heading as used in aviation, can be true or magnetic heading * \remarks Intentionally allowing +/- CAngle , and >= / <= CAngle. */ - class BLACKMISC_EXPORT CHeading : public CValueObject + class BLACKMISC_EXPORT CHeading : + public PhysicalQuantities::CAngle, + public Mixin::MetaTypeAndQList, + public Mixin::EqualsByTuple, + public Mixin::CompareByTuple, + public Mixin::HashByTuple, + public Mixin::DBusByTuple, + public Mixin::JsonByTuple, + public Mixin::String { public: + //! Base type + using base_type = PhysicalQuantities::CAngle; + + using Mixin::MetaTypeAndQList::registerMetadata; + using Mixin::MetaTypeAndQList::getMetaTypeId; + using Mixin::MetaTypeAndQList::isA; + using Mixin::MetaTypeAndQList::toCVariant; + using Mixin::MetaTypeAndQList::toQVariant; + using Mixin::MetaTypeAndQList::convertFromCVariant; + using Mixin::MetaTypeAndQList::convertFromQVariant; + using Mixin::String::toQString; + using Mixin::String::toFormattedQString; + using Mixin::String::toStdString; + using Mixin::String::stringForStreaming; + using Mixin::DBusByTuple::marshallToDbus; + using Mixin::DBusByTuple::unmarshallFromDbus; + using Mixin::JsonByTuple::toJson; + using Mixin::JsonByTuple::convertFromJson; + //! Enum type to distinguish between true north and magnetic north enum ReferenceNorth { @@ -49,13 +65,13 @@ namespace BlackMisc QString convertToQString(bool i18n = false) const; //! \brief Default constructor: 0 heading true - CHeading() : CValueObject(0, BlackMisc::PhysicalQuantities::CAngleUnit::rad()), m_north(Magnetic) {} + CHeading() : CAngle(0, BlackMisc::PhysicalQuantities::CAngleUnit::rad()), m_north(Magnetic) {} //! \brief Constructor - CHeading(double value, ReferenceNorth north, const BlackMisc::PhysicalQuantities::CAngleUnit &unit) : CValueObject(value, unit), m_north(north) {} + CHeading(double value, ReferenceNorth north, const BlackMisc::PhysicalQuantities::CAngleUnit &unit) : CAngle(value, unit), m_north(north) {} //! \brief Constructor by CAngle - CHeading(CAngle heading, ReferenceNorth north) : CValueObject(heading), m_north(north) {} + CHeading(CAngle heading, ReferenceNorth north) : CAngle(heading), m_north(north) {} //! \brief Magnetic heading? bool isMagneticHeading() const { return Magnetic == this->m_north; } diff --git a/src/blackmisc/aviation/navsystem.h b/src/blackmisc/aviation/navsystem.h index fcef4178e..39dbc54d7 100644 --- a/src/blackmisc/aviation/navsystem.h +++ b/src/blackmisc/aviation/navsystem.h @@ -17,32 +17,33 @@ namespace BlackMisc { - namespace Aviation { class CNavSystem; } - - //! \private - template <> struct CValueObjectPolicy : public CValueObjectPolicy<> - { - using MetaType = Policy::MetaType::Default; - using Equals = Policy::Equals::None; - using LessThan = Policy::LessThan::None; - using Compare = Policy::Compare::None; - using Hash = Policy::Hash::Own; - using DBus = Policy::DBus::Own; - using Json = Policy::Json::Own; - }; - namespace Aviation { + //! NAV system (radio navigation) - class BLACKMISC_EXPORT CNavSystem : public CValueObject> + class BLACKMISC_EXPORT CNavSystem : + public CModulator, + public Mixin::MetaType, + public Mixin::JsonOperators { public: + //! Base type + using base_type = CModulator; + + using Mixin::MetaType::registerMetadata; + using Mixin::MetaType::getMetaTypeId; + using Mixin::MetaType::isA; + using Mixin::MetaType::toCVariant; + using Mixin::MetaType::toQVariant; + using Mixin::MetaType::convertFromCVariant; + using Mixin::MetaType::convertFromQVariant; + //! Default constructor CNavSystem() = default; //! Constructor CNavSystem(const QString &name, const BlackMisc::PhysicalQuantities::CFrequency &activeFrequency, const BlackMisc::PhysicalQuantities::CFrequency &standbyFrequency): - CValueObject(name, activeFrequency, standbyFrequency) + CModulator(name, activeFrequency, standbyFrequency) { } //! Set active frequency diff --git a/src/blackmisc/aviation/track.h b/src/blackmisc/aviation/track.h index 5d525b714..ca5235eb8 100644 --- a/src/blackmisc/aviation/track.h +++ b/src/blackmisc/aviation/track.h @@ -17,28 +17,44 @@ namespace BlackMisc { - namespace Aviation { class CTrack; } - - //! \private - template <> struct CValueObjectPolicy : public CValueObjectPolicy<> - { - using Equals = Policy::Equals::MetaTuple; - using Compare = Policy::Compare::MetaTuple; - using Hash = Policy::Hash::MetaTuple; - using DBus = Policy::DBus::MetaTuple; - using Json = Policy::Json::MetaTuple; - }; - namespace Aviation { + /*! * \brief Track as used in aviation, can be true or magnetic Track * \remarks Intentionally allowing +/- BlackMisc::PhysicalQuantities::CAngle , * and >= / <= CAngle. */ - class BLACKMISC_EXPORT CTrack : public CValueObject + class BLACKMISC_EXPORT CTrack : + public PhysicalQuantities::CAngle, + public Mixin::MetaTypeAndQList, + public Mixin::EqualsByTuple, + public Mixin::CompareByTuple, + public Mixin::HashByTuple, + public Mixin::DBusByTuple, + public Mixin::JsonByTuple, + public Mixin::String { public: + //! Base type + using base_type = PhysicalQuantities::CAngle; + + using Mixin::MetaTypeAndQList::registerMetadata; + using Mixin::MetaTypeAndQList::getMetaTypeId; + using Mixin::MetaTypeAndQList::isA; + using Mixin::MetaTypeAndQList::toCVariant; + using Mixin::MetaTypeAndQList::toQVariant; + using Mixin::MetaTypeAndQList::convertFromCVariant; + using Mixin::MetaTypeAndQList::convertFromQVariant; + using Mixin::String::toQString; + using Mixin::String::toFormattedQString; + using Mixin::String::toStdString; + using Mixin::String::stringForStreaming; + using Mixin::DBusByTuple::marshallToDbus; + using Mixin::DBusByTuple::unmarshallFromDbus; + using Mixin::JsonByTuple::toJson; + using Mixin::JsonByTuple::convertFromJson; + /*! * Enum type to distinguish between true north and magnetic north */ @@ -49,13 +65,13 @@ namespace BlackMisc }; //! \brief Default constructor: 0 Track magnetic - CTrack() : CValueObject(0, BlackMisc::PhysicalQuantities::CAngleUnit::rad()), m_north(Magnetic) {} + CTrack() : CAngle(0, BlackMisc::PhysicalQuantities::CAngleUnit::rad()), m_north(Magnetic) {} //! \brief Constructor - CTrack(double value, ReferenceNorth north, const BlackMisc::PhysicalQuantities::CAngleUnit &unit) : CValueObject(value, unit), m_north(north) {} + CTrack(double value, ReferenceNorth north, const BlackMisc::PhysicalQuantities::CAngleUnit &unit) : CAngle(value, unit), m_north(north) {} //! \brief Constructor by CAngle - CTrack(BlackMisc::PhysicalQuantities::CAngle track, ReferenceNorth north) : CValueObject(track), m_north(north) {} + CTrack(BlackMisc::PhysicalQuantities::CAngle track, ReferenceNorth north) : CAngle(track), m_north(north) {} //! \brief Magnetic Track? bool isMagneticTrack() const diff --git a/src/blackmisc/aviation/transponder.h b/src/blackmisc/aviation/transponder.h index 326de5aad..6ffd950db 100644 --- a/src/blackmisc/aviation/transponder.h +++ b/src/blackmisc/aviation/transponder.h @@ -18,14 +18,6 @@ namespace BlackMisc { - namespace Aviation { class CTransponder; } - - //! \private - template <> struct CValueObjectPolicy : public CValueObjectPolicy<> - { - using MetaType = Policy::MetaType::Default; - }; - namespace Aviation { //! Transponder diff --git a/src/blackmisc/blackmiscfreefunctions_pqmeta.cpp b/src/blackmisc/blackmiscfreefunctions_pqmeta.cpp index 90c50f3bb..3724c682a 100644 --- a/src/blackmisc/blackmiscfreefunctions_pqmeta.cpp +++ b/src/blackmisc/blackmiscfreefunctions_pqmeta.cpp @@ -18,7 +18,6 @@ */ void BlackMisc::PhysicalQuantities::registerMetadata() { - CMeasurementUnit::registerMetadata(); CAcceleration::registerMetadata(); CAccelerationUnit::registerMetadata(); CAngle::registerMetadata(); diff --git a/src/blackmisc/containerbase.h b/src/blackmisc/containerbase.h index 690a17b07..9691b33b5 100644 --- a/src/blackmisc/containerbase.h +++ b/src/blackmisc/containerbase.h @@ -42,22 +42,18 @@ namespace BlackMisc static QString stringify(QString str, bool /*i18n*/) { return str; } }; - // forward declaration - template