mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-05-04 17:10:11 +08:00
refs #140 added streaming for tuples to QDebug
This commit is contained in:
@@ -64,6 +64,11 @@
|
|||||||
static QStringList members = QString(#MEMBERS).replace("tie(","").replace("(","").replace(")","").replace(" ","").replace("o.","").split(","); \
|
static QStringList members = QString(#MEMBERS).replace("tie(","").replace("(","").replace(")","").replace(" ","").replace("o.","").split(","); \
|
||||||
return members; \
|
return members; \
|
||||||
} \
|
} \
|
||||||
|
public: \
|
||||||
|
static auto constToTuple(const T &o) -> decltype(BlackMisc::tie MEMBERS) \
|
||||||
|
{ \
|
||||||
|
return BlackMisc::tie MEMBERS; \
|
||||||
|
} \
|
||||||
}; \
|
}; \
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -93,6 +98,11 @@
|
|||||||
static QStringList members = QString(#MEMBERS).replace("tie(","").replace("(","").replace(")","").replace(" ","").replace("o.","").split(","); \
|
static QStringList members = QString(#MEMBERS).replace("tie(","").replace("(","").replace(")","").replace(" ","").replace("o.","").split(","); \
|
||||||
return members; \
|
return members; \
|
||||||
} \
|
} \
|
||||||
|
public: \
|
||||||
|
static auto constToTuple(const T<U> &o) -> decltype(BlackMisc::tie MEMBERS) \
|
||||||
|
{ \
|
||||||
|
return BlackMisc::tie MEMBERS; \
|
||||||
|
} \
|
||||||
}; \
|
}; \
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -135,6 +145,10 @@ namespace BlackMisc
|
|||||||
Q_UNUSED(object);
|
Q_UNUSED(object);
|
||||||
return std::tuple<>();
|
return std::tuple<>();
|
||||||
}
|
}
|
||||||
|
static std::tuple<> constToTuple(const T &object)
|
||||||
|
{
|
||||||
|
return toTuple(object);
|
||||||
|
}
|
||||||
static const QStringList jsonMembers()
|
static const QStringList jsonMembers()
|
||||||
{
|
{
|
||||||
static_assert(std::is_void<T>::value, // always false; is_void<> trick is just to make the condition dependent on the template parameter T
|
static_assert(std::is_void<T>::value, // always false; is_void<> trick is just to make the condition dependent on the template parameter T
|
||||||
@@ -197,6 +211,27 @@ namespace BlackMisc
|
|||||||
return Private::TupleHelper<sizeof...(Ts)>::unmarshall(arg, tu);
|
return Private::TupleHelper<sizeof...(Ts)>::unmarshall(arg, tu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Stream a tuple to qDebug.
|
||||||
|
* \ingroup Tuples
|
||||||
|
*/
|
||||||
|
template <class... Ts>
|
||||||
|
QDebug operator <<(QDebug debug, std::tuple<Ts &...> tu)
|
||||||
|
{
|
||||||
|
return Private::TupleHelper<sizeof...(Ts)>::debug(debug, tu);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Stream a tuple to qDebug.
|
||||||
|
* \ingroup Tuples
|
||||||
|
*/
|
||||||
|
template <class... Ts>
|
||||||
|
QNoDebug operator <<(QNoDebug noDebug, std::tuple<Ts &...> tu)
|
||||||
|
{
|
||||||
|
Q_UNUSED(tu);
|
||||||
|
return noDebug;
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Generate a hash value from the elements of a tuple.
|
* \brief Generate a hash value from the elements of a tuple.
|
||||||
* \ingroup Tuples
|
* \ingroup Tuples
|
||||||
@@ -507,6 +542,136 @@ namespace BlackMisc
|
|||||||
return Private::TupleHelper<10>::unmarshall(arg, tu);
|
return Private::TupleHelper<10>::unmarshall(arg, tu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline QDebug operator <<(QDebug debug, std::tuple<> tu)
|
||||||
|
{
|
||||||
|
return Private::TupleHelper<0>::debug(debug, tu);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class T0>
|
||||||
|
QDebug operator <<(QDebug debug, std::tuple<T0> tu)
|
||||||
|
{
|
||||||
|
return Private::TupleHelper<1>::debug(debug, tu);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class T0, class T1>
|
||||||
|
QDebug operator <<(QDebug debug, std::tuple<T0, T1> tu)
|
||||||
|
{
|
||||||
|
return Private::TupleHelper<2>::debug(debug, tu);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class T0, class T1, class T2>
|
||||||
|
QDebug operator <<(QDebug debug, std::tuple<T0, T1, T2> tu)
|
||||||
|
{
|
||||||
|
return Private::TupleHelper<3>::debug(debug, tu);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class T0, class T1, class T2, class T3>
|
||||||
|
QDebug operator <<(QDebug debug, std::tuple<T0, T1, T2, T3> tu)
|
||||||
|
{
|
||||||
|
return Private::TupleHelper<4>::debug(debug, tu);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class T0, class T1, class T2, class T3, class T4>
|
||||||
|
QDebug operator <<(QDebug debug, std::tuple<T0, T1, T2, T3, T4> tu)
|
||||||
|
{
|
||||||
|
return Private::TupleHelper<5>::debug(debug, tu);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class T0, class T1, class T2, class T3, class T4, class T5>
|
||||||
|
QDebug operator <<(QDebug debug, std::tuple<T0, T1, T2, T3, T4, T5> tu)
|
||||||
|
{
|
||||||
|
return Private::TupleHelper<6>::debug(debug, tu);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class T0, class T1, class T2, class T3, class T4, class T5, class T6>
|
||||||
|
QDebug operator <<(QDebug debug, std::tuple<T0, T1, T2, T3, T4, T5, T6> tu)
|
||||||
|
{
|
||||||
|
return Private::TupleHelper<7>::debug(debug, tu);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class T0, class T1, class T2, class T3, class T4, class T5, class T6, class T7>
|
||||||
|
QDebug operator <<(QDebug debug, std::tuple<T0, T1, T2, T3, T4, T5, T6, T7> tu)
|
||||||
|
{
|
||||||
|
return Private::TupleHelper<8>::debug(debug, tu);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class T0, class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8>
|
||||||
|
QDebug operator <<(QDebug debug, std::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8> tu)
|
||||||
|
{
|
||||||
|
return Private::TupleHelper<9>::debug(debug, tu);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class T0, class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9>
|
||||||
|
QDebug operator <<(QDebug debug, std::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> tu)
|
||||||
|
{
|
||||||
|
return Private::TupleHelper<10>::debug(debug, tu);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline QNoDebug operator <<(QNoDebug noDebug, std::tuple<>)
|
||||||
|
{
|
||||||
|
return noDebug;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class T0>
|
||||||
|
QNoDebug operator <<(QNoDebug noDebug, std::tuple<T0>)
|
||||||
|
{
|
||||||
|
return noDebug;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class T0, class T1>
|
||||||
|
QNoDebug operator <<(QNoDebug noDebug, std::tuple<T0, T1>)
|
||||||
|
{
|
||||||
|
return noDebug;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class T0, class T1, class T2>
|
||||||
|
QNoDebug operator <<(QNoDebug noDebug, std::tuple<T0, T1, T2>)
|
||||||
|
{
|
||||||
|
return noDebug;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class T0, class T1, class T2, class T3>
|
||||||
|
QNoDebug operator <<(QNoDebug noDebug, std::tuple<T0, T1, T2, T3>)
|
||||||
|
{
|
||||||
|
return noDebug;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class T0, class T1, class T2, class T3, class T4>
|
||||||
|
QNoDebug operator <<(QNoDebug noDebug, std::tuple<T0, T1, T2, T3, T4>)
|
||||||
|
{
|
||||||
|
return noDebug;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class T0, class T1, class T2, class T3, class T4, class T5>
|
||||||
|
QNoDebug operator <<(QNoDebug noDebug, std::tuple<T0, T1, T2, T3, T4, T5>)
|
||||||
|
{
|
||||||
|
return noDebug;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class T0, class T1, class T2, class T3, class T4, class T5, class T6>
|
||||||
|
QNoDebug operator <<(QNoDebug noDebug, std::tuple<T0, T1, T2, T3, T4, T5, T6>)
|
||||||
|
{
|
||||||
|
return noDebug;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class T0, class T1, class T2, class T3, class T4, class T5, class T6, class T7>
|
||||||
|
QNoDebug operator <<(QNoDebug noDebug, std::tuple<T0, T1, T2, T3, T4, T5, T6, T7>)
|
||||||
|
{
|
||||||
|
return noDebug;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class T0, class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8>
|
||||||
|
QNoDebug operator <<(QNoDebug noDebug, std::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8>)
|
||||||
|
{
|
||||||
|
return noDebug;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class T0, class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9>
|
||||||
|
QNoDebug operator <<(QNoDebug noDebug, std::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>)
|
||||||
|
{
|
||||||
|
return noDebug;
|
||||||
|
}
|
||||||
|
|
||||||
inline void deserializeJson(const QJsonObject &json, const QStringList &members, std::tuple<> tu)
|
inline void deserializeJson(const QJsonObject &json, const QStringList &members, std::tuple<> tu)
|
||||||
{
|
{
|
||||||
Private::TupleHelper<0>::deserializeJson(json, members, tu);
|
Private::TupleHelper<0>::deserializeJson(json, members, tu);
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
#include <QJsonObject>
|
#include <QJsonObject>
|
||||||
#include <QDateTime>
|
#include <QDateTime>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
#include <QDebug>
|
||||||
#include <tuple>
|
#include <tuple>
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
@@ -182,6 +183,12 @@ namespace BlackMisc
|
|||||||
return TupleHelper < N - 1 >::unmarshall(arg, tu) >> std::get < N - 1 > (tu);
|
return TupleHelper < N - 1 >::unmarshall(arg, tu) >> std::get < N - 1 > (tu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <class Tu>
|
||||||
|
static QDebug debug(QDebug dbg, Tu &tu)
|
||||||
|
{
|
||||||
|
return TupleHelper < N - 1 >::debug(dbg, tu) << std::get < N - 1 > (tu);
|
||||||
|
}
|
||||||
|
|
||||||
template <class Tu>
|
template <class Tu>
|
||||||
static uint hash(const Tu &tu)
|
static uint hash(const Tu &tu)
|
||||||
{
|
{
|
||||||
@@ -214,6 +221,8 @@ namespace BlackMisc
|
|||||||
template <class Tu>
|
template <class Tu>
|
||||||
static const QDBusArgument &unmarshall(const QDBusArgument &arg, Tu &) { return arg; }
|
static const QDBusArgument &unmarshall(const QDBusArgument &arg, Tu &) { return arg; }
|
||||||
template <class Tu>
|
template <class Tu>
|
||||||
|
static QDebug debug(QDebug dbg, Tu &) { return dbg; }
|
||||||
|
template <class Tu>
|
||||||
static uint hash(const Tu &) { return 0; }
|
static uint hash(const Tu &) { return 0; }
|
||||||
template <class Tu>
|
template <class Tu>
|
||||||
static void serializeJson(QJsonObject &, const QStringList &, const Tu &) {}
|
static void serializeJson(QJsonObject &, const QStringList &, const Tu &) {}
|
||||||
|
|||||||
Reference in New Issue
Block a user