Ref T552 Using QDataStream marshalling mixins in value classes.

This commit is contained in:
Mat Sutcliffe
2019-02-27 22:34:02 +00:00
parent fabf6e59ab
commit 6d9f9a286d
23 changed files with 252 additions and 0 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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:

View File

@@ -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:

View File

@@ -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>,

View File

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

View File

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

View File

@@ -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)
{

View File

@@ -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)
{

View File

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

View File

@@ -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

View File

@@ -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>,

View File

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

View File

@@ -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

View File

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

View File

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

View File

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

View File

@@ -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

View File

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

View File

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