diff options
Diffstat (limited to 'src/corelib/tools/qbitarray.h')
-rw-r--r-- | src/corelib/tools/qbitarray.h | 70 |
1 files changed, 32 insertions, 38 deletions
diff --git a/src/corelib/tools/qbitarray.h b/src/corelib/tools/qbitarray.h index 25c95bc2a5..8abb69c0e6 100644 --- a/src/corelib/tools/qbitarray.h +++ b/src/corelib/tools/qbitarray.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2020 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtCore module of the Qt Toolkit. @@ -57,7 +57,7 @@ class Q_CORE_EXPORT QBitArray public: inline QBitArray() noexcept {} - explicit QBitArray(int size, bool val = false); + explicit QBitArray(qsizetype size, bool val = false); QBitArray(const QBitArray &other) : d(other.d) {} inline QBitArray &operator=(const QBitArray &other) { d = other.d; return *this; } inline QBitArray(QBitArray &&other) noexcept : d(std::move(other.d)) {} @@ -66,30 +66,28 @@ public: inline void swap(QBitArray &other) noexcept { qSwap(d, other.d); } - inline int size() const { return (d.size() << 3) - *d.constData(); } - inline int count() const { return (d.size() << 3) - *d.constData(); } - int count(bool on) const; + inline qsizetype size() const { return (d.size() << 3) - *d.constData(); } + inline qsizetype count() const { return (d.size() << 3) - *d.constData(); } + qsizetype count(bool on) const; inline bool isEmpty() const { return d.isEmpty(); } inline bool isNull() const { return d.isNull(); } - void resize(int size); + void resize(qsizetype size); inline void detach() { d.detach(); } inline bool isDetached() const { return d.isDetached(); } inline void clear() { d.clear(); } - bool testBit(int i) const; - void setBit(int i); - void setBit(int i, bool val); - void clearBit(int i); - bool toggleBit(int i); + bool testBit(qsizetype i) const; + void setBit(qsizetype i); + void setBit(qsizetype i, bool val); + void clearBit(qsizetype i); + bool toggleBit(qsizetype i); - bool at(int i) const; - QBitRef operator[](int i); - bool operator[](int i) const; - QBitRef operator[](uint i); - bool operator[](uint i) const; + bool at(qsizetype i) const; + QBitRef operator[](qsizetype i); + bool operator[](qsizetype i) const; QBitArray& operator&=(const QBitArray &); QBitArray& operator|=(const QBitArray &); @@ -99,10 +97,10 @@ public: inline bool operator==(const QBitArray& other) const { return d == other.d; } inline bool operator!=(const QBitArray& other) const { return d != other.d; } - inline bool fill(bool val, int size = -1); - void fill(bool val, int first, int last); + inline bool fill(bool val, qsizetype size = -1); + void fill(bool val, qsizetype first, qsizetype last); - inline void truncate(int pos) { if (pos < size()) resize(pos); } + inline void truncate(qsizetype pos) { if (pos < size()) resize(pos); } const char *bits() const { return isEmpty() ? nullptr : d.constData() + 1; } static QBitArray fromBits(const char *data, qsizetype len); @@ -114,43 +112,42 @@ public: inline DataPtr &data_ptr() { return d.data_ptr(); } }; -inline bool QBitArray::fill(bool aval, int asize) +inline bool QBitArray::fill(bool aval, qsizetype asize) { *this = QBitArray((asize < 0 ? this->size() : asize), aval); return true; } Q_CORE_EXPORT QBitArray operator&(const QBitArray &, const QBitArray &); Q_CORE_EXPORT QBitArray operator|(const QBitArray &, const QBitArray &); Q_CORE_EXPORT QBitArray operator^(const QBitArray &, const QBitArray &); -inline bool QBitArray::testBit(int i) const -{ Q_ASSERT(uint(i) < uint(size())); +inline bool QBitArray::testBit(qsizetype i) const +{ Q_ASSERT(size_t(i) < size_t(size())); return (*(reinterpret_cast<const uchar*>(d.constData())+1+(i>>3)) & (1 << (i & 7))) != 0; } -inline void QBitArray::setBit(int i) -{ Q_ASSERT(uint(i) < uint(size())); +inline void QBitArray::setBit(qsizetype i) +{ Q_ASSERT(size_t(i) < size_t(size())); *(reinterpret_cast<uchar*>(d.data())+1+(i>>3)) |= uchar(1 << (i & 7)); } -inline void QBitArray::clearBit(int i) -{ Q_ASSERT(uint(i) < uint(size())); +inline void QBitArray::clearBit(qsizetype i) +{ Q_ASSERT(size_t(i) < size_t(size())); *(reinterpret_cast<uchar*>(d.data())+1+(i>>3)) &= ~uchar(1 << (i & 7)); } -inline void QBitArray::setBit(int i, bool val) +inline void QBitArray::setBit(qsizetype i, bool val) { if (val) setBit(i); else clearBit(i); } -inline bool QBitArray::toggleBit(int i) -{ Q_ASSERT(uint(i) < uint(size())); +inline bool QBitArray::toggleBit(qsizetype i) +{ Q_ASSERT(size_t(i) < size_t(size())); uchar b = uchar(1<<(i&7)); uchar* p = reinterpret_cast<uchar*>(d.data())+1+(i>>3); uchar c = uchar(*p&b); *p^=b; return c!=0; } -inline bool QBitArray::operator[](int i) const { return testBit(i); } -inline bool QBitArray::operator[](uint i) const { return testBit(i); } -inline bool QBitArray::at(int i) const { return testBit(i); } +inline bool QBitArray::operator[](qsizetype i) const { return testBit(i); } +inline bool QBitArray::at(qsizetype i) const { return testBit(i); } class Q_CORE_EXPORT QBitRef { private: QBitArray& a; - int i; - inline QBitRef(QBitArray& array, int idx) : a(array), i(idx) {} + qsizetype i; + inline QBitRef(QBitArray& array, qsizetype idx) : a(array), i(idx) {} friend class QBitArray; public: inline operator bool() const { return a.testBit(i); } @@ -159,11 +156,8 @@ public: QBitRef& operator=(bool val) { a.setBit(i, val); return *this; } }; -inline QBitRef QBitArray::operator[](int i) +inline QBitRef QBitArray::operator[](qsizetype i) { Q_ASSERT(i >= 0); return QBitRef(*this, i); } -inline QBitRef QBitArray::operator[](uint i) -{ return QBitRef(*this, i); } - #ifndef QT_NO_DATASTREAM Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, const QBitArray &); |