summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKarsten Heimrich <karsten.heimrich@qt.io>2018-05-30 15:33:25 +0200
committerKarsten Heimrich <karsten.heimrich@qt.io>2018-05-30 15:35:24 +0000
commitc2a6cf5b464291fbecf89f851e7e6c365dc5a62d (patch)
treee513c175e28a6310dd007d4920b4bbdb338f644e
parentb13bce39711610dbf1066697615637df402d51a8 (diff)
Fix compile issue on Windows x64
Change-Id: I929dd26f5f2cabb4bb6bc0ccecabe17041b7f755 Reviewed-by: Karsten Heimrich <karsten.heimrich@qt.io>
-rw-r--r--src/knx/qknxcontrolfield.h43
-rw-r--r--src/knx/qknxextendedcontrolfield.cpp23
-rw-r--r--src/knx/qknxextendedcontrolfield.h2
-rw-r--r--src/knx/qknxtpdu.cpp26
4 files changed, 64 insertions, 30 deletions
diff --git a/src/knx/qknxcontrolfield.h b/src/knx/qknxcontrolfield.h
index 90281c2..4904d7e 100644
--- a/src/knx/qknxcontrolfield.h
+++ b/src/knx/qknxcontrolfield.h
@@ -42,6 +42,17 @@ class Q_KNX_EXPORT QKnxControlField final
{
Q_GADGET
+ static constexpr bool testBit(quint8 byteToTest, quint8 bit) noexcept
+ {
+ return (byteToTest & (quint8(1) << bit)) != 0;
+ }
+
+ // ### Qt6: pass byteToSet as reference
+ static constexpr quint8 setBit(quint8 byteToSet, bool value, quint8 bit) noexcept
+ {
+ return (value ? byteToSet | (quint8(1) << bit) : byteToSet & ~(quint8(1) << bit));
+ }
+
public:
QKnxControlField() = default;
explicit QKnxControlField(quint8 data);
@@ -53,8 +64,10 @@ public:
Standard = 0x01
};
Q_ENUM(FrameFormat)
- QKnxControlField::FrameFormat frameFormat() const { return static_cast<FrameFormat> (quint8(m_ctrl1[7])); }
- void setFrameFormat(QKnxControlField::FrameFormat type) { m_ctrl1[7] = static_cast<int> (type); }
+ QKnxControlField::FrameFormat frameFormat() const // ### Qt6: Replace byte() with m_ctrl1
+ { return static_cast<FrameFormat> (quint8(testBit(byte(), 7))); }
+ void setFrameFormat(QKnxControlField::FrameFormat type) // ### Qt6: Replace byte() with m_ctrl1
+ { m_ctrl1 = setBit(byte(), bool(static_cast<int> (type)), 7); }
enum class Repeat : quint8
{
@@ -62,8 +75,10 @@ public:
DoNotRepeat = 0x01
};
Q_ENUM(Repeat)
- QKnxControlField::Repeat repeat() const { return static_cast<Repeat> (quint8(m_ctrl1[5])); }
- void setRepeat(QKnxControlField::Repeat repeat) { m_ctrl1[5] = static_cast<int> (repeat); }
+ QKnxControlField::Repeat repeat() const // ### Qt6: Replace byte() with m_ctrl1
+ { return static_cast<Repeat> (quint8(testBit(byte(), 5))); }
+ void setRepeat(QKnxControlField::Repeat repeat) // ### Qt6: Replace byte() with m_ctrl1
+ { m_ctrl1 = setBit(byte(), bool(static_cast<int> (repeat)), 5); }
enum class Broadcast : quint8
{
@@ -71,8 +86,10 @@ public:
Domain = 0x01
};
Q_ENUM(Broadcast)
- QKnxControlField::Broadcast broadcast() const { return static_cast<Broadcast> (quint8(m_ctrl1[4])); }
- void setBroadcast(QKnxControlField::Broadcast bcst) { m_ctrl1[4] = static_cast<int> (bcst); }
+ QKnxControlField::Broadcast broadcast() const // ### Qt6: Replace byte() with m_ctrl1
+ { return static_cast<Broadcast> (quint8(testBit(byte(), 4))); }
+ void setBroadcast(QKnxControlField::Broadcast bcst) // ### Qt6: Replace byte() with m_ctrl1
+ { m_ctrl1 = setBit(byte(), bool(static_cast<int> (bcst)), 4); }
enum class Priority : quint8
{
@@ -91,8 +108,10 @@ public:
Requested = 0x01
};
Q_ENUM(Acknowledge)
- QKnxControlField::Acknowledge acknowledge() const { return Acknowledge(quint8(m_ctrl1[1])); }
- void setAcknowledge(QKnxControlField::Acknowledge ack) { m_ctrl1[1] = static_cast<int> (ack); }
+ QKnxControlField::Acknowledge acknowledge() const // ### Qt6: Replace byte() with m_ctrl1
+ { return Acknowledge(quint8(testBit(byte(), 1))); }
+ void setAcknowledge(QKnxControlField::Acknowledge ack) // ### Qt6: Replace byte() with m_ctrl1
+ { m_ctrl1 = setBit(byte(), bool(static_cast<int> (ack)), 1); }
enum class Confirm : quint8
{
@@ -100,8 +119,10 @@ public:
Error = 0x01
};
Q_ENUM(Confirm)
- QKnxControlField::Confirm confirm() const { return static_cast<Confirm> (quint8(m_ctrl1[0])); }
- void setConfirm(QKnxControlField::Confirm confirm) { m_ctrl1[0] = static_cast<int> (confirm); }
+ QKnxControlField::Confirm confirm() const // ### Qt6: Replace byte() with m_ctrl1
+ { return static_cast<Confirm> (quint8(testBit(byte(), 0))); }
+ void setConfirm(QKnxControlField::Confirm confirm) // ### Qt6: Replace byte() with m_ctrl1
+ { m_ctrl1 = setBit(byte(), bool(static_cast<int> (confirm)), 0); }
quint8 byte() const { return quint8(m_ctrl1.to_ulong()); }
QKnxByteArray bytes() const { return { byte() }; }
@@ -134,7 +155,7 @@ public:
static QKnxControlField::Builder builder();
private:
- std::bitset<8> m_ctrl1 = 0;
+ std::bitset<8> m_ctrl1; // ### Qt6: Replace with quint8
};
Q_KNX_EXPORT QDebug operator<<(QDebug debug, const QKnxControlField &ctrl);
diff --git a/src/knx/qknxextendedcontrolfield.cpp b/src/knx/qknxextendedcontrolfield.cpp
index 95b9afe..849aa2f 100644
--- a/src/knx/qknxextendedcontrolfield.cpp
+++ b/src/knx/qknxextendedcontrolfield.cpp
@@ -33,6 +33,17 @@ QT_BEGIN_NAMESPACE
const std::bitset<8> gHopCountMask = 0x70;
+static constexpr bool testBit(quint8 byteToTest, quint8 bit) noexcept
+{
+ return (byteToTest & (quint8(1) << bit)) != 0;
+}
+
+// ### Qt6: pass byteToSet as reference
+static constexpr quint8 setBit(quint8 byteToSet, bool value, quint8 bit) noexcept
+{
+ return (value ? byteToSet | (quint8(1) << bit) : byteToSet & ~(quint8(1) << bit));
+}
+
/*!
\class QKnxExtendedControlField
@@ -150,7 +161,8 @@ bool QKnxExtendedControlField::operator!=(const QKnxExtendedControlField &other)
*/
QKnxAddress::Type QKnxExtendedControlField::destinationAddressType() const
{
- return static_cast<QKnxAddress::Type> (quint8(m_ctrl2[7]));
+ // ### Qt6: Replace byte() with m_ctrl2
+ return static_cast<QKnxAddress::Type> (quint8(testBit(byte(), 7)));
}
/*!
@@ -158,7 +170,8 @@ QKnxAddress::Type QKnxExtendedControlField::destinationAddressType() const
*/
void QKnxExtendedControlField::setDestinationAddressType(QKnxAddress::Type address)
{
- m_ctrl2[7] = static_cast<int> (address);
+ // ### Qt6: Replace byte() with m_ctrl2
+ m_ctrl2 = setBit(byte(), bool(static_cast<int> (address)), 7);
}
/*!
@@ -186,7 +199,8 @@ void QKnxExtendedControlField::setHopCount(quint8 hopCount)
*/
QKnxExtendedControlField::ExtendedFrameFormat QKnxExtendedControlField::format() const
{
- return static_cast<ExtendedFrameFormat> (m_ctrl2.test(3));
+ // ### Qt6: Replace byte() with m_ctrl2
+ return static_cast<ExtendedFrameFormat> (quint8(testBit(byte(), 3)));
}
/*!
@@ -194,7 +208,8 @@ QKnxExtendedControlField::ExtendedFrameFormat QKnxExtendedControlField::format()
*/
void QKnxExtendedControlField::setFormat(QKnxExtendedControlField::ExtendedFrameFormat format)
{
- m_ctrl2.set(3, format == QKnxExtendedControlField::ExtendedFrameFormat::Lte);
+ // ### Qt6: Replace byte() with m_ctrl2
+ m_ctrl2 = setBit(byte(), format == QKnxExtendedControlField::ExtendedFrameFormat::Lte, 3);
}
/*!
diff --git a/src/knx/qknxextendedcontrolfield.h b/src/knx/qknxextendedcontrolfield.h
index 7e3a10b..59d4271 100644
--- a/src/knx/qknxextendedcontrolfield.h
+++ b/src/knx/qknxextendedcontrolfield.h
@@ -90,7 +90,7 @@ public:
static QKnxExtendedControlField::Builder builder();
private:
- std::bitset<8> m_ctrl2 = 0;
+ std::bitset<8> m_ctrl2; // ### Qt6: Replace with quint8
};
Q_KNX_EXPORT QDebug operator<<(QDebug debug, const QKnxExtendedControlField &ctrl);
diff --git a/src/knx/qknxtpdu.cpp b/src/knx/qknxtpdu.cpp
index 69edb5c..d85c707 100644
--- a/src/knx/qknxtpdu.cpp
+++ b/src/knx/qknxtpdu.cpp
@@ -30,8 +30,6 @@
#include "qknxtpdu.h"
#include "qknxutils.h"
-#include <bitset>
-
QT_BEGIN_NAMESPACE
/*!
@@ -727,31 +725,31 @@ QKnxTpdu::ApplicationControlField QKnxTpdu::apci(const QKnxByteArray &data, quin
if (data.size() - index < 2)
return QKnxTpdu::ApplicationControlField::Invalid;
- std::bitset<8> apciHigh = data.at(index) & 0x03; // mask out all bits except the first two
- std::bitset<8> apciLow = data.at(index + 1) & 0xc0; // mask out all bits except the last two
+ quint8 apciHigh = data.at(index) & 0x03; // mask out all bits except the first two
+ quint8 apciLow = data.at(index + 1) & 0xc0; // mask out all bits except the last two
- const auto fourBitsApci = [&apciHigh, &apciLow]() {
- return (QKnxUtils::QUint16::fromBytes({ quint8(apciHigh.to_ulong()),
- quint8(apciLow.to_ulong()) }));
+ const auto fourBitsApci = [apciHigh, apciLow]() {
+ return QKnxUtils::QUint16::fromBytes({ apciHigh, apciLow });
};
const auto tenBitsApci = [apciHigh](quint8 octet7) {
- return (QKnxUtils::QUint16::fromBytes({ quint8(apciHigh.to_ulong()), octet7 }));
+ return QKnxUtils::QUint16::fromBytes({ apciHigh, octet7 });
};
- if ((apciHigh[0] == 0 && apciHigh[1] == 0) || (apciHigh[0] == 1 && apciHigh[1] == 1)) {
- std::bitset<8> octet7 = data.at(index + 1);
- if (octet7[7] == 1 && octet7[6] == 1)
- return QKnxTpdu::ApplicationControlField(tenBitsApci(data.at(index + 1)));
+ if ((!QKnxTpduPrivate::isBitSet(apciHigh, 0) && !QKnxTpduPrivate::isBitSet(apciHigh, 1))
+ || (QKnxTpduPrivate::isBitSet(apciHigh, 0) && QKnxTpduPrivate::isBitSet(apciHigh,1))) {
+ quint8 octet7 = data.at(index + 1);
+ if (QKnxTpduPrivate::isBitSet(octet7, 7) && QKnxTpduPrivate::isBitSet(octet7, 6))
+ return QKnxTpdu::ApplicationControlField(tenBitsApci(octet7));
return QKnxTpdu::ApplicationControlField(fourBitsApci());
}
- if (apciHigh[1] == 0 && apciHigh[0] == 1) {
+ if (!QKnxTpduPrivate::isBitSet(apciHigh,1) && QKnxTpduPrivate::isBitSet(apciHigh, 0)) {
// connection oriented, it's one of the A_ADC service
if (QKnxTpdu::tpci(data, index) >= QKnxTpdu::TransportControlField::DataTagGroup)
return QKnxTpdu::ApplicationControlField(fourBitsApci());
return QKnxTpdu::ApplicationControlField(tenBitsApci(data.at(index + 1)));
}
// it's one of the A_Memory Service (only the 2 last bits of octet 6 are needed for the APCI)
- if (apciLow[7] == 0 || apciLow[6] == 0)
+ if (!QKnxTpduPrivate::isBitSet(apciLow,7) || !QKnxTpduPrivate::isBitSet(apciLow, 6))
return QKnxTpdu::ApplicationControlField(fourBitsApci());
return QKnxTpdu::ApplicationControlField(data.at(index + 1));
}