Merge pull request #12691 from Chocobo1/iterator

Support range-based iteration in IndexRange class
This commit is contained in:
Mike Tzou 2020-04-30 13:10:13 +08:00 committed by GitHub
commit 4f820163ff
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 59 additions and 14 deletions

View File

@ -2133,9 +2133,9 @@ QVector<qreal> TorrentHandleImpl::availableFileFractions() const
const TorrentInfo::PieceRange filePieces = info.filePieces(i); const TorrentInfo::PieceRange filePieces = info.filePieces(i);
int availablePieces = 0; int availablePieces = 0;
for (int piece = filePieces.first(); piece <= filePieces.last(); ++piece) { for (const int piece : filePieces)
availablePieces += (piecesAvailability[piece] > 0) ? 1 : 0; availablePieces += (piecesAvailability[piece] > 0) ? 1 : 0;
}
res.push_back(static_cast<qreal>(availablePieces) / filePieces.size()); res.push_back(static_cast<qreal>(availablePieces) / filePieces.size());
} }
return res; return res;

View File

@ -39,8 +39,8 @@ public:
QString statusText() const; QString statusText() const;
private: private:
const int m_statusCode; int m_statusCode;
const QString m_statusText; QString m_statusText;
}; };
class BadRequestHTTPError : public HTTPError class BadRequestHTTPError : public HTTPError

View File

@ -38,7 +38,8 @@ class IndexInterval
public: public:
using IndexType = Index; using IndexType = Index;
IndexInterval(IndexType first, IndexType last) // add constexpr when using C++17 // TODO: add constexpr when using C++17
IndexInterval(const IndexType first, const IndexType last)
: m_first {first} : m_first {first}
, m_last {last} , m_last {last}
{ {
@ -56,12 +57,12 @@ public:
} }
private: private:
const IndexType m_first; IndexType m_first;
const IndexType m_last; IndexType m_last;
}; };
template <typename T> template <typename T>
constexpr IndexInterval<T> makeInterval(T first, T last) constexpr IndexInterval<T> makeInterval(const T first, const T last)
{ {
return {first, last}; return {first, last};
} }
@ -74,13 +75,55 @@ public:
using IndexType = Index; using IndexType = Index;
using IndexDiffType = IndexDiff; using IndexDiffType = IndexDiff;
class Iterator
{
public:
explicit constexpr Iterator(const IndexType index)
: m_index {index}
{
}
constexpr Iterator(const Iterator &) = default;
constexpr IndexType operator*() const
{
return m_index;
}
constexpr Iterator &operator++()
{
++m_index;
return *this;
}
constexpr Iterator operator++(int)
{
const Iterator iter {*this};
++(*this);
return iter;
}
constexpr bool operator==(const Iterator &other) const
{
return (*(*this) == *other);
}
constexpr bool operator!=(const Iterator &other) const
{
return !(*this == other);
}
private:
IndexType m_index;
};
constexpr IndexRange() constexpr IndexRange()
: m_first {0} : m_first {0}
, m_size {0} , m_size {0}
{ {
} }
constexpr IndexRange(IndexType first, IndexDiffType size) constexpr IndexRange(const IndexType first, const IndexDiffType size)
: m_first {first} : m_first {first}
, m_size {size} , m_size {size}
{ {
@ -92,14 +135,14 @@ public:
{ {
} }
constexpr IndexType begin() const constexpr Iterator begin() const
{ {
return m_first; return Iterator {m_first};
} }
constexpr IndexType end() const constexpr Iterator end() const
{ {
return (m_first + m_size); return Iterator {m_first + m_size};
} }
constexpr IndexDiffType size() const constexpr IndexDiffType size() const

View File

@ -48,6 +48,7 @@ class PreviewListDelegate;
class PreviewSelectDialog final : public QDialog class PreviewSelectDialog final : public QDialog
{ {
Q_OBJECT Q_OBJECT
Q_DISABLE_COPY(PreviewSelectDialog)
public: public:
enum PreviewColumn enum PreviewColumn

View File

@ -53,6 +53,7 @@ namespace Ui
class AutomatedRssDownloader : public QDialog class AutomatedRssDownloader : public QDialog
{ {
Q_OBJECT Q_OBJECT
Q_DISABLE_COPY(AutomatedRssDownloader)
public: public:
explicit AutomatedRssDownloader(QWidget *parent = nullptr); explicit AutomatedRssDownloader(QWidget *parent = nullptr);

View File

@ -47,5 +47,5 @@ public:
APIErrorType type() const; APIErrorType type() const;
private: private:
const APIErrorType m_type; APIErrorType m_type;
}; };