Browse Source

Merge pull request #10255 from Chocobo1/algorithm

Make use of std algorithms and C++14 features
adaptive-webui-19844
Mike Tzou 6 years ago committed by GitHub
parent
commit
6f0a66ce26
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 18
      src/base/bittorrent/session.cpp
  2. 9
      src/base/bittorrent/torrenthandle.cpp
  3. 12
      src/base/http/requestparser.cpp
  4. 24
      src/base/http/server.cpp
  5. 2
      src/base/indexrange.h
  6. 22
      src/base/rss/rss_autodownloadrule.cpp
  7. 11
      src/base/rss/rss_folder.cpp
  8. 2
      src/base/tristatebool.h
  9. 10
      src/gui/statsdialog.cpp
  10. 10
      src/gui/torrentcontentmodel.cpp
  11. 3
      src/gui/torrentcontentmodelfolder.cpp
  12. 11
      src/webui/api/synccontroller.cpp

18
src/base/bittorrent/session.cpp

@ -225,7 +225,7 @@ namespace @@ -225,7 +225,7 @@ namespace
template <typename T>
std::function<T (const T&)> clampValue(const T lower, const T upper)
{
// TODO: change return type to `auto` when using C++14
// TODO: change return type to `auto` when using C++17
return [lower, upper](const T value) -> T
{
if (value < lower)
@ -3460,18 +3460,18 @@ void Session::handleTorrentTrackerWarning(TorrentHandle *const torrent, const QS @@ -3460,18 +3460,18 @@ void Session::handleTorrentTrackerWarning(TorrentHandle *const torrent, const QS
bool Session::hasPerTorrentRatioLimit() const
{
for (TorrentHandle *const torrent : asConst(m_torrents))
if (torrent->ratioLimit() >= 0) return true;
return false;
return std::any_of(m_torrents.cbegin(), m_torrents.cend(), [](const TorrentHandle *torrent)
{
return (torrent->ratioLimit() >= 0);
});
}
bool Session::hasPerTorrentSeedingTimeLimit() const
{
for (TorrentHandle *const torrent : asConst(m_torrents))
if (torrent->seedingTimeLimit() >= 0) return true;
return false;
return std::any_of(m_torrents.cbegin(), m_torrents.cend(), [](const TorrentHandle *torrent)
{
return (torrent->seedingTimeLimit() >= 0);
});
}
void Session::initResumeFolder()

9
src/base/bittorrent/torrenthandle.cpp

@ -841,11 +841,10 @@ bool TorrentHandle::hasError() const @@ -841,11 +841,10 @@ bool TorrentHandle::hasError() const
bool TorrentHandle::hasFilteredPieces() const
{
const std::vector<int> pp = m_nativeHandle.piece_priorities();
for (const int priority : pp)
if (priority == 0) return true;
return false;
return std::any_of(pp.cbegin(), pp.cend(), [](const int priority)
{
return (priority == 0);
});
}
int TorrentHandle::queuePosition() const

12
src/base/http/requestparser.cpp

@ -30,6 +30,8 @@ @@ -30,6 +30,8 @@
#include "requestparser.h"
#include <algorithm>
#include <QDebug>
#include <QRegularExpression>
#include <QStringList>
@ -242,12 +244,10 @@ bool RequestParser::parsePostMessage(const QByteArray &data) @@ -242,12 +244,10 @@ bool RequestParser::parsePostMessage(const QByteArray &data)
const QByteArray endDelimiter = QByteArray("--") + delimiter + QByteArray("--") + CRLF;
multipart.push_back(viewWithoutEndingWith(multipart.takeLast(), endDelimiter));
for (const auto &part : multipart) {
if (!parseFormData(part))
return false;
}
return true;
return std::all_of(multipart.cbegin(), multipart.cend(), [this](const QByteArray &part)
{
return this->parseFormData(part);
});
}
qWarning() << Q_FUNC_INFO << "unknown content type:" << contentType;

24
src/base/http/server.cpp

@ -50,22 +50,16 @@ namespace @@ -50,22 +50,16 @@ namespace
QList<QSslCipher> safeCipherList()
{
const QStringList badCiphers = {"idea", "rc4"};
const QList<QSslCipher> allCiphers = QSslSocket::supportedCiphers();
const QStringList badCiphers {"idea", "rc4"};
const QList<QSslCipher> allCiphers {QSslSocket::supportedCiphers()};
QList<QSslCipher> safeCiphers;
for (const QSslCipher &cipher : allCiphers) {
bool isSafe = true;
for (const QString &badCipher : badCiphers) {
if (cipher.name().contains(badCipher, Qt::CaseInsensitive)) {
isSafe = false;
break;
}
}
if (isSafe)
safeCiphers += cipher;
}
std::copy_if(allCiphers.cbegin(), allCiphers.cend(), std::back_inserter(safeCiphers), [&badCiphers](const QSslCipher &cipher)
{
return std::none_of(badCiphers.cbegin(), badCiphers.cend(), [&cipher](const QString &badCipher)
{
return cipher.name().contains(badCipher, Qt::CaseInsensitive);
});
});
return safeCiphers;
}
}

2
src/base/indexrange.h

@ -38,7 +38,7 @@ class IndexInterval @@ -38,7 +38,7 @@ class IndexInterval
public:
using IndexType = Index;
IndexInterval(IndexType first, IndexType last) // add constexpr when using C++14
IndexInterval(IndexType first, IndexType last) // add constexpr when using C++17
: m_first {first}
, m_last {last}
{

22
src/base/rss/rss_autodownloadrule.cpp

@ -29,6 +29,8 @@ @@ -29,6 +29,8 @@
#include "rss_autodownloadrule.h"
#include <algorithm>
#include <QDebug>
#include <QDir>
#include <QHash>
@ -237,13 +239,11 @@ bool AutoDownloadRule::matchesMustContainExpression(const QString &articleTitle) @@ -237,13 +239,11 @@ bool AutoDownloadRule::matchesMustContainExpression(const QString &articleTitle)
// Each expression is either a regex, or a set of wildcards separated by whitespace.
// Accept if any complete expression matches.
for (const QString &expression : asConst(m_dataPtr->mustContain)) {
return std::any_of(m_dataPtr->mustContain.cbegin(), m_dataPtr->mustContain.cend(), [this, &articleTitle](const QString &expression)
{
// A regex of the form "expr|" will always match, so do the same for wildcards
if (matchesExpression(articleTitle, expression))
return true;
}
return false;
return matchesExpression(articleTitle, expression);
});
}
bool AutoDownloadRule::matchesMustNotContainExpression(const QString &articleTitle) const
@ -253,13 +253,11 @@ bool AutoDownloadRule::matchesMustNotContainExpression(const QString &articleTit @@ -253,13 +253,11 @@ bool AutoDownloadRule::matchesMustNotContainExpression(const QString &articleTit
// Each expression is either a regex, or a set of wildcards separated by whitespace.
// Reject if any complete expression matches.
for (const QString &expression : asConst(m_dataPtr->mustNotContain)) {
return std::none_of(m_dataPtr->mustNotContain.cbegin(), m_dataPtr->mustNotContain.cend(), [this, &articleTitle](const QString &expression)
{
// A regex of the form "expr|" will always match, so do the same for wildcards
if (matchesExpression(articleTitle, expression))
return false;
}
return true;
return matchesExpression(articleTitle, expression);
});
}
bool AutoDownloadRule::matchesEpisodeFilterExpression(const QString &articleTitle) const

11
src/base/rss/rss_folder.cpp

@ -30,6 +30,8 @@ @@ -30,6 +30,8 @@
#include "rss_folder.h"
#include <algorithm>
#include <QJsonObject>
#include <QJsonValue>
@ -69,10 +71,11 @@ QList<Article *> Folder::articles() const @@ -69,10 +71,11 @@ QList<Article *> Folder::articles() const
int Folder::unreadCount() const
{
int count = 0;
for (Item *item : asConst(items()))
count += item->unreadCount();
return count;
const auto itemList = items();
return std::accumulate(itemList.cbegin(), itemList.cend(), 0, [](const int acc, const Item *item)
{
return (acc + item->unreadCount());
});
}
void Folder::markAsRead()

2
src/base/tristatebool.h

@ -48,7 +48,7 @@ public: @@ -48,7 +48,7 @@ public:
return m_value;
}
TriStateBool &operator=(const TriStateBool &other) = default; // add constexpr when using C++14
TriStateBool &operator=(const TriStateBool &other) = default; // add constexpr when using C++17
constexpr bool operator==(const TriStateBool &other) const
{

10
src/gui/statsdialog.cpp

@ -28,6 +28,8 @@ @@ -28,6 +28,8 @@
#include "statsdialog.h"
#include <algorithm>
#include "base/bittorrent/cachestatus.h"
#include "base/bittorrent/session.h"
#include "base/bittorrent/sessionstatus.h"
@ -89,9 +91,11 @@ void StatsDialog::update() @@ -89,9 +91,11 @@ void StatsDialog::update()
// to complete before it receives or sends any more data on the socket. It's a metric of how disk bound you are.
// num_peers is not reliable (adds up peers, which didn't even overcome tcp handshake)
quint32 peers = 0;
for (BitTorrent::TorrentHandle *const torrent : asConst(BitTorrent::Session::instance()->torrents()))
peers += torrent->peersCount();
const auto torrents = BitTorrent::Session::instance()->torrents();
const quint32 peers = std::accumulate(torrents.cbegin(), torrents.cend(), 0, [](const quint32 acc, const BitTorrent::TorrentHandle *torrent)
{
return (acc + torrent->peersCount());
});
m_ui->labelWriteStarve->setText(QString("%1%")
.arg(((ss.diskWriteQueue > 0) && (peers > 0))

10
src/gui/torrentcontentmodel.cpp

@ -28,6 +28,8 @@ @@ -28,6 +28,8 @@
#include "torrentcontentmodel.h"
#include <algorithm>
#include <QDir>
#include <QFileIconProvider>
#include <QFileInfo>
@ -275,10 +277,10 @@ QVector<int> TorrentContentModel::getFilePriorities() const @@ -275,10 +277,10 @@ QVector<int> TorrentContentModel::getFilePriorities() const
bool TorrentContentModel::allFiltered() const
{
for (const TorrentContentModelFile *fileItem : asConst(m_filesIndex))
if (fileItem->priority() != BitTorrent::FilePriority::Ignored)
return false;
return true;
return std::all_of(m_filesIndex.cbegin(), m_filesIndex.cend(), [](const TorrentContentModelFile *fileItem)
{
return (fileItem->priority() == BitTorrent::FilePriority::Ignored);
});
}
int TorrentContentModel::columnCount(const QModelIndex &parent) const

3
src/gui/torrentcontentmodelfolder.cpp

@ -86,9 +86,10 @@ TorrentContentModelItem *TorrentContentModelFolder::child(int row) const @@ -86,9 +86,10 @@ TorrentContentModelItem *TorrentContentModelFolder::child(int row) const
TorrentContentModelFolder *TorrentContentModelFolder::childFolderWithName(const QString &name) const
{
for (TorrentContentModelItem *child : asConst(m_childItems))
for (TorrentContentModelItem *child : asConst(m_childItems)) {
if ((child->itemType() == FolderType) && (child->name() == name))
return static_cast<TorrentContentModelFolder *>(child);
}
return nullptr;
}

11
src/webui/api/synccontroller.cpp

@ -28,6 +28,8 @@ @@ -28,6 +28,8 @@
#include "synccontroller.h"
#include <algorithm>
#include <QJsonObject>
#include <QThread>
#include <QTimer>
@ -133,9 +135,12 @@ namespace @@ -133,9 +135,12 @@ namespace
map[KEY_TRANSFER_TOTAL_BUFFERS_SIZE] = cacheStatus.totalUsedBuffers * 16 * 1024;
// num_peers is not reliable (adds up peers, which didn't even overcome tcp handshake)
quint32 peers = 0;
for (BitTorrent::TorrentHandle *const torrent : asConst(BitTorrent::Session::instance()->torrents()))
peers += torrent->peersCount();
const auto torrents = BitTorrent::Session::instance()->torrents();
const quint32 peers = std::accumulate(torrents.cbegin(), torrents.cend(), 0, [](const quint32 acc, const BitTorrent::TorrentHandle *torrent)
{
return (acc + torrent->peersCount());
});
map[KEY_TRANSFER_WRITE_CACHE_OVERLOAD] = ((sessionStatus.diskWriteQueue > 0) && (peers > 0)) ? Utils::String::fromDouble((100. * sessionStatus.diskWriteQueue) / peers, 2) : "0";
map[KEY_TRANSFER_READ_CACHE_OVERLOAD] = ((sessionStatus.diskReadQueue > 0) && (peers > 0)) ? Utils::String::fromDouble((100. * sessionStatus.diskReadQueue) / peers, 2) : "0";

Loading…
Cancel
Save