refs #413 All value classes which had custom policies shall inherit from mixins instead.

This commit is contained in:
Mathew Sutcliffe
2015-05-03 23:34:06 +01:00
parent 9becc1c666
commit 36a2e1a2bb
38 changed files with 658 additions and 664 deletions

View File

@@ -18,33 +18,33 @@
namespace BlackMisc
{
namespace Aviation { class CAdfSystem; }
//! \private
template <> struct CValueObjectPolicy<Aviation::CAdfSystem> : 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<CAdfSystem, CModulator<CAdfSystem>>
class BLACKMISC_EXPORT CAdfSystem :
public CModulator<CAdfSystem>,
public Mixin::MetaType<CAdfSystem>,
public Mixin::JsonOperators<CAdfSystem>
{
public:
//! Base type
using base_type = CModulator<CAdfSystem>;
using Mixin::MetaType<CAdfSystem>::registerMetadata;
using Mixin::MetaType<CAdfSystem>::getMetaTypeId;
using Mixin::MetaType<CAdfSystem>::isA;
using Mixin::MetaType<CAdfSystem>::toCVariant;
using Mixin::MetaType<CAdfSystem>::toQVariant;
using Mixin::MetaType<CAdfSystem>::convertFromCVariant;
using Mixin::MetaType<CAdfSystem>::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?

View File

@@ -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);
}

View File

@@ -17,27 +17,46 @@
namespace BlackMisc
{
namespace Aviation { class CAltitude; }
//! \private
template <> struct CValueObjectPolicy<Aviation::CAltitude> : 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<CAltitude, PhysicalQuantities::CLength>
class BLACKMISC_EXPORT CAltitude :
public PhysicalQuantities::CLength,
public Mixin::MetaTypeAndQList<CAltitude>,
public Mixin::EqualsByTuple<CAltitude>,
public Mixin::CompareByTuple<CAltitude>,
public Mixin::HashByTuple<CAltitude>,
public Mixin::DBusByTuple<CAltitude>,
public Mixin::JsonByTuple<CAltitude>,
public Mixin::String<CAltitude>,
public Mixin::Icon<CAltitude>
{
public:
//! Base type
using base_type = PhysicalQuantities::CLength;
using Mixin::MetaTypeAndQList<CAltitude>::registerMetadata;
using Mixin::MetaTypeAndQList<CAltitude>::getMetaTypeId;
using Mixin::MetaTypeAndQList<CAltitude>::isA;
using Mixin::MetaTypeAndQList<CAltitude>::toCVariant;
using Mixin::MetaTypeAndQList<CAltitude>::toQVariant;
using Mixin::MetaTypeAndQList<CAltitude>::convertFromCVariant;
using Mixin::MetaTypeAndQList<CAltitude>::convertFromQVariant;
using Mixin::String<CAltitude>::toQString;
using Mixin::String<CAltitude>::toFormattedQString;
using Mixin::String<CAltitude>::toStdString;
using Mixin::String<CAltitude>::stringForStreaming;
using Mixin::DBusByTuple<CAltitude>::marshallToDbus;
using Mixin::DBusByTuple<CAltitude>::unmarshallFromDbus;
using Mixin::JsonByTuple<CAltitude>::toJson;
using Mixin::JsonByTuple<CAltitude>::convertFromJson;
using Mixin::Icon<CAltitude>::toIcon;
using Mixin::Icon<CAltitude>::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; }

View File

@@ -16,19 +16,18 @@
namespace BlackMisc
{
namespace Aviation { class CAvionicsBase; }
//! \private
template <> struct CValueObjectPolicy<Aviation::CAvionicsBase> : public CValueObjectPolicy<>
{
using MetaType = Policy::MetaType::None;
};
namespace Aviation
{
//! Base class for avionics
class BLACKMISC_EXPORT CAvionicsBase : public CValueObject<CAvionicsBase>
class BLACKMISC_EXPORT CAvionicsBase :
public Mixin::HashByTuple<CAvionicsBase>,
public Mixin::DBusByTuple<CAvionicsBase>,
public Mixin::JsonByTuple<CAvionicsBase>,
public Mixin::EqualsByTuple<CAvionicsBase>,
public Mixin::LessThanByTuple<CAvionicsBase>,
public Mixin::CompareByTuple<CAvionicsBase>,
public Mixin::String<CAvionicsBase>
{
protected:
QString m_name; //!< name of the unit

View File

@@ -17,25 +17,27 @@
namespace BlackMisc
{
namespace Aviation { class CComSystem; }
//! \private
template <> struct CValueObjectPolicy<Aviation::CComSystem> : 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<CComSystem, CModulator<CComSystem>>
class BLACKMISC_EXPORT CComSystem :
public CModulator<CComSystem>,
public Mixin::MetaType<CComSystem>,
public Mixin::JsonOperators<CComSystem>
{
public:
//! Base type
using base_type = CModulator<CComSystem>;
using Mixin::MetaType<CComSystem>::registerMetadata;
using Mixin::MetaType<CComSystem>::getMetaTypeId;
using Mixin::MetaType<CComSystem>::isA;
using Mixin::MetaType<CComSystem>::toCVariant;
using Mixin::MetaType<CComSystem>::toQVariant;
using Mixin::MetaType<CComSystem>::convertFromCVariant;
using Mixin::MetaType<CComSystem>::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

View File

@@ -17,27 +17,43 @@
namespace BlackMisc
{
namespace Aviation { class CHeading; }
//! \private
template <> struct CValueObjectPolicy<Aviation::CHeading> : 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<CHeading, PhysicalQuantities::CAngle>
class BLACKMISC_EXPORT CHeading :
public PhysicalQuantities::CAngle,
public Mixin::MetaTypeAndQList<CHeading>,
public Mixin::EqualsByTuple<CHeading>,
public Mixin::CompareByTuple<CHeading>,
public Mixin::HashByTuple<CHeading>,
public Mixin::DBusByTuple<CHeading>,
public Mixin::JsonByTuple<CHeading>,
public Mixin::String<CHeading>
{
public:
//! Base type
using base_type = PhysicalQuantities::CAngle;
using Mixin::MetaTypeAndQList<CHeading>::registerMetadata;
using Mixin::MetaTypeAndQList<CHeading>::getMetaTypeId;
using Mixin::MetaTypeAndQList<CHeading>::isA;
using Mixin::MetaTypeAndQList<CHeading>::toCVariant;
using Mixin::MetaTypeAndQList<CHeading>::toQVariant;
using Mixin::MetaTypeAndQList<CHeading>::convertFromCVariant;
using Mixin::MetaTypeAndQList<CHeading>::convertFromQVariant;
using Mixin::String<CHeading>::toQString;
using Mixin::String<CHeading>::toFormattedQString;
using Mixin::String<CHeading>::toStdString;
using Mixin::String<CHeading>::stringForStreaming;
using Mixin::DBusByTuple<CHeading>::marshallToDbus;
using Mixin::DBusByTuple<CHeading>::unmarshallFromDbus;
using Mixin::JsonByTuple<CHeading>::toJson;
using Mixin::JsonByTuple<CHeading>::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; }

View File

@@ -17,32 +17,33 @@
namespace BlackMisc
{
namespace Aviation { class CNavSystem; }
//! \private
template <> struct CValueObjectPolicy<Aviation::CNavSystem> : 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<CNavSystem, CModulator<CNavSystem>>
class BLACKMISC_EXPORT CNavSystem :
public CModulator<CNavSystem>,
public Mixin::MetaType<CNavSystem>,
public Mixin::JsonOperators<CNavSystem>
{
public:
//! Base type
using base_type = CModulator<CNavSystem>;
using Mixin::MetaType<CNavSystem>::registerMetadata;
using Mixin::MetaType<CNavSystem>::getMetaTypeId;
using Mixin::MetaType<CNavSystem>::isA;
using Mixin::MetaType<CNavSystem>::toCVariant;
using Mixin::MetaType<CNavSystem>::toQVariant;
using Mixin::MetaType<CNavSystem>::convertFromCVariant;
using Mixin::MetaType<CNavSystem>::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

View File

@@ -17,28 +17,44 @@
namespace BlackMisc
{
namespace Aviation { class CTrack; }
//! \private
template <> struct CValueObjectPolicy<Aviation::CTrack> : 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<CTrack, PhysicalQuantities::CAngle>
class BLACKMISC_EXPORT CTrack :
public PhysicalQuantities::CAngle,
public Mixin::MetaTypeAndQList<CTrack>,
public Mixin::EqualsByTuple<CTrack>,
public Mixin::CompareByTuple<CTrack>,
public Mixin::HashByTuple<CTrack>,
public Mixin::DBusByTuple<CTrack>,
public Mixin::JsonByTuple<CTrack>,
public Mixin::String<CTrack>
{
public:
//! Base type
using base_type = PhysicalQuantities::CAngle;
using Mixin::MetaTypeAndQList<CTrack>::registerMetadata;
using Mixin::MetaTypeAndQList<CTrack>::getMetaTypeId;
using Mixin::MetaTypeAndQList<CTrack>::isA;
using Mixin::MetaTypeAndQList<CTrack>::toCVariant;
using Mixin::MetaTypeAndQList<CTrack>::toQVariant;
using Mixin::MetaTypeAndQList<CTrack>::convertFromCVariant;
using Mixin::MetaTypeAndQList<CTrack>::convertFromQVariant;
using Mixin::String<CTrack>::toQString;
using Mixin::String<CTrack>::toFormattedQString;
using Mixin::String<CTrack>::toStdString;
using Mixin::String<CTrack>::stringForStreaming;
using Mixin::DBusByTuple<CTrack>::marshallToDbus;
using Mixin::DBusByTuple<CTrack>::unmarshallFromDbus;
using Mixin::JsonByTuple<CTrack>::toJson;
using Mixin::JsonByTuple<CTrack>::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

View File

@@ -18,14 +18,6 @@
namespace BlackMisc
{
namespace Aviation { class CTransponder; }
//! \private
template <> struct CValueObjectPolicy<Aviation::CTransponder> : public CValueObjectPolicy<>
{
using MetaType = Policy::MetaType::Default;
};
namespace Aviation
{
//! Transponder