diff options
author | Karsten Heimrich <karsten.heimrich@qt.io> | 2018-05-30 15:33:25 +0200 |
---|---|---|
committer | Karsten Heimrich <karsten.heimrich@qt.io> | 2018-05-30 15:35:24 +0000 |
commit | c2a6cf5b464291fbecf89f851e7e6c365dc5a62d (patch) | |
tree | e513c175e28a6310dd007d4920b4bbdb338f644e | |
parent | b13bce39711610dbf1066697615637df402d51a8 (diff) |
Fix compile issue on Windows x64
Change-Id: I929dd26f5f2cabb4bb6bc0ccecabe17041b7f755
Reviewed-by: Karsten Heimrich <karsten.heimrich@qt.io>
-rw-r--r-- | src/knx/qknxcontrolfield.h | 43 | ||||
-rw-r--r-- | src/knx/qknxextendedcontrolfield.cpp | 23 | ||||
-rw-r--r-- | src/knx/qknxextendedcontrolfield.h | 2 | ||||
-rw-r--r-- | src/knx/qknxtpdu.cpp | 26 |
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)); } |