mirror of
https://github.com/qbittorrent/qBittorrent.git
synced 2024-11-22 17:26:21 +03:00
Support range-based iteration in IndexRange class
This commit is contained in:
parent
35a4643824
commit
21581141f6
2 changed files with 52 additions and 9 deletions
|
@ -2133,9 +2133,9 @@ QVector<qreal> TorrentHandleImpl::availableFileFractions() const
|
|||
const TorrentInfo::PieceRange filePieces = info.filePieces(i);
|
||||
|
||||
int availablePieces = 0;
|
||||
for (int piece = filePieces.first(); piece <= filePieces.last(); ++piece) {
|
||||
for (const int piece : filePieces)
|
||||
availablePieces += (piecesAvailability[piece] > 0) ? 1 : 0;
|
||||
}
|
||||
|
||||
res.push_back(static_cast<qreal>(availablePieces) / filePieces.size());
|
||||
}
|
||||
return res;
|
||||
|
|
|
@ -38,7 +38,8 @@ class IndexInterval
|
|||
public:
|
||||
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_last {last}
|
||||
{
|
||||
|
@ -61,7 +62,7 @@ private:
|
|||
};
|
||||
|
||||
template <typename T>
|
||||
constexpr IndexInterval<T> makeInterval(T first, T last)
|
||||
constexpr IndexInterval<T> makeInterval(const T first, const T last)
|
||||
{
|
||||
return {first, last};
|
||||
}
|
||||
|
@ -74,13 +75,55 @@ public:
|
|||
using IndexType = Index;
|
||||
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()
|
||||
: m_first {0}
|
||||
, m_size {0}
|
||||
{
|
||||
}
|
||||
|
||||
constexpr IndexRange(IndexType first, IndexDiffType size)
|
||||
constexpr IndexRange(const IndexType first, const IndexDiffType size)
|
||||
: m_first {first}
|
||||
, 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
|
||||
|
|
Loading…
Reference in a new issue