mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-01 05:26:45 +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(","); \
|
||||
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(","); \
|
||||
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);
|
||||
return std::tuple<>();
|
||||
}
|
||||
static std::tuple<> constToTuple(const T &object)
|
||||
{
|
||||
return toTuple(object);
|
||||
}
|
||||
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
|
||||
@@ -197,6 +211,27 @@ namespace BlackMisc
|
||||
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.
|
||||
* \ingroup Tuples
|
||||
@@ -507,6 +542,136 @@ namespace BlackMisc
|
||||
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)
|
||||
{
|
||||
Private::TupleHelper<0>::deserializeJson(json, members, tu);
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
#include <QJsonObject>
|
||||
#include <QDateTime>
|
||||
#include <QString>
|
||||
#include <QDebug>
|
||||
#include <tuple>
|
||||
#include <type_traits>
|
||||
#include <functional>
|
||||
@@ -182,6 +183,12 @@ namespace BlackMisc
|
||||
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>
|
||||
static uint hash(const Tu &tu)
|
||||
{
|
||||
@@ -214,6 +221,8 @@ namespace BlackMisc
|
||||
template <class Tu>
|
||||
static const QDBusArgument &unmarshall(const QDBusArgument &arg, Tu &) { return arg; }
|
||||
template <class Tu>
|
||||
static QDebug debug(QDebug dbg, Tu &) { return dbg; }
|
||||
template <class Tu>
|
||||
static uint hash(const Tu &) { return 0; }
|
||||
template <class Tu>
|
||||
static void serializeJson(QJsonObject &, const QStringList &, const Tu &) {}
|
||||
|
||||
Reference in New Issue
Block a user