mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-06 18:25:37 +08:00
Ref T552 Using QDataStream marshalling mixins in value classes.
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
#include "blackmisc/statusmessagelist.h"
|
||||
#include "blackmisc/compare.h"
|
||||
#include "blackmisc/dbus.h"
|
||||
#include "blackmisc/datastream.h"
|
||||
#include "blackmisc/dictionary.h"
|
||||
#include "blackmisc/icon.h"
|
||||
#include "blackmisc/metaclass.h"
|
||||
@@ -46,6 +47,7 @@ namespace BlackMisc
|
||||
public Mixin::HashByMetaClass<CAltitude>,
|
||||
public Mixin::DBusByMetaClass<CAltitude>,
|
||||
public Mixin::DBusByMetaClass<CAltitude, LosslessTag>,
|
||||
public Mixin::DataStreamByMetaClass<CAltitude>,
|
||||
public Mixin::JsonByMetaClass<CAltitude>,
|
||||
public Mixin::String<CAltitude>,
|
||||
public Mixin::Icon<CAltitude>,
|
||||
@@ -59,6 +61,7 @@ namespace BlackMisc
|
||||
BLACKMISC_DECLARE_USING_MIXIN_STRING(CAltitude)
|
||||
BLACKMISC_DECLARE_USING_MIXIN_DBUS(CAltitude)
|
||||
BLACKMISC_DECLARE_USING_MIXIN_DBUS(CAltitude, LosslessTag)
|
||||
BLACKMISC_DECLARE_USING_MIXIN_DATASTREAM(CAltitude)
|
||||
BLACKMISC_DECLARE_USING_MIXIN_JSON(CAltitude)
|
||||
BLACKMISC_DECLARE_USING_MIXIN_ICON(CAltitude)
|
||||
BLACKMISC_DECLARE_USING_MIXIN_INDEX(CAltitude)
|
||||
|
||||
@@ -41,6 +41,7 @@ namespace BlackMisc
|
||||
public Mixin::CompareByMetaClass<CHeading>,
|
||||
public Mixin::HashByMetaClass<CHeading>,
|
||||
public Mixin::DBusByMetaClass<CHeading>,
|
||||
public Mixin::DataStreamByMetaClass<CHeading>,
|
||||
public Mixin::JsonByMetaClass<CHeading>,
|
||||
public Mixin::String<CHeading>,
|
||||
public Mixin::Index<CHeading>
|
||||
@@ -52,6 +53,7 @@ namespace BlackMisc
|
||||
BLACKMISC_DECLARE_USING_MIXIN_METATYPE(CHeading)
|
||||
BLACKMISC_DECLARE_USING_MIXIN_STRING(CHeading)
|
||||
BLACKMISC_DECLARE_USING_MIXIN_DBUS(CHeading)
|
||||
BLACKMISC_DECLARE_USING_MIXIN_DATASTREAM(CHeading)
|
||||
BLACKMISC_DECLARE_USING_MIXIN_JSON(CHeading)
|
||||
BLACKMISC_DECLARE_USING_MIXIN_INDEX(CHeading)
|
||||
|
||||
|
||||
@@ -44,6 +44,7 @@ namespace BlackMisc
|
||||
public Mixin::CompareByMetaClass<CTrack>,
|
||||
public Mixin::HashByMetaClass<CTrack>,
|
||||
public Mixin::DBusByMetaClass<CTrack>,
|
||||
public Mixin::DataStreamByMetaClass<CTrack>,
|
||||
public Mixin::JsonByMetaClass<CTrack>,
|
||||
public Mixin::String<CTrack>,
|
||||
public Mixin::Index<CTrack>
|
||||
@@ -55,6 +56,7 @@ namespace BlackMisc
|
||||
BLACKMISC_DECLARE_USING_MIXIN_METATYPE(CTrack)
|
||||
BLACKMISC_DECLARE_USING_MIXIN_STRING(CTrack)
|
||||
BLACKMISC_DECLARE_USING_MIXIN_DBUS(CTrack)
|
||||
BLACKMISC_DECLARE_USING_MIXIN_DATASTREAM(CTrack)
|
||||
BLACKMISC_DECLARE_USING_MIXIN_JSON(CTrack)
|
||||
BLACKMISC_DECLARE_USING_MIXIN_INDEX(CTrack)
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
#define BLACKMISC_COLLECTION_H
|
||||
|
||||
#include "containerbase.h"
|
||||
#include "datastream.h"
|
||||
#include "icon.h"
|
||||
#include <QMap>
|
||||
#include <algorithm>
|
||||
@@ -54,6 +55,7 @@ namespace BlackMisc
|
||||
template <class T>
|
||||
class CCollection :
|
||||
public CContainerBase<CCollection<T>>,
|
||||
public Mixin::DataStreamOperators<CCollection<T>>,
|
||||
public Mixin::Icon<CCollection<T>>
|
||||
{
|
||||
public:
|
||||
@@ -270,6 +272,12 @@ namespace BlackMisc
|
||||
//! Test for inequality.
|
||||
friend bool operator !=(const CCollection &a, const CCollection &b) { return a.m_impl != b.m_impl; }
|
||||
|
||||
//! \copydoc BlackMisc::Mixin::DataStreamByMetaClass::marshalToDataStream
|
||||
void marshalToDataStream(QDataStream &stream) const { stream << m_impl; }
|
||||
|
||||
//! \copydoc BlackMisc::Mixin::DataStreamByMetaClass::unmarshalFromDataStream
|
||||
void unmarshalFromDataStream(QDataStream &stream) { stream >> m_impl; }
|
||||
|
||||
private:
|
||||
QOrderedSet<T> m_impl;
|
||||
};
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
#include "blackmisc/blackmiscexport.h"
|
||||
#include "blackmisc/containerbase.h"
|
||||
#include "blackmisc/dbus.h"
|
||||
#include "blackmisc/datastream.h"
|
||||
#include "blackmisc/inheritancetraits.h"
|
||||
#include "blackmisc/iterator.h"
|
||||
#include "blackmisc/json.h"
|
||||
@@ -96,6 +97,7 @@ namespace BlackMisc
|
||||
template<class Key, class Value, template <class...> class Impl = TDefaultAssociativeType>
|
||||
class CDictionary :
|
||||
public Mixin::DBusOperators<CDictionary<Key, Value, Impl>>,
|
||||
public Mixin::DataStreamOperators<CDictionary<Key, Value, Impl>>,
|
||||
public Mixin::JsonOperators<CDictionary<Key, Value, Impl>>,
|
||||
public Mixin::String<CDictionary<Key, Value, Impl>>
|
||||
{
|
||||
@@ -460,6 +462,12 @@ namespace BlackMisc
|
||||
argument >> m_impl;
|
||||
}
|
||||
|
||||
//! \copydoc BlackMisc::Mixin::DataStreamByMetaClass::marshalToDataStream
|
||||
void marshalToDataStream(QDataStream &stream) const { stream << m_impl; }
|
||||
|
||||
//! \copydoc BlackMisc::Mixin::DataStreamByMetaClass::unmarshalFromDataStream
|
||||
void unmarshalFromDataStream(QDataStream &stream) { stream >> m_impl; }
|
||||
|
||||
private:
|
||||
Impl<Key,Value> m_impl;
|
||||
};
|
||||
|
||||
@@ -24,6 +24,7 @@ namespace BlackMisc
|
||||
public Mixin::MetaType<CLatitude>,
|
||||
public Mixin::String<CLatitude>,
|
||||
public Mixin::DBusOperators<CLatitude>,
|
||||
public Mixin::DataStreamOperators<CLatitude>,
|
||||
public Mixin::Index<CLatitude>
|
||||
{
|
||||
public:
|
||||
|
||||
@@ -24,6 +24,7 @@ namespace BlackMisc
|
||||
public Mixin::MetaType<CLongitude>,
|
||||
public Mixin::String<CLongitude>,
|
||||
public Mixin::DBusOperators<CLongitude>,
|
||||
public Mixin::DataStreamOperators<CLatitude>,
|
||||
public Mixin::Index<CLongitude>
|
||||
{
|
||||
public:
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
#include "blackmisc/blackmiscexport.h"
|
||||
#include "blackmisc/compare.h"
|
||||
#include "blackmisc/dbus.h"
|
||||
#include "blackmisc/datastream.h"
|
||||
#include "blackmisc/dictionary.h"
|
||||
#include "blackmisc/icons.h"
|
||||
#include "blackmisc/json.h"
|
||||
@@ -67,6 +68,7 @@ namespace BlackMisc
|
||||
public Mixin::MetaType<CIcon>,
|
||||
public Mixin::HashByMetaClass<CIcon>,
|
||||
public Mixin::DBusByMetaClass<CIcon>,
|
||||
public Mixin::DataStreamByMetaClass<CIcon>,
|
||||
public Mixin::JsonByMetaClass<CIcon>,
|
||||
public Mixin::EqualsByMetaClass<CIcon>,
|
||||
public Mixin::LessThanByMetaClass<CIcon>,
|
||||
|
||||
@@ -359,4 +359,26 @@ namespace BlackMisc
|
||||
if (severities & (1 << s)) { m_severities.insert(static_cast<CStatusMessage::StatusSeverity>(s)); }
|
||||
}
|
||||
}
|
||||
|
||||
void CLogPattern::marshalToDataStream(QDataStream &stream) const
|
||||
{
|
||||
quint8 severities = 0;
|
||||
for (auto s : m_severities) { severities |= (1 << static_cast<int>(s)); }
|
||||
|
||||
stream << severities << m_strategy << m_strings.toList();
|
||||
}
|
||||
|
||||
void CLogPattern::unmarshalFromDataStream(QDataStream &stream)
|
||||
{
|
||||
quint8 severities;
|
||||
QStringList strings;
|
||||
stream >> severities >> m_strategy >> strings;
|
||||
m_strings = strings.toSet();
|
||||
|
||||
m_severities.clear();
|
||||
for (int s : { 0, 1, 2, 3 })
|
||||
{
|
||||
if (severities & (1 << s)) { m_severities.insert(static_cast<CStatusMessage::StatusSeverity>(s)); }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
#include "blackmisc/blackmiscexport.h"
|
||||
#include "blackmisc/compare.h"
|
||||
#include "blackmisc/dbus.h"
|
||||
#include "blackmisc/datastream.h"
|
||||
#include "blackmisc/dictionary.h"
|
||||
#include "blackmisc/icon.h"
|
||||
#include "blackmisc/metaclass.h"
|
||||
@@ -44,6 +45,7 @@ namespace BlackMisc
|
||||
public Mixin::HashByMetaClass<CLogPattern>,
|
||||
public Mixin::EqualsByMetaClass<CLogPattern>,
|
||||
public Mixin::DBusOperators<CLogPattern>,
|
||||
public Mixin::DataStreamOperators<CLogPattern>,
|
||||
public Mixin::Index<CLogPattern>,
|
||||
public Mixin::String<CLogPattern>,
|
||||
public Mixin::Icon<CLogPattern>
|
||||
@@ -107,6 +109,12 @@ namespace BlackMisc
|
||||
//! \copydoc BlackMisc::Mixin::DBusByMetaClass::unmarshallFromDbus()
|
||||
void unmarshallFromDbus(const QDBusArgument &argument);
|
||||
|
||||
//! \copydoc BlackMisc::Mixin::DataStreamByMetaClass::marshalToDataStream
|
||||
void marshalToDataStream(QDataStream &stream) const;
|
||||
|
||||
//! \copydoc BlackMisc::Mixin::DataStreamByMetaClass::unmarshalFromDataStream
|
||||
void unmarshalFromDataStream(QDataStream &stream);
|
||||
|
||||
private:
|
||||
bool checkInvariants() const;
|
||||
|
||||
|
||||
@@ -271,6 +271,20 @@ namespace BlackMisc
|
||||
(*this) = CMeasurementUnit::None();
|
||||
}
|
||||
|
||||
//! \copydoc BlackMisc::Mixin::DataStreamByMetaClass::marshalToDataStream
|
||||
void marshalToDataStream(QDataStream &stream) const
|
||||
{
|
||||
stream << QString(m_data->m_symbol);
|
||||
}
|
||||
|
||||
//! \copydoc BlackMisc::Mixin::DataStreamByMetaClass::unmarshalFromDataStream
|
||||
void unmarshalFromDataStream(QDataStream &)
|
||||
{
|
||||
// the concrete implementations will override this default
|
||||
// this is required so that None can be marshalled
|
||||
*this = CMeasurementUnit::None();
|
||||
}
|
||||
|
||||
//! Equal operator ==
|
||||
friend bool operator == (const CMeasurementUnit &a, const CMeasurementUnit &b)
|
||||
{
|
||||
|
||||
@@ -188,6 +188,24 @@ namespace BlackMisc
|
||||
argument >> m_unit;
|
||||
}
|
||||
|
||||
template <class MU, class PQ>
|
||||
void CPhysicalQuantity<MU, PQ>::marshalToDataStream(QDataStream &stream) const
|
||||
{
|
||||
constexpr double NaN = std::numeric_limits<double>::quiet_NaN();
|
||||
stream << (this->isNull() ? NaN : this->value(UnitClass::defaultUnit()));
|
||||
}
|
||||
|
||||
template <class MU, class PQ>
|
||||
void CPhysicalQuantity<MU, PQ>::unmarshalFromDataStream(QDataStream &stream)
|
||||
{
|
||||
stream >> m_value;
|
||||
m_unit = UnitClass::defaultUnit();
|
||||
if (std::isnan(m_value))
|
||||
{
|
||||
this->setNull();
|
||||
}
|
||||
}
|
||||
|
||||
template <class MU, class PQ>
|
||||
CPhysicalQuantity<MU, PQ> &CPhysicalQuantity<MU, PQ>::operator *=(double factor)
|
||||
{
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
|
||||
#include "blackmisc/blackmiscexport.h"
|
||||
#include "blackmisc/dbus.h"
|
||||
#include "blackmisc/datastream.h"
|
||||
#include "blackmisc/icon.h"
|
||||
#include "blackmisc/json.h"
|
||||
#include "blackmisc/pq/pqstring.h"
|
||||
@@ -46,6 +47,7 @@ namespace BlackMisc
|
||||
*/
|
||||
template <class MU, class PQ> class CPhysicalQuantity :
|
||||
public Mixin::DBusOperators<CPhysicalQuantity<MU, PQ>>,
|
||||
public Mixin::DataStreamOperators<CPhysicalQuantity<MU, PQ>>,
|
||||
public Mixin::JsonOperators<CPhysicalQuantity<MU, PQ>>,
|
||||
public Mixin::Index<PQ>,
|
||||
public Mixin::MetaType<PQ>,
|
||||
@@ -219,6 +221,12 @@ namespace BlackMisc
|
||||
//! Unmarshal from DBus, with preserved measurement unit
|
||||
void unmarshallFromDbus(const QDBusArgument &argument, LosslessTag);
|
||||
|
||||
//! \copydoc BlackMisc::Mixin::DataStreamByMetaClass::marshalToDataStream
|
||||
void marshalToDataStream(QDataStream &stream) const;
|
||||
|
||||
//! \copydoc BlackMisc::Mixin::DataStreamByMetaClass::unmarshalFromDataStream
|
||||
void unmarshalFromDataStream(QDataStream &stream);
|
||||
|
||||
//! \copydoc BlackMisc::Mixin::HashByMetaClass::qHash
|
||||
uint getValueHash() const;
|
||||
|
||||
|
||||
@@ -44,6 +44,7 @@ namespace BlackMisc
|
||||
public CMeasurementUnit,
|
||||
public Mixin::MetaType<CLengthUnit>,
|
||||
public Mixin::DBusOperators<CLengthUnit>,
|
||||
public Mixin::DataStreamOperators<CLengthUnit>,
|
||||
public Mixin::Index<CLengthUnit>
|
||||
{
|
||||
private:
|
||||
@@ -152,6 +153,14 @@ namespace BlackMisc
|
||||
argument >> unitName;
|
||||
(*this) = CMeasurementUnit::unitFromSymbol<CLengthUnit>(unitName);
|
||||
}
|
||||
|
||||
//! \copydoc BlackMisc::Mixin::DataStreamByMetaClass::unmarshalFromDataStream
|
||||
void unmarshalFromDataStream(QDataStream &stream)
|
||||
{
|
||||
QString unitName;
|
||||
stream >> unitName;
|
||||
*this = CMeasurementUnit::unitFromSymbol<CLengthUnit>(unitName);
|
||||
}
|
||||
};
|
||||
|
||||
//! Specialized class for angles (degrees, radian).
|
||||
@@ -159,6 +168,7 @@ namespace BlackMisc
|
||||
public CMeasurementUnit,
|
||||
public Mixin::MetaType<CAngleUnit>,
|
||||
public Mixin::DBusOperators<CAngleUnit>,
|
||||
public Mixin::DataStreamOperators<CAngleUnit>,
|
||||
public Mixin::Index<CAngleUnit>
|
||||
{
|
||||
private:
|
||||
@@ -245,6 +255,14 @@ namespace BlackMisc
|
||||
argument >> unitName;
|
||||
(*this) = CMeasurementUnit::unitFromSymbol<CAngleUnit>(unitName);
|
||||
}
|
||||
|
||||
//! \copydoc BlackMisc::Mixin::DataStreamByMetaClass::unmarshalFromDataStream
|
||||
void unmarshalFromDataStream(QDataStream &stream)
|
||||
{
|
||||
QString unitName;
|
||||
stream >> unitName;
|
||||
*this = CMeasurementUnit::unitFromSymbol<CAngleUnit>(unitName);
|
||||
}
|
||||
};
|
||||
|
||||
//! Specialized class for frequency (hertz, mega hertz, kilo hertz).
|
||||
@@ -252,6 +270,7 @@ namespace BlackMisc
|
||||
public CMeasurementUnit,
|
||||
public Mixin::MetaType<CFrequencyUnit>,
|
||||
public Mixin::DBusOperators<CFrequencyUnit>,
|
||||
public Mixin::DataStreamOperators<CFrequencyUnit>,
|
||||
public Mixin::Index<CFrequencyUnit>
|
||||
{
|
||||
private:
|
||||
@@ -332,6 +351,14 @@ namespace BlackMisc
|
||||
argument >> unitName;
|
||||
(*this) = CMeasurementUnit::unitFromSymbol<CFrequencyUnit>(unitName);
|
||||
}
|
||||
|
||||
//! \copydoc BlackMisc::Mixin::DataStreamByMetaClass::unmarshalFromDataStream
|
||||
void unmarshalFromDataStream(QDataStream &stream)
|
||||
{
|
||||
QString unitName;
|
||||
stream >> unitName;
|
||||
*this = CMeasurementUnit::unitFromSymbol<CFrequencyUnit>(unitName);
|
||||
}
|
||||
};
|
||||
|
||||
//! Specialized class for mass units (kg, lbs).
|
||||
@@ -339,6 +366,7 @@ namespace BlackMisc
|
||||
public CMeasurementUnit,
|
||||
public Mixin::MetaType<CMassUnit>,
|
||||
public Mixin::DBusOperators<CMassUnit>,
|
||||
public Mixin::DataStreamOperators<CMassUnit>,
|
||||
public Mixin::Index<CMassUnit>
|
||||
{
|
||||
private:
|
||||
@@ -428,6 +456,14 @@ namespace BlackMisc
|
||||
argument >> unitName;
|
||||
(*this) = CMeasurementUnit::unitFromSymbol<CMassUnit>(unitName);
|
||||
}
|
||||
|
||||
//! \copydoc BlackMisc::Mixin::DataStreamByMetaClass::unmarshalFromDataStream
|
||||
void unmarshalFromDataStream(QDataStream &stream)
|
||||
{
|
||||
QString unitName;
|
||||
stream >> unitName;
|
||||
*this = CMeasurementUnit::unitFromSymbol<CMassUnit>(unitName);
|
||||
}
|
||||
};
|
||||
|
||||
//! Specialized class for pressure (psi, hPa, bar).
|
||||
@@ -435,6 +471,7 @@ namespace BlackMisc
|
||||
public CMeasurementUnit,
|
||||
public Mixin::MetaType<CPressureUnit>,
|
||||
public Mixin::DBusOperators<CPressureUnit>,
|
||||
public Mixin::DataStreamOperators<CPressureUnit>,
|
||||
public Mixin::Index<CPressureUnit>
|
||||
{
|
||||
private:
|
||||
@@ -541,6 +578,14 @@ namespace BlackMisc
|
||||
argument >> unitName;
|
||||
(*this) = CMeasurementUnit::unitFromSymbol<CPressureUnit>(unitName);
|
||||
}
|
||||
|
||||
//! \copydoc BlackMisc::Mixin::DataStreamByMetaClass::unmarshalFromDataStream
|
||||
void unmarshalFromDataStream(QDataStream &stream)
|
||||
{
|
||||
QString unitName;
|
||||
stream >> unitName;
|
||||
*this = CMeasurementUnit::unitFromSymbol<CPressureUnit>(unitName);
|
||||
}
|
||||
};
|
||||
|
||||
//! Specialized class for temperatur units (kelvin, centidegree).
|
||||
@@ -548,6 +593,7 @@ namespace BlackMisc
|
||||
public CMeasurementUnit,
|
||||
public Mixin::MetaType<CTemperatureUnit>,
|
||||
public Mixin::DBusOperators<CTemperatureUnit>,
|
||||
public Mixin::DataStreamOperators<CTemperatureUnit>,
|
||||
public Mixin::Index<CTemperatureUnit>
|
||||
{
|
||||
private:
|
||||
@@ -629,6 +675,14 @@ namespace BlackMisc
|
||||
argument >> unitName;
|
||||
(*this) = CMeasurementUnit::unitFromSymbol<CTemperatureUnit>(unitName);
|
||||
}
|
||||
|
||||
//! \copydoc BlackMisc::Mixin::DataStreamByMetaClass::unmarshalFromDataStream
|
||||
void unmarshalFromDataStream(QDataStream &stream)
|
||||
{
|
||||
QString unitName;
|
||||
stream >> unitName;
|
||||
*this = CMeasurementUnit::unitFromSymbol<CTemperatureUnit>(unitName);
|
||||
}
|
||||
};
|
||||
|
||||
//! Specialized class for speed units (m/s, ft/s, NM/h).
|
||||
@@ -636,6 +690,7 @@ namespace BlackMisc
|
||||
public CMeasurementUnit,
|
||||
public Mixin::MetaType<CSpeedUnit>,
|
||||
public Mixin::DBusOperators<CSpeedUnit>,
|
||||
public Mixin::DataStreamOperators<CSpeedUnit>,
|
||||
public Mixin::Index<CSpeedUnit>
|
||||
{
|
||||
private:
|
||||
@@ -735,6 +790,14 @@ namespace BlackMisc
|
||||
argument >> unitName;
|
||||
(*this) = CMeasurementUnit::unitFromSymbol<CSpeedUnit>(unitName);
|
||||
}
|
||||
|
||||
//! \copydoc BlackMisc::Mixin::DataStreamByMetaClass::unmarshalFromDataStream
|
||||
void unmarshalFromDataStream(QDataStream &stream)
|
||||
{
|
||||
QString unitName;
|
||||
stream >> unitName;
|
||||
*this = CMeasurementUnit::unitFromSymbol<CSpeedUnit>(unitName);
|
||||
}
|
||||
};
|
||||
|
||||
//! Specialized class for time units (ms, hour, min).
|
||||
@@ -742,6 +805,7 @@ namespace BlackMisc
|
||||
public CMeasurementUnit,
|
||||
public Mixin::MetaType<CTimeUnit>,
|
||||
public Mixin::DBusOperators<CTimeUnit>,
|
||||
public Mixin::DataStreamOperators<CTimeUnit>,
|
||||
public Mixin::Index<CTimeUnit>
|
||||
{
|
||||
private:
|
||||
@@ -863,6 +927,14 @@ namespace BlackMisc
|
||||
argument >> unitName;
|
||||
(*this) = CMeasurementUnit::unitFromSymbol<CTimeUnit>(unitName);
|
||||
}
|
||||
|
||||
//! \copydoc BlackMisc::Mixin::DataStreamByMetaClass::unmarshalFromDataStream
|
||||
void unmarshalFromDataStream(QDataStream &stream)
|
||||
{
|
||||
QString unitName;
|
||||
stream >> unitName;
|
||||
*this = CMeasurementUnit::unitFromSymbol<CTimeUnit>(unitName);
|
||||
}
|
||||
};
|
||||
|
||||
//! Specialized class for acceleration units (m/s2, ft/s2).
|
||||
@@ -870,6 +942,7 @@ namespace BlackMisc
|
||||
public CMeasurementUnit,
|
||||
public Mixin::MetaType<CAccelerationUnit>,
|
||||
public Mixin::DBusOperators<CAccelerationUnit>,
|
||||
public Mixin::DataStreamOperators<CAccelerationUnit>,
|
||||
public Mixin::Index<CAccelerationUnit>
|
||||
{
|
||||
private:
|
||||
@@ -934,6 +1007,14 @@ namespace BlackMisc
|
||||
argument >> unitName;
|
||||
(*this) = CMeasurementUnit::unitFromSymbol<CAccelerationUnit>(unitName);
|
||||
}
|
||||
|
||||
//! \copydoc BlackMisc::Mixin::DataStreamByMetaClass::unmarshalFromDataStream
|
||||
void unmarshalFromDataStream(QDataStream &stream)
|
||||
{
|
||||
QString unitName;
|
||||
stream >> unitName;
|
||||
*this = CMeasurementUnit::unitFromSymbol<CAccelerationUnit>(unitName);
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
#include "blackmisc/blackmiscexport.h"
|
||||
#include "blackmisc/compare.h"
|
||||
#include "blackmisc/dbus.h"
|
||||
#include "blackmisc/datastream.h"
|
||||
#include "blackmisc/dictionary.h"
|
||||
#include "blackmisc/json.h"
|
||||
#include "blackmisc/metaclass.h"
|
||||
@@ -62,6 +63,7 @@ namespace BlackMisc
|
||||
public Mixin::MetaType<CPropertyIndex>,
|
||||
public Mixin::HashByMetaClass<CPropertyIndex>,
|
||||
public Mixin::DBusByMetaClass<CPropertyIndex>,
|
||||
public Mixin::DataStreamByMetaClass<CPropertyIndex>,
|
||||
public Mixin::JsonOperators<CPropertyIndex>,
|
||||
public Mixin::EqualsByMetaClass<CPropertyIndex>,
|
||||
public Mixin::LessThanByMetaClass<CPropertyIndex>,
|
||||
|
||||
@@ -92,6 +92,28 @@ namespace BlackMisc
|
||||
m_values.swap(newMap);
|
||||
}
|
||||
|
||||
void CPropertyIndexVariantMap::marshalToDataStream(QDataStream &stream) const
|
||||
{
|
||||
stream << m_values.keys();
|
||||
stream << m_values.values();
|
||||
}
|
||||
|
||||
void CPropertyIndexVariantMap::unmarshalFromDataStream(QDataStream &stream)
|
||||
{
|
||||
QList<CPropertyIndex> indexes;
|
||||
QList<CVariant> values;
|
||||
stream >> indexes;
|
||||
stream >> values;
|
||||
Q_ASSERT(indexes.size() == values.size());
|
||||
QMap<CPropertyIndex, CVariant> newMap;
|
||||
for (int i = 0; i < indexes.size(); i++)
|
||||
{
|
||||
newMap.insert(indexes[i], values[i]);
|
||||
}
|
||||
// replace values in one step
|
||||
m_values.swap(newMap);
|
||||
}
|
||||
|
||||
void CPropertyIndexVariantMap::addValue(const CPropertyIndex &index, const CVariant &value)
|
||||
{
|
||||
m_values.insert(index, value);
|
||||
|
||||
@@ -127,6 +127,7 @@ namespace BlackMisc
|
||||
class BLACKMISC_EXPORT CPropertyIndexVariantMap :
|
||||
public Mixin::MetaType<CPropertyIndexVariantMap>,
|
||||
public Mixin::DBusOperators<CPropertyIndexVariantMap>,
|
||||
public Mixin::DataStreamOperators<CPropertyIndexVariantMap>,
|
||||
public Mixin::String<CPropertyIndexVariantMap>
|
||||
{
|
||||
public:
|
||||
@@ -216,6 +217,12 @@ namespace BlackMisc
|
||||
|
||||
//! \copydoc BlackMisc::Mixin::DBusByMetaClass::unmarshallFromDbus
|
||||
void unmarshallFromDbus(const QDBusArgument &argument);
|
||||
|
||||
//! \copydoc BlackMisc::Mixin::DataStreamByMetaClass::marshalToDataStream
|
||||
void marshalToDataStream(QDataStream &stream) const;
|
||||
|
||||
//! \copydoc BlackMisc::Mixin::DataStreamByMetaClass::unmarshalFromDataStream
|
||||
void unmarshalFromDataStream(QDataStream &stream);
|
||||
};
|
||||
|
||||
namespace Mixin
|
||||
|
||||
@@ -30,6 +30,7 @@ namespace BlackMisc
|
||||
template <class T>
|
||||
class CSequence :
|
||||
public CContainerBase<CSequence<T>>,
|
||||
public Mixin::DataStreamOperators<CSequence<T>>,
|
||||
public Mixin::Icon<CSequence<T>>
|
||||
{
|
||||
public:
|
||||
@@ -560,6 +561,12 @@ namespace BlackMisc
|
||||
//! Greater or equal operator.
|
||||
friend bool operator >=(const CSequence &a, const CSequence &b) { return a.m_impl >= b.m_impl; }
|
||||
|
||||
//! \copydoc BlackMisc::Mixin::DataStreamByMetaClass::marshalToDataStream
|
||||
void marshalToDataStream(QDataStream &stream) const { stream << m_impl; }
|
||||
|
||||
//! \copydoc BlackMisc::Mixin::DataStreamByMetaClass::unmarshalFromDataStream
|
||||
void unmarshalFromDataStream(QDataStream &stream) { stream >> m_impl; }
|
||||
|
||||
private:
|
||||
QVector<T> m_impl;
|
||||
};
|
||||
|
||||
@@ -53,6 +53,7 @@ namespace BlackMisc
|
||||
public Mixin::EqualsByCompare<CStrongStringView>,
|
||||
public Mixin::LessThanByCompare<CStrongStringView>,
|
||||
public Mixin::DBusOperators<CStrongStringView>,
|
||||
public Mixin::DataStreamOperators<CStrongStringView>,
|
||||
public Mixin::JsonOperators<CStrongStringView>,
|
||||
public Mixin::String<CStrongStringView>
|
||||
{
|
||||
@@ -110,6 +111,12 @@ namespace BlackMisc
|
||||
void unmarshallFromDbus(const QDBusArgument &arg) { arg >> m_string; m_view = m_string; }
|
||||
//! @}
|
||||
|
||||
//! QDataStream marshalling.
|
||||
//! @{
|
||||
void marshalToDataStream(QDataStream &stream) const { stream << toQString(); }
|
||||
void unmarshalFromDataStream(QDataStream &stream) { stream >> m_string; m_view = m_string; }
|
||||
//! @}
|
||||
|
||||
//! JSON conversion.
|
||||
//! @{
|
||||
QJsonObject toJson() const { QJsonObject json; json.insert(QStringLiteral("value"), toQString()); return json; }
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
#include "blackmisc/blackmiscexport.h"
|
||||
#include "blackmisc/compare.h"
|
||||
#include "blackmisc/dbus.h"
|
||||
#include "blackmisc/datastream.h"
|
||||
#include "blackmisc/dictionary.h"
|
||||
#include "blackmisc/identifier.h"
|
||||
#include "blackmisc/metaclass.h"
|
||||
@@ -65,10 +66,12 @@ namespace BlackMisc
|
||||
public CDictionary<QString, std::pair<CVariant, qint64>, QMap>,
|
||||
public Mixin::MetaType<CValueCachePacket>,
|
||||
public Mixin::DBusByMetaClass<CValueCachePacket>,
|
||||
public Mixin::DataStreamByMetaClass<CValueCachePacket>,
|
||||
public Mixin::EqualsByMetaClass<CValueCachePacket>
|
||||
{
|
||||
public:
|
||||
BLACKMISC_DECLARE_USING_MIXIN_DBUS(CValueCachePacket)
|
||||
BLACKMISC_DECLARE_USING_MIXIN_DATASTREAM(CValueCachePacket)
|
||||
|
||||
//! \copydoc BlackMisc::CValueObject::base_type
|
||||
using base_type = CDictionary;
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
|
||||
#include "blackmiscexport.h"
|
||||
#include "dbus.h"
|
||||
#include "datastream.h"
|
||||
#include "metaclass.h"
|
||||
#include "json.h"
|
||||
#include "compare.h"
|
||||
@@ -71,6 +72,7 @@ namespace BlackMisc
|
||||
public Mixin::MetaType<Derived>,
|
||||
public Mixin::HashByMetaClass<Derived>,
|
||||
public Mixin::DBusByMetaClass<Derived>,
|
||||
public Mixin::DataStreamByMetaClass<Derived>,
|
||||
public Mixin::JsonByMetaClass<Derived>,
|
||||
public Mixin::EqualsByMetaClass<Derived>,
|
||||
public Mixin::LessThanByMetaClass<Derived>,
|
||||
@@ -160,6 +162,12 @@ namespace BlackMisc
|
||||
|
||||
//! \copydoc BlackMisc::Mixin::DBusByMetaClass::unmarshallFromDbus
|
||||
using Mixin::DBusByMetaClass<Derived>::unmarshallFromDbus;
|
||||
|
||||
//! \copydoc BlackMisc::Mixin::DataStreamByMetaClass::marshalToDataStream
|
||||
using Mixin::DataStreamByMetaClass<Derived>::marshalToDataStream;
|
||||
|
||||
//! \copydoc BlackMisc::Mixin::DataStreamByMetaClass::unmarshalFromDataStream
|
||||
using Mixin::DataStreamByMetaClass<Derived>::unmarshalFromDataStream;
|
||||
};
|
||||
|
||||
} // namespace
|
||||
|
||||
@@ -383,6 +383,16 @@ namespace BlackMisc
|
||||
}
|
||||
}
|
||||
|
||||
void CVariant::marshalToDataStream(QDataStream &stream) const
|
||||
{
|
||||
stream << m_v;
|
||||
}
|
||||
|
||||
void CVariant::unmarshalFromDataStream(QDataStream &stream)
|
||||
{
|
||||
stream >> m_v;
|
||||
}
|
||||
|
||||
void CVariant::setPropertyByIndex(const CPropertyIndex &index, const CVariant &variant)
|
||||
{
|
||||
auto *meta = getValueObjectMetaInfo();
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#include "blackmisc/blackmiscexport.h"
|
||||
#include "blackmisc/compare.h"
|
||||
#include "blackmisc/dbus.h"
|
||||
#include "blackmisc/datastream.h"
|
||||
#include "blackmisc/inheritancetraits.h"
|
||||
#include "blackmisc/json.h"
|
||||
#include "blackmisc/stringutils.h"
|
||||
@@ -122,6 +123,7 @@ namespace BlackMisc
|
||||
public Mixin::EqualsByCompare<CVariant>,
|
||||
public Mixin::LessThanByCompare<CVariant>,
|
||||
public Mixin::DBusOperators<CVariant>,
|
||||
public Mixin::DataStreamOperators<CVariant>,
|
||||
public Mixin::JsonOperators<CVariant>,
|
||||
public Mixin::String<CVariant>
|
||||
{
|
||||
@@ -310,6 +312,12 @@ namespace BlackMisc
|
||||
//! \copydoc BlackMisc::Mixin::DBusByMetaClass::unmarshallFromDbus
|
||||
void unmarshallFromDbus(const QDBusArgument &argument);
|
||||
|
||||
//! \copydoc BlackMisc::Mixin::DataStreamByMetaClass::marshalToDataStream
|
||||
void marshalToDataStream(QDataStream &stream) const;
|
||||
|
||||
//! \copydoc BlackMisc::Mixin::DataStreamByMetaClass::unmarshalFromDataStream
|
||||
void unmarshalFromDataStream(QDataStream &stream);
|
||||
|
||||
//! \copydoc CValueObject::compare
|
||||
friend int compare(const CVariant &a, const CVariant &b) { return compareImpl(a, b); }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user