From 7c23d800e60fcd87e4748f80a02b02b244144fc1 Mon Sep 17 00:00:00 2001 From: Chocobo1 Date: Mon, 5 Jul 2021 15:19:17 +0800 Subject: [PATCH 1/2] Use `underlying_type` member directly `LTUnderlyingType` served as a intermediate type for libtorrent 1.1 and 1.2 and is obsoleted now. Also add helper to convert to underlying type. --- src/base/bittorrent/ltunderlyingtype.h | 29 ++------------------ src/base/bittorrent/session.cpp | 22 +++++++-------- src/base/bittorrent/torrentcreatorthread.cpp | 2 +- src/base/bittorrent/torrentimpl.cpp | 12 ++++---- 4 files changed, 21 insertions(+), 44 deletions(-) diff --git a/src/base/bittorrent/ltunderlyingtype.h b/src/base/bittorrent/ltunderlyingtype.h index 42df0aa43..6b3993b2d 100644 --- a/src/base/bittorrent/ltunderlyingtype.h +++ b/src/base/bittorrent/ltunderlyingtype.h @@ -28,31 +28,8 @@ #pragma once -#include - -template -struct HasUnderlyingType - : std::false_type -{ -}; - template -struct HasUnderlyingType> - : std::true_type +typename T::underlying_type toLTUnderlyingType(const T &t) { -}; - -template -struct LTUnderlying -{ - using type = T; -}; - -template -struct LTUnderlying::value>> -{ - using type = typename T::underlying_type; -}; - -template -using LTUnderlyingType = typename LTUnderlying::type; + return static_cast(t); +} diff --git a/src/base/bittorrent/session.cpp b/src/base/bittorrent/session.cpp index f8f8feaef..f2a58f6db 100644 --- a/src/base/bittorrent/session.cpp +++ b/src/base/bittorrent/session.cpp @@ -1489,7 +1489,7 @@ void Session::configurePeerClasses() // Proactively do the same for 0.0.0.0 and address_v4::any() f.add_rule(lt::address_v4::any() , lt::address_v4::broadcast() - , 1 << static_cast>(lt::session::global_peer_class_id)); + , 1 << toLTUnderlyingType(lt::session::global_peer_class_id)); // IPv6 may not be available on OS and the parsing // would result in an exception -> abnormal program termination @@ -1498,7 +1498,7 @@ void Session::configurePeerClasses() { f.add_rule(lt::address_v6::any() , lt::make_address("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff") - , 1 << static_cast>(lt::session::global_peer_class_id)); + , 1 << toLTUnderlyingType(lt::session::global_peer_class_id)); } catch (const std::exception &) {} @@ -1507,21 +1507,21 @@ void Session::configurePeerClasses() // local networks f.add_rule(lt::make_address("10.0.0.0") , lt::make_address("10.255.255.255") - , 1 << static_cast>(lt::session::local_peer_class_id)); + , 1 << toLTUnderlyingType(lt::session::local_peer_class_id)); f.add_rule(lt::make_address("172.16.0.0") , lt::make_address("172.31.255.255") - , 1 << static_cast>(lt::session::local_peer_class_id)); + , 1 << toLTUnderlyingType(lt::session::local_peer_class_id)); f.add_rule(lt::make_address("192.168.0.0") , lt::make_address("192.168.255.255") - , 1 << static_cast>(lt::session::local_peer_class_id)); + , 1 << toLTUnderlyingType(lt::session::local_peer_class_id)); // link local f.add_rule(lt::make_address("169.254.0.0") , lt::make_address("169.254.255.255") - , 1 << static_cast>(lt::session::local_peer_class_id)); + , 1 << toLTUnderlyingType(lt::session::local_peer_class_id)); // loopback f.add_rule(lt::make_address("127.0.0.0") , lt::make_address("127.255.255.255") - , 1 << static_cast>(lt::session::local_peer_class_id)); + , 1 << toLTUnderlyingType(lt::session::local_peer_class_id)); // IPv6 may not be available on OS and the parsing // would result in an exception -> abnormal program termination @@ -1531,15 +1531,15 @@ void Session::configurePeerClasses() // link local f.add_rule(lt::make_address("fe80::") , lt::make_address("febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff") - , 1 << static_cast>(lt::session::local_peer_class_id)); + , 1 << toLTUnderlyingType(lt::session::local_peer_class_id)); // unique local addresses f.add_rule(lt::make_address("fc00::") , lt::make_address("fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff") - , 1 << static_cast>(lt::session::local_peer_class_id)); + , 1 << toLTUnderlyingType(lt::session::local_peer_class_id)); // loopback f.add_rule(lt::address_v6::loopback() , lt::address_v6::loopback() - , 1 << static_cast>(lt::session::local_peer_class_id)); + , 1 << toLTUnderlyingType(lt::session::local_peer_class_id)); } catch (const std::exception &) {} } @@ -2377,7 +2377,7 @@ void Session::saveTorrentsQueue() const for (const TorrentImpl *torrent : asConst(m_torrents)) { // We require actual (non-cached) queue position here! - const int queuePos = static_cast>(torrent->nativeHandle().queue_position()); + const int queuePos = toLTUnderlyingType(torrent->nativeHandle().queue_position()); if (queuePos >= 0) { if (queuePos >= queue.size()) diff --git a/src/base/bittorrent/torrentcreatorthread.cpp b/src/base/bittorrent/torrentcreatorthread.cpp index 6e68c0e4b..74e8ee29e 100644 --- a/src/base/bittorrent/torrentcreatorthread.cpp +++ b/src/base/bittorrent/torrentcreatorthread.cpp @@ -188,7 +188,7 @@ void TorrentCreatorThread::run() , [this, &newTorrent](const lt::piece_index_t n) { checkInterruptionRequested(); - sendProgressSignal(static_cast>(n), newTorrent.num_pieces()); + sendProgressSignal(toLTUnderlyingType(n), newTorrent.num_pieces()); }); // Set qBittorrent as creator and add user comment to diff --git a/src/base/bittorrent/torrentimpl.cpp b/src/base/bittorrent/torrentimpl.cpp index 02c8b1d27..3b86e8ee1 100644 --- a/src/base/bittorrent/torrentimpl.cpp +++ b/src/base/bittorrent/torrentimpl.cpp @@ -84,7 +84,7 @@ namespace , std::back_inserter(out), [](const DownloadPriority priority) { return static_cast( - static_cast>(priority)); + static_cast(priority)); }); return out; } @@ -799,7 +799,7 @@ QVector TorrentImpl::filePriorities() const QVector ret; std::transform(fp.cbegin(), fp.cend(), std::back_inserter(ret), [](lt::download_priority_t priority) { - return static_cast(static_cast>(priority)); + return static_cast(toLTUnderlyingType(priority)); }); return ret; } @@ -1250,7 +1250,7 @@ QBitArray TorrentImpl::downloadingPieces() const m_nativeHandle.get_download_queue(queue); for (const lt::partial_piece_info &info : queue) - result.setBit(static_cast>(info.piece_index)); + result.setBit(toLTUnderlyingType(info.piece_index)); return result; } @@ -1900,7 +1900,7 @@ void TorrentImpl::handleFileRenamedAlert(const lt::file_renamed_alert *p) void TorrentImpl::handleFileRenameFailedAlert(const lt::file_rename_failed_alert *p) { LogMsg(tr("File rename failed. Torrent: \"%1\", file: \"%2\", reason: \"%3\"") - .arg(name(), filePath(static_cast>(p->index)) + .arg(name(), filePath(toLTUnderlyingType(p->index)) , QString::fromLocal8Bit(p->error.message().c_str())), Log::WARNING); m_oldPath[p->index].removeFirst(); @@ -1919,13 +1919,13 @@ void TorrentImpl::handleFileCompletedAlert(const lt::file_completed_alert *p) qDebug("A file completed download in torrent \"%s\"", qUtf8Printable(name())); if (m_session->isAppendExtensionEnabled()) { - QString name = filePath(static_cast>(p->index)); + QString name = filePath(toLTUnderlyingType(p->index)); if (name.endsWith(QB_EXT)) { const QString oldName = name; name.chop(QB_EXT.size()); qDebug("Renaming %s to %s", qUtf8Printable(oldName), qUtf8Printable(name)); - renameFile(static_cast>(p->index), name); + renameFile(toLTUnderlyingType(p->index), name); } } } From 45e31a153cf65390041059eb0a524ac296992629 Mon Sep 17 00:00:00 2001 From: Chocobo1 Date: Mon, 5 Jul 2021 15:55:41 +0800 Subject: [PATCH 2/2] Reserve space for vector --- src/base/bittorrent/torrentimpl.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/base/bittorrent/torrentimpl.cpp b/src/base/bittorrent/torrentimpl.cpp index 3b86e8ee1..a697bb30e 100644 --- a/src/base/bittorrent/torrentimpl.cpp +++ b/src/base/bittorrent/torrentimpl.cpp @@ -797,7 +797,8 @@ QVector TorrentImpl::filePriorities() const const std::vector fp = m_nativeHandle.get_file_priorities(); QVector ret; - std::transform(fp.cbegin(), fp.cend(), std::back_inserter(ret), [](lt::download_priority_t priority) + ret.reserve(fp.size()); + std::transform(fp.cbegin(), fp.cend(), std::back_inserter(ret), [](const lt::download_priority_t priority) { return static_cast(toLTUnderlyingType(priority)); });