mirror of
https://github.com/qbittorrent/qBittorrent.git
synced 2024-12-21 08:09:35 +08:00
Merge pull request #12691 from Chocobo1/iterator
Support range-based iteration in IndexRange class
This commit is contained in:
commit
4f820163ff
@ -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;
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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);
|
||||||
|
@ -47,5 +47,5 @@ public:
|
|||||||
APIErrorType type() const;
|
APIErrorType type() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const APIErrorType m_type;
|
APIErrorType m_type;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user