From 7e151dfc7b483e03ed31e4987196c8a9c7f69573 Mon Sep 17 00:00:00 2001 From: Matt Broadstone Date: Thu, 11 Sep 2014 11:46:40 -0400 Subject: [PATCH] fix windows build - add equality operator to QAMQP::Message - add qHash for QAMQP::Message... because MSVC --- qamqp.pri | 2 +- src/qamqpclient_p.h | 4 +++- src/qamqpmessage.cpp | 27 +++++++++++++++++++++++++++ src/qamqpmessage.h | 6 ++++++ src/qamqpqueue.cpp | 2 ++ 5 files changed, 39 insertions(+), 2 deletions(-) diff --git a/qamqp.pri b/qamqp.pri index a9a6f17..7b4a8da 100644 --- a/qamqp.pri +++ b/qamqp.pri @@ -11,7 +11,7 @@ contains(QAMQP_LIBRARY_TYPE, staticlib) { DEFINES += QAMQP_STATIC } else { DEFINES += QAMQP_SHARED - win32:QAMQP_LIBS = -lqamqp1 + win32:QAMQP_LIBS = -lqamqp0 } isEmpty(PREFIX) { diff --git a/src/qamqpclient_p.h b/src/qamqpclient_p.h index 41ba141..f4600ae 100644 --- a/src/qamqpclient_p.h +++ b/src/qamqpclient_p.h @@ -11,6 +11,8 @@ # include #endif +#include "qamqpglobal.h" +#include "qamqpauthenticator.h" #include "qamqptable.h" #include "qamqpframe_p.h" @@ -27,7 +29,7 @@ class Exchange; class Network; class Connection; class Authenticator; -class ClientPrivate : public Frame::MethodHandler +class QAMQP_EXPORT ClientPrivate : public Frame::MethodHandler { public: enum MethodId { diff --git a/src/qamqpmessage.cpp b/src/qamqpmessage.cpp index 3ef42eb..34d6a24 100644 --- a/src/qamqpmessage.cpp +++ b/src/qamqpmessage.cpp @@ -1,3 +1,5 @@ +#include + #include "qamqpmessage.h" #include "qamqpmessage_p.h" using namespace QAMQP; @@ -30,6 +32,21 @@ Message &Message::operator=(const Message &other) return *this; } +bool Message::operator==(const Message &message) const +{ + if (message.d == d) + return true; + + return (message.d->deliveryTag == d->deliveryTag && + message.d->redelivered == d->redelivered && + message.d->exchangeName == d->exchangeName && + message.d->routingKey == d->routingKey && + message.d->payload == d->payload && + message.d->properties == d->properties && + message.d->headers == d->headers && + message.d->leftSize == d->leftSize); +} + bool Message::isValid() const { return d->deliveryTag != 0 && @@ -91,3 +108,13 @@ QVariant Message::header(const QString &header, const QVariant &defaultValue) co { return d->headers.value(header, defaultValue); } + +uint qHash(const QAMQP::Message &message, uint seed) +{ + Q_UNUSED(seed); + return qHash(message.deliveryTag()) ^ + qHash(message.isRedelivered()) ^ + qHash(message.exchangeName()) ^ + qHash(message.routingKey()) ^ + qHash(message.payload()); +} diff --git a/src/qamqpmessage.h b/src/qamqpmessage.h index a0bf031..e263e40 100644 --- a/src/qamqpmessage.h +++ b/src/qamqpmessage.h @@ -20,6 +20,9 @@ public: Message &operator=(const Message &other); ~Message(); + bool operator==(const Message &message) const; + inline bool operator!=(const Message &message) const { return !(operator==(message)); } + enum Property { ContentType = AMQP_BASIC_CONTENT_TYPE_FLAG, ContentEncoding = AMQP_BASIC_CONTENT_ENCODING_FLAG, @@ -65,4 +68,7 @@ private: Q_DECLARE_METATYPE(QAMQP::Message::PropertyHash) +// NOTE: needed only for MSVC support, don't depend on this hash +QAMQP_EXPORT uint qHash(const QAMQP::Message &key, uint seed = 0); + #endif // QAMQPMESSAGE_H diff --git a/src/qamqpqueue.cpp b/src/qamqpqueue.cpp index 822ba5e..fb1be32 100644 --- a/src/qamqpqueue.cpp +++ b/src/qamqpqueue.cpp @@ -548,3 +548,5 @@ bool Queue::cancel(bool noWait) d->sendFrame(frame); return true; } + +#include "moc_qamqpqueue.cpp"