From: Manuel Nickschas Date: Fri, 30 Aug 2019 19:36:09 +0000 (+0200) Subject: core: Replace QList by std::vector in the storage API X-Git-Tag: test-travis-01~27 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=6e3574a163f07c28d44276318f2d9f92e169f491 core: Replace QList by std::vector in the storage API QList is inefficient and deprecated; also Qt containers have issues with ranged-for and STL algorithms. Use std::vector instead in the storage API and fix affected code. Modernize some affected bits by replacing weird loops with STL algorithms. --- diff --git a/src/core/abstractsqlstorage.cpp b/src/core/abstractsqlstorage.cpp index bc56ef27..d43f59ef 100644 --- a/src/core/abstractsqlstorage.cpp +++ b/src/core/abstractsqlstorage.cpp @@ -183,13 +183,13 @@ QString AbstractSqlStorage::queryString(const QString& queryName, int version) return query.trimmed(); } -QList AbstractSqlStorage::setupQueries() +std::vector AbstractSqlStorage::setupQueries() { - QList queries; + std::vector queries; // The current schema is stored in the root folder, including setup scripts. QDir dir = QDir(QString(":/SQL/%1/").arg(displayName())); foreach (QFileInfo fileInfo, dir.entryInfoList(QStringList() << "setup*", QDir::NoFilter, QDir::Name)) { - queries << SqlQueryResource(queryString(fileInfo.baseName()), fileInfo.baseName()); + queries.emplace_back(queryString(fileInfo.baseName()), fileInfo.baseName()); } return queries; } @@ -221,13 +221,13 @@ bool AbstractSqlStorage::setup(const QVariantMap& settings, const QProcessEnviro return success; } -QList AbstractSqlStorage::upgradeQueries(int version) +std::vector AbstractSqlStorage::upgradeQueries(int version) { - QList queries; + std::vector queries; // Upgrade queries are stored in the 'version/##' subfolders. QDir dir = QDir(QString(":/SQL/%1/version/%2/").arg(displayName()).arg(version)); foreach (QFileInfo fileInfo, dir.entryInfoList(QStringList() << "upgrade*", QDir::NoFilter, QDir::Name)) { - queries << SqlQueryResource(queryString(fileInfo.baseName(), version), fileInfo.baseName()); + queries.emplace_back(queryString(fileInfo.baseName(), version), fileInfo.baseName()); } return queries; } diff --git a/src/core/abstractsqlstorage.h b/src/core/abstractsqlstorage.h index a0bdd23c..e43188a7 100644 --- a/src/core/abstractsqlstorage.h +++ b/src/core/abstractsqlstorage.h @@ -21,6 +21,7 @@ #pragma once #include +#include #include #include @@ -95,7 +96,7 @@ protected: * * @return List of SQL query strings and filenames */ - QList setupQueries(); + std::vector setupQueries(); /** * Gets the collection of SQL upgrade queries and filenames for a given schema version @@ -103,7 +104,7 @@ protected: * @param ver SQL schema version * @return List of SQL query strings and filenames */ - QList upgradeQueries(int ver); + std::vector upgradeQueries(int ver); bool upgradeDb(); bool watchQuery(QSqlQuery& query); diff --git a/src/core/core.h b/src/core/core.h index b2c6c1ef..2df19475 100644 --- a/src/core/core.h +++ b/src/core/core.h @@ -194,7 +194,7 @@ public: static void removeIdentity(UserId user, IdentityId identityId) { instance()->_storage->removeIdentity(user, identityId); } - static QList identities(UserId user) { return instance()->_storage->identities(user); } + static std::vector identities(UserId user) { return instance()->_storage->identities(user); } //! Create a Network in the Storage and store it's Id in the given NetworkInfo /** \note This method is thredsafe. @@ -230,9 +230,9 @@ public: /** \note This method is thredsafe. * * \param user The core user - * \return QList. + * \return std::vector. */ - static inline QList networks(UserId user) { return instance()->_storage->networks(user); } + static inline std::vector networks(UserId user) { return instance()->_storage->networks(user); } //! Get a list of Networks to restore /** Return a list of networks the user was connected at the time of core shutdown @@ -240,7 +240,7 @@ public: * * \param user The User Id in question */ - static inline QList connectedNetworks(UserId user) { return instance()->_storage->connectedNetworks(user); } + static inline std::vector connectedNetworks(UserId user) { return instance()->_storage->connectedNetworks(user); } //! Update the connected state of a network /** \note This method is threadsafe @@ -407,7 +407,7 @@ public: * \param limit if != -1 limit the returned list to a max of \limit entries * \return The requested list of messages */ - static inline QList requestMsgs(UserId user, BufferId bufferId, MsgId first = -1, MsgId last = -1, int limit = -1) + static inline std::vector requestMsgs(UserId user, BufferId bufferId, MsgId first = -1, MsgId last = -1, int limit = -1) { return instance()->_storage->requestMsgs(user, bufferId, first, last, limit); } @@ -420,7 +420,7 @@ public: * \param type The Message::Types that should be returned * \return The requested list of messages */ - static inline QList requestMsgsFiltered(UserId user, + static inline std::vector requestMsgsFiltered(UserId user, BufferId bufferId, MsgId first = -1, MsgId last = -1, @@ -437,7 +437,7 @@ public: * \param limit Max amount of messages * \return The requested list of messages */ - static inline QList requestAllMsgs(UserId user, MsgId first = -1, MsgId last = -1, int limit = -1) + static inline std::vector requestAllMsgs(UserId user, MsgId first = -1, MsgId last = -1, int limit = -1) { return instance()->_storage->requestAllMsgs(user, first, last, limit); } @@ -449,7 +449,7 @@ public: * \param type The Message::Types that should be returned * \return The requested list of messages */ - static inline QList requestAllMsgsFiltered(UserId user, + static inline std::vector requestAllMsgsFiltered(UserId user, MsgId first = -1, MsgId last = -1, int limit = -1, @@ -466,7 +466,7 @@ public: * \param user The user whose buffers we request * \return A list of the BufferInfos for all buffers as requested */ - static inline QList requestBuffers(UserId user) { return instance()->_storage->requestBuffers(user); } + static inline std::vector requestBuffers(UserId user) { return instance()->_storage->requestBuffers(user); } //! Request a list of BufferIds for a given NetworkId /** \note This method is threadsafe. @@ -475,7 +475,7 @@ public: * \param networkId The NetworkId of the network in question * \return List of BufferIds belonging to the Network */ - static inline QList requestBufferIdsForNetwork(UserId user, NetworkId networkId) + static inline std::vector requestBufferIdsForNetwork(UserId user, NetworkId networkId) { return instance()->_storage->requestBufferIdsForNetwork(user, networkId); } diff --git a/src/core/corebacklogmanager.cpp b/src/core/corebacklogmanager.cpp index d72aa719..deb2ac99 100644 --- a/src/core/corebacklogmanager.cpp +++ b/src/core/corebacklogmanager.cpp @@ -20,6 +20,9 @@ #include "corebacklogmanager.h" +#include +#include + #include #include "core.h" @@ -33,23 +36,19 @@ CoreBacklogManager::CoreBacklogManager(CoreSession* coreSession) QVariantList CoreBacklogManager::requestBacklog(BufferId bufferId, MsgId first, MsgId last, int limit, int additional) { QVariantList backlog; - QList msgList; - msgList = Core::requestMsgs(coreSession()->user(), bufferId, first, last, limit); - - QList::const_iterator msgIter = msgList.constBegin(); - QList::const_iterator msgListEnd = msgList.constEnd(); - while (msgIter != msgListEnd) { - backlog << qVariantFromValue(*msgIter); - ++msgIter; - } + auto msgList = Core::requestMsgs(coreSession()->user(), bufferId, first, last, limit); + + std::transform(msgList.cbegin(), msgList.cend(), std::back_inserter(backlog), [](auto&& msg) { + return QVariant::fromValue(msg); + }); if (additional && limit != 0) { MsgId oldestMessage = first; - if (!msgList.isEmpty()) { - if (msgList.first().msgId() < msgList.last().msgId()) - oldestMessage = msgList.first().msgId(); + if (!msgList.empty()) { + if (msgList.front().msgId() < msgList.back().msgId()) + oldestMessage = msgList.front().msgId(); else - oldestMessage = msgList.last().msgId(); + oldestMessage = msgList.back().msgId(); } if (first != -1) { @@ -63,12 +62,9 @@ QVariantList CoreBacklogManager::requestBacklog(BufferId bufferId, MsgId first, // that is, if the list of messages is not truncated by the limit if (last == oldestMessage) { msgList = Core::requestMsgs(coreSession()->user(), bufferId, -1, last, additional); - msgIter = msgList.constBegin(); - msgListEnd = msgList.constEnd(); - while (msgIter != msgListEnd) { - backlog << qVariantFromValue(*msgIter); - ++msgIter; - } + std::transform(msgList.cbegin(), msgList.cend(), std::back_inserter(backlog), [](auto&& msg) { + return QVariant::fromValue(msg); + }); } } @@ -78,23 +74,19 @@ QVariantList CoreBacklogManager::requestBacklog(BufferId bufferId, MsgId first, QVariantList CoreBacklogManager::requestBacklogFiltered(BufferId bufferId, MsgId first, MsgId last, int limit, int additional, int type, int flags) { QVariantList backlog; - QList msgList; - msgList = Core::requestMsgsFiltered(coreSession()->user(), bufferId, first, last, limit, Message::Types{type}, Message::Flags{flags}); - - QList::const_iterator msgIter = msgList.constBegin(); - QList::const_iterator msgListEnd = msgList.constEnd(); - while (msgIter != msgListEnd) { - backlog << qVariantFromValue(*msgIter); - ++msgIter; - } + auto msgList = Core::requestMsgsFiltered(coreSession()->user(), bufferId, first, last, limit, Message::Types{type}, Message::Flags{flags}); + + std::transform(msgList.cbegin(), msgList.cend(), std::back_inserter(backlog), [](auto&& msg) { + return QVariant::fromValue(msg); + }); if (additional && limit != 0) { MsgId oldestMessage = first; - if (!msgList.isEmpty()) { - if (msgList.first().msgId() < msgList.last().msgId()) - oldestMessage = msgList.first().msgId(); + if (!msgList.empty()) { + if (msgList.front().msgId() < msgList.back().msgId()) + oldestMessage = msgList.front().msgId(); else - oldestMessage = msgList.last().msgId(); + oldestMessage = msgList.back().msgId(); } if (first != -1) { @@ -108,12 +100,9 @@ QVariantList CoreBacklogManager::requestBacklogFiltered(BufferId bufferId, MsgId // that is, if the list of messages is not truncated by the limit if (last == oldestMessage) { msgList = Core::requestMsgsFiltered(coreSession()->user(), bufferId, -1, last, additional, Message::Types{type}, Message::Flags{flags}); - msgIter = msgList.constBegin(); - msgListEnd = msgList.constEnd(); - while (msgIter != msgListEnd) { - backlog << qVariantFromValue(*msgIter); - ++msgIter; - } + std::transform(msgList.cbegin(), msgList.cend(), std::back_inserter(backlog), [](auto&& msg) { + return QVariant::fromValue(msg); + }); } } @@ -123,15 +112,11 @@ QVariantList CoreBacklogManager::requestBacklogFiltered(BufferId bufferId, MsgId QVariantList CoreBacklogManager::requestBacklogAll(MsgId first, MsgId last, int limit, int additional) { QVariantList backlog; - QList msgList; - msgList = Core::requestAllMsgs(coreSession()->user(), first, last, limit); - - QList::const_iterator msgIter = msgList.constBegin(); - QList::const_iterator msgListEnd = msgList.constEnd(); - while (msgIter != msgListEnd) { - backlog << qVariantFromValue(*msgIter); - ++msgIter; - } + auto msgList = Core::requestAllMsgs(coreSession()->user(), first, last, limit); + + std::transform(msgList.cbegin(), msgList.cend(), std::back_inserter(backlog), [](auto&& msg) { + return QVariant::fromValue(msg); + }); if (additional) { if (first != -1) { @@ -139,20 +124,17 @@ QVariantList CoreBacklogManager::requestBacklogAll(MsgId first, MsgId last, int } else { last = -1; - if (!msgList.isEmpty()) { - if (msgList.first().msgId() < msgList.last().msgId()) - last = msgList.first().msgId(); + if (!msgList.empty()) { + if (msgList.front().msgId() < msgList.back().msgId()) + last = msgList.front().msgId(); else - last = msgList.last().msgId(); + last = msgList.back().msgId(); } } msgList = Core::requestAllMsgs(coreSession()->user(), -1, last, additional); - msgIter = msgList.constBegin(); - msgListEnd = msgList.constEnd(); - while (msgIter != msgListEnd) { - backlog << qVariantFromValue(*msgIter); - ++msgIter; - } + std::transform(msgList.cbegin(), msgList.cend(), std::back_inserter(backlog), [](auto&& msg) { + return QVariant::fromValue(msg); + }); } return backlog; @@ -161,15 +143,11 @@ QVariantList CoreBacklogManager::requestBacklogAll(MsgId first, MsgId last, int QVariantList CoreBacklogManager::requestBacklogAllFiltered(MsgId first, MsgId last, int limit, int additional, int type, int flags) { QVariantList backlog; - QList msgList; - msgList = Core::requestAllMsgsFiltered(coreSession()->user(), first, last, limit, Message::Types{type}, Message::Flags{flags}); - - QList::const_iterator msgIter = msgList.constBegin(); - QList::const_iterator msgListEnd = msgList.constEnd(); - while (msgIter != msgListEnd) { - backlog << qVariantFromValue(*msgIter); - ++msgIter; - } + auto msgList = Core::requestAllMsgsFiltered(coreSession()->user(), first, last, limit, Message::Types{type}, Message::Flags{flags}); + + std::transform(msgList.cbegin(), msgList.cend(), std::back_inserter(backlog), [](auto&& msg) { + return QVariant::fromValue(msg); + }); if (additional) { if (first != -1) { @@ -177,20 +155,17 @@ QVariantList CoreBacklogManager::requestBacklogAllFiltered(MsgId first, MsgId la } else { last = -1; - if (!msgList.isEmpty()) { - if (msgList.first().msgId() < msgList.last().msgId()) - last = msgList.first().msgId(); + if (!msgList.empty()) { + if (msgList.front().msgId() < msgList.back().msgId()) + last = msgList.front().msgId(); else - last = msgList.last().msgId(); + last = msgList.back().msgId(); } } msgList = Core::requestAllMsgsFiltered(coreSession()->user(), -1, last, additional, Message::Types{type}, Message::Flags{flags}); - msgIter = msgList.constBegin(); - msgListEnd = msgList.constEnd(); - while (msgIter != msgListEnd) { - backlog << qVariantFromValue(*msgIter); - ++msgIter; - } + std::transform(msgList.cbegin(), msgList.cend(), std::back_inserter(backlog), [](auto&& msg) { + return QVariant::fromValue(msg); + }); } return backlog; diff --git a/src/core/corebuffersyncer.cpp b/src/core/corebuffersyncer.cpp index 4f3830e3..266f344b 100644 --- a/src/core/corebuffersyncer.cpp +++ b/src/core/corebuffersyncer.cpp @@ -20,6 +20,10 @@ #include "corebuffersyncer.h" +#include +#include +#include + #include "core.h" #include "corenetwork.h" #include "coresession.h" @@ -184,15 +188,14 @@ void CoreBufferSyncer::requestPurgeBufferIds() void CoreBufferSyncer::purgeBufferIds() { _purgeBuffers = false; - QList bufferInfos = Core::requestBuffers(_coreSession->user()); - QSet actualBuffers; - foreach (BufferInfo bufferInfo, bufferInfos) { - actualBuffers << bufferInfo.bufferId(); - } + auto bufferInfos = Core::requestBuffers(_coreSession->user()); + std::set actualBuffers; + std::transform(bufferInfos.cbegin(), bufferInfos.cend(), std::inserter(actualBuffers, actualBuffers.end()), + [](auto&& bufferInfo) { return bufferInfo.bufferId(); }); QSet storedIds = lastSeenBufferIds().toSet() + markerLineBufferIds().toSet(); foreach (BufferId bufferId, storedIds) { - if (!actualBuffers.contains(bufferId)) { + if (actualBuffers.find(bufferId) == actualBuffers.end()) { BufferSyncer::removeBuffer(bufferId); } } diff --git a/src/core/coresession.cpp b/src/core/coresession.cpp index 961fcafe..a05b6bac 100644 --- a/src/core/coresession.cpp +++ b/src/core/coresession.cpp @@ -207,11 +207,11 @@ void CoreSession::loadSettings() // migrate to db QList ids = s.identityIds(); - QList networkInfos = Core::networks(user()); + std::vector networkInfos = Core::networks(user()); for (IdentityId id : ids) { CoreIdentity identity(s.identity(id)); IdentityId newId = Core::createIdentity(user(), identity); - QList::iterator networkIter = networkInfos.begin(); + auto networkIter = networkInfos.begin(); while (networkIter != networkInfos.end()) { if (networkIter->identity == id) { networkIter->identity = newId; @@ -244,10 +244,8 @@ void CoreSession::saveSessionState() const void CoreSession::restoreSessionState() { - QList nets = Core::connectedNetworks(user()); - CoreNetwork* net = nullptr; - for (NetworkId id : nets) { - net = network(id); + for (NetworkId id : Core::connectedNetworks(user())) { + auto net = network(id); Q_ASSERT(net); net->connectToIrc(); } @@ -359,7 +357,7 @@ void CoreSession::processMessageEvent(MessageEvent* event) }); } -QList CoreSession::buffers() const +std::vector CoreSession::buffers() const { return Core::requestBuffers(user()); } @@ -659,7 +657,6 @@ void CoreSession::removeNetwork(NetworkId id) void CoreSession::destroyNetwork(NetworkId id) { - QList removedBuffers = Core::requestBufferIdsForNetwork(user(), id); Network* net = _networks.take(id); if (net && Core::removeNetwork(user(), id)) { // make sure that all unprocessed RawMessages from this network are removed @@ -673,7 +670,7 @@ void CoreSession::destroyNetwork(NetworkId id) } } // remove buffers from syncer - for (BufferId bufferId : removedBuffers) { + for (BufferId bufferId : Core::requestBufferIdsForNetwork(user(), id)) { _bufferSyncer->removeBuffer(bufferId); } emit networkRemoved(id); diff --git a/src/core/coresession.h b/src/core/coresession.h index 3e08eacc..f47d175a 100644 --- a/src/core/coresession.h +++ b/src/core/coresession.h @@ -21,6 +21,7 @@ #pragma once #include +#include #include #include @@ -65,7 +66,7 @@ class CoreSession : public QObject public: CoreSession(UserId, bool restoreState, bool strictIdentEnabled, QObject* parent = nullptr); - QList buffers() const; + std::vector buffers() const; inline UserId user() const { return _user; } CoreNetwork* network(NetworkId) const; CoreIdentity* identity(IdentityId) const; diff --git a/src/core/postgresqlstorage.cpp b/src/core/postgresqlstorage.cpp index ee0bf71e..2aa28552 100644 --- a/src/core/postgresqlstorage.cpp +++ b/src/core/postgresqlstorage.cpp @@ -676,9 +676,9 @@ void PostgreSqlStorage::removeIdentity(UserId user, IdentityId identityId) } } -QList PostgreSqlStorage::identities(UserId user) +std::vector PostgreSqlStorage::identities(UserId user) { - QList identities; + std::vector identities; QSqlDatabase db = logDb(); if (!beginReadOnlyTransaction(db)) { @@ -730,7 +730,7 @@ QList PostgreSqlStorage::identities(UserId user) nicks << nickQuery.value(0).toString(); } identity.setNicks(nicks); - identities << identity; + identities.push_back(std::move(identity)); } db.commit(); return identities; @@ -908,9 +908,9 @@ bool PostgreSqlStorage::removeNetwork(UserId user, const NetworkId& networkId) return true; } -QList PostgreSqlStorage::networks(UserId user) +std::vector PostgreSqlStorage::networks(UserId user) { - QList nets; + std::vector nets; QSqlDatabase db = logDb(); if (!beginReadOnlyTransaction(db)) { @@ -984,15 +984,15 @@ QList PostgreSqlStorage::networks(UserId user) servers << server; } net.serverList = servers; - nets << net; + nets.push_back(std::move(net)); } db.commit(); return nets; } -QList PostgreSqlStorage::connectedNetworks(UserId user) +std::vector PostgreSqlStorage::connectedNetworks(UserId user) { - QList connectedNets; + std::vector connectedNets; QSqlDatabase db = logDb(); if (!beginReadOnlyTransaction(db)) { @@ -1008,7 +1008,7 @@ QList PostgreSqlStorage::connectedNetworks(UserId user) watchQuery(query); while (query.next()) { - connectedNets << query.value(0).toInt(); + connectedNets.emplace_back(query.value(0).toInt()); } db.commit(); @@ -1210,9 +1210,9 @@ BufferInfo PostgreSqlStorage::getBufferInfo(UserId user, const BufferId& bufferI return bufferInfo; } -QList PostgreSqlStorage::requestBuffers(UserId user) +std::vector PostgreSqlStorage::requestBuffers(UserId user) { - QList bufferlist; + std::vector bufferlist; QSqlDatabase db = logDb(); if (!beginReadOnlyTransaction(db)) { @@ -1228,19 +1228,19 @@ QList PostgreSqlStorage::requestBuffers(UserId user) safeExec(query); watchQuery(query); while (query.next()) { - bufferlist << BufferInfo(query.value(0).toInt(), - query.value(1).toInt(), - (BufferInfo::Type)query.value(2).toInt(), - query.value(3).toInt(), - query.value(4).toString()); + bufferlist.emplace_back(query.value(0).toInt(), + query.value(1).toInt(), + (BufferInfo::Type)query.value(2).toInt(), + query.value(3).toInt(), + query.value(4).toString()); } db.commit(); return bufferlist; } -QList PostgreSqlStorage::requestBufferIdsForNetwork(UserId user, NetworkId networkId) +std::vector PostgreSqlStorage::requestBufferIdsForNetwork(UserId user, NetworkId networkId) { - QList bufferList; + std::vector bufferList; QSqlDatabase db = logDb(); if (!beginReadOnlyTransaction(db)) { @@ -1257,7 +1257,7 @@ QList PostgreSqlStorage::requestBufferIdsForNetwork(UserId user, Netwo safeExec(query); watchQuery(query); while (query.next()) { - bufferList << BufferId(query.value(0).toInt()); + bufferList.emplace_back(query.value(0).toInt()); } db.commit(); return bufferList; @@ -1755,9 +1755,9 @@ bool PostgreSqlStorage::logMessages(MessageList& msgs) return true; } -QList PostgreSqlStorage::requestMsgs(UserId user, BufferId bufferId, MsgId first, MsgId last, int limit) +std::vector PostgreSqlStorage::requestMsgs(UserId user, BufferId bufferId, MsgId first, MsgId last, int limit) { - QList messagelist; + std::vector messagelist; QSqlDatabase db = logDb(); if (!beginReadOnlyTransaction(db)) { @@ -1816,17 +1816,17 @@ QList PostgreSqlStorage::requestMsgs(UserId user, BufferId bufferId, Ms query.value(7).toString(), (Message::Flags)query.value(3).toInt()); msg.setMsgId(query.value(0).toLongLong()); - messagelist << msg; + messagelist.push_back(std::move(msg)); } db.commit(); return messagelist; } -QList PostgreSqlStorage::requestMsgsFiltered( +std::vector PostgreSqlStorage::requestMsgsFiltered( UserId user, BufferId bufferId, MsgId first, MsgId last, int limit, Message::Types type, Message::Flags flags) { - QList messagelist; + std::vector messagelist; QSqlDatabase db = logDb(); if (!beginReadOnlyTransaction(db)) { @@ -1884,16 +1884,16 @@ QList PostgreSqlStorage::requestMsgsFiltered( query.value(7).toString(), Message::Flags{query.value(3).toInt()}); msg.setMsgId(query.value(0).toLongLong()); - messagelist << msg; + messagelist.push_back(std::move(msg)); } db.commit(); return messagelist; } -QList PostgreSqlStorage::requestAllMsgs(UserId user, MsgId first, MsgId last, int limit) +std::vector PostgreSqlStorage::requestAllMsgs(UserId user, MsgId first, MsgId last, int limit) { - QList messagelist; + std::vector messagelist; // requestBuffers uses it's own transaction. QHash bufferInfoHash; @@ -1940,17 +1940,17 @@ QList PostgreSqlStorage::requestAllMsgs(UserId user, MsgId first, MsgId query.value(8).toString(), (Message::Flags)query.value(4).toInt()); msg.setMsgId(query.value(0).toLongLong()); - messagelist << msg; + messagelist.push_back(std::move(msg)); } db.commit(); return messagelist; } -QList PostgreSqlStorage::requestAllMsgsFiltered( +std::vector PostgreSqlStorage::requestAllMsgsFiltered( UserId user, MsgId first, MsgId last, int limit, Message::Types type, Message::Flags flags) { - QList messagelist; + std::vector messagelist; // requestBuffers uses it's own transaction. QHash bufferInfoHash; @@ -2004,7 +2004,7 @@ QList PostgreSqlStorage::requestAllMsgsFiltered( query.value(8).toString(), Message::Flags{query.value(4).toInt()}); msg.setMsgId(query.value(0).toLongLong()); - messagelist << msg; + messagelist.push_back(std::move(msg)); } db.commit(); diff --git a/src/core/postgresqlstorage.h b/src/core/postgresqlstorage.h index f93bf691..51ff0909 100644 --- a/src/core/postgresqlstorage.h +++ b/src/core/postgresqlstorage.h @@ -63,14 +63,14 @@ public slots: IdentityId createIdentity(UserId user, CoreIdentity& identity) override; bool updateIdentity(UserId user, const CoreIdentity& identity) override; void removeIdentity(UserId user, IdentityId identityId) override; - QList identities(UserId user) override; + std::vector identities(UserId user) override; /* Network handling */ NetworkId createNetwork(UserId user, const NetworkInfo& info) override; bool updateNetwork(UserId user, const NetworkInfo& info) override; bool removeNetwork(UserId user, const NetworkId& networkId) override; - QList networks(UserId user) override; - QList connectedNetworks(UserId user) override; + std::vector networks(UserId user) override; + std::vector connectedNetworks(UserId user) override; void setNetworkConnected(UserId user, const NetworkId& networkId, bool isConnected) override; /* persistent channels */ @@ -87,8 +87,8 @@ public slots: /* Buffer handling */ BufferInfo bufferInfo(UserId user, const NetworkId& networkId, BufferInfo::Type type, const QString& buffer = "", bool create = true) override; BufferInfo getBufferInfo(UserId user, const BufferId& bufferId) override; - QList requestBuffers(UserId user) override; - QList requestBufferIdsForNetwork(UserId user, NetworkId networkId) override; + std::vector requestBuffers(UserId user) override; + std::vector requestBufferIdsForNetwork(UserId user, NetworkId networkId) override; bool removeBuffer(const UserId& user, const BufferId& bufferId) override; bool renameBuffer(const UserId& user, const BufferId& bufferId, const QString& newName) override; bool mergeBuffersPermanently(const UserId& user, const BufferId& bufferId1, const BufferId& bufferId2) override; @@ -108,21 +108,21 @@ public slots: /* Message handling */ bool logMessage(Message& msg) override; bool logMessages(MessageList& msgs) override; - QList requestMsgs(UserId user, BufferId bufferId, MsgId first = -1, MsgId last = -1, int limit = -1) override; - QList requestMsgsFiltered(UserId user, - BufferId bufferId, - MsgId first = -1, - MsgId last = -1, - int limit = -1, - Message::Types type = Message::Types{-1}, - Message::Flags flags = Message::Flags{-1}) override; - QList requestAllMsgs(UserId user, MsgId first = -1, MsgId last = -1, int limit = -1) override; - QList requestAllMsgsFiltered(UserId user, - MsgId first = -1, - MsgId last = -1, - int limit = -1, - Message::Types type = Message::Types{-1}, - Message::Flags flags = Message::Flags{-1}) override; + std::vector requestMsgs(UserId user, BufferId bufferId, MsgId first = -1, MsgId last = -1, int limit = -1) override; + std::vector requestMsgsFiltered(UserId user, + BufferId bufferId, + MsgId first = -1, + MsgId last = -1, + int limit = -1, + Message::Types type = Message::Types{-1}, + Message::Flags flags = Message::Flags{-1}) override; + std::vector requestAllMsgs(UserId user, MsgId first = -1, MsgId last = -1, int limit = -1) override; + std::vector requestAllMsgsFiltered(UserId user, + MsgId first = -1, + MsgId last = -1, + int limit = -1, + Message::Types type = Message::Types{-1}, + Message::Flags flags = Message::Flags{-1}) override; /* Sysident handling */ QMap getAllAuthUserNames() override; diff --git a/src/core/sqlitestorage.cpp b/src/core/sqlitestorage.cpp index a456d813..1a75713a 100644 --- a/src/core/sqlitestorage.cpp +++ b/src/core/sqlitestorage.cpp @@ -650,9 +650,9 @@ void SqliteStorage::removeIdentity(UserId user, IdentityId identityId) unlock(); } -QList SqliteStorage::identities(UserId user) +std::vector SqliteStorage::identities(UserId user) { - QList identities; + std::vector identities; QSqlDatabase db = logDb(); db.transaction(); @@ -699,8 +699,8 @@ QList SqliteStorage::identities(UserId user) while (nickQuery.next()) { nicks << nickQuery.value(0).toString(); } - identity.setNicks(nicks); - identities << identity; + identity.setNicks(std::move(nicks)); + identities.push_back(std::move(identity)); } db.commit(); } @@ -938,9 +938,9 @@ bool SqliteStorage::removeNetwork(UserId user, const NetworkId& networkId) return true; } -QList SqliteStorage::networks(UserId user) +std::vector SqliteStorage::networks(UserId user) { - QList nets; + std::vector nets; QSqlDatabase db = logDb(); db.transaction(); @@ -1008,7 +1008,7 @@ QList SqliteStorage::networks(UserId user) servers << server; } net.serverList = servers; - nets << net; + nets.push_back(std::move(net)); } } } @@ -1018,9 +1018,9 @@ QList SqliteStorage::networks(UserId user) return nets; } -QList SqliteStorage::connectedNetworks(UserId user) +std::vector SqliteStorage::connectedNetworks(UserId user) { - QList connectedNets; + std::vector connectedNets; QSqlDatabase db = logDb(); db.transaction(); @@ -1034,7 +1034,7 @@ QList SqliteStorage::connectedNetworks(UserId user) watchQuery(query); while (query.next()) { - connectedNets << query.value(0).toInt(); + connectedNets.emplace_back(query.value(0).toInt()); } db.commit(); } @@ -1295,9 +1295,9 @@ BufferInfo SqliteStorage::getBufferInfo(UserId user, const BufferId& bufferId) return bufferInfo; } -QList SqliteStorage::requestBuffers(UserId user) +std::vector SqliteStorage::requestBuffers(UserId user) { - QList bufferlist; + std::vector bufferlist; QSqlDatabase db = logDb(); db.transaction(); @@ -1311,11 +1311,11 @@ QList SqliteStorage::requestBuffers(UserId user) safeExec(query); watchQuery(query); while (query.next()) { - bufferlist << BufferInfo(query.value(0).toInt(), - query.value(1).toInt(), - (BufferInfo::Type)query.value(2).toInt(), - query.value(3).toInt(), - query.value(4).toString()); + bufferlist.emplace_back(query.value(0).toInt(), + query.value(1).toInt(), + (BufferInfo::Type)query.value(2).toInt(), + query.value(3).toInt(), + query.value(4).toString()); } db.commit(); } @@ -1324,9 +1324,9 @@ QList SqliteStorage::requestBuffers(UserId user) return bufferlist; } -QList SqliteStorage::requestBufferIdsForNetwork(UserId user, NetworkId networkId) +std::vector SqliteStorage::requestBufferIdsForNetwork(UserId user, NetworkId networkId) { - QList bufferList; + std::vector bufferList; QSqlDatabase db = logDb(); db.transaction(); @@ -1341,7 +1341,7 @@ QList SqliteStorage::requestBufferIdsForNetwork(UserId user, NetworkId safeExec(query); watchQuery(query); while (query.next()) { - bufferList << BufferId(query.value(0).toInt()); + bufferList.emplace_back(query.value(0).toInt()); } db.commit(); } @@ -1897,9 +1897,9 @@ bool SqliteStorage::logMessages(MessageList& msgs) return !error; } -QList SqliteStorage::requestMsgs(UserId user, BufferId bufferId, MsgId first, MsgId last, int limit) +std::vector SqliteStorage::requestMsgs(UserId user, BufferId bufferId, MsgId first, MsgId last, int limit) { - QList messagelist; + std::vector messagelist; QSqlDatabase db = logDb(); db.transaction(); @@ -1966,7 +1966,7 @@ QList SqliteStorage::requestMsgs(UserId user, BufferId bufferId, MsgId query.value(7).toString(), (Message::Flags)query.value(3).toInt()); msg.setMsgId(query.value(0).toLongLong()); - messagelist << msg; + messagelist.push_back(std::move(msg)); } } db.commit(); @@ -1975,10 +1975,10 @@ QList SqliteStorage::requestMsgs(UserId user, BufferId bufferId, MsgId return messagelist; } -QList SqliteStorage::requestMsgsFiltered( +std::vector SqliteStorage::requestMsgsFiltered( UserId user, BufferId bufferId, MsgId first, MsgId last, int limit, Message::Types type, Message::Flags flags) { - QList messagelist; + std::vector messagelist; QSqlDatabase db = logDb(); db.transaction(); @@ -2050,7 +2050,7 @@ QList SqliteStorage::requestMsgsFiltered( query.value(7).toString(), Message::Flags{query.value(3).toInt()}); msg.setMsgId(query.value(0).toLongLong()); - messagelist << msg; + messagelist.push_back(std::move(msg)); } } db.commit(); @@ -2059,9 +2059,9 @@ QList SqliteStorage::requestMsgsFiltered( return messagelist; } -QList SqliteStorage::requestAllMsgs(UserId user, MsgId first, MsgId last, int limit) +std::vector SqliteStorage::requestAllMsgs(UserId user, MsgId first, MsgId last, int limit) { - QList messagelist; + std::vector messagelist; QSqlDatabase db = logDb(); db.transaction(); @@ -2113,7 +2113,7 @@ QList SqliteStorage::requestAllMsgs(UserId user, MsgId first, MsgId las query.value(8).toString(), (Message::Flags)query.value(4).toInt()); msg.setMsgId(query.value(0).toLongLong()); - messagelist << msg; + messagelist.push_back(std::move(msg)); } } db.commit(); @@ -2121,9 +2121,9 @@ QList SqliteStorage::requestAllMsgs(UserId user, MsgId first, MsgId las return messagelist; } -QList SqliteStorage::requestAllMsgsFiltered(UserId user, MsgId first, MsgId last, int limit, Message::Types type, Message::Flags flags) +std::vector SqliteStorage::requestAllMsgsFiltered(UserId user, MsgId first, MsgId last, int limit, Message::Types type, Message::Flags flags) { - QList messagelist; + std::vector messagelist; QSqlDatabase db = logDb(); db.transaction(); @@ -2180,7 +2180,7 @@ QList SqliteStorage::requestAllMsgsFiltered(UserId user, MsgId first, M query.value(8).toString(), Message::Flags{query.value(4).toInt()}); msg.setMsgId(query.value(0).toLongLong()); - messagelist << msg; + messagelist.push_back(std::move(msg)); } } db.commit(); diff --git a/src/core/sqlitestorage.h b/src/core/sqlitestorage.h index 618d5dd0..30617a87 100644 --- a/src/core/sqlitestorage.h +++ b/src/core/sqlitestorage.h @@ -67,14 +67,14 @@ public slots: IdentityId createIdentity(UserId user, CoreIdentity& identity) override; bool updateIdentity(UserId user, const CoreIdentity& identity) override; void removeIdentity(UserId user, IdentityId identityId) override; - QList identities(UserId user) override; + std::vector identities(UserId user) override; /* Network handling */ NetworkId createNetwork(UserId user, const NetworkInfo& info) override; bool updateNetwork(UserId user, const NetworkInfo& info) override; bool removeNetwork(UserId user, const NetworkId& networkId) override; - QList networks(UserId user) override; - QList connectedNetworks(UserId user) override; + std::vector networks(UserId user) override; + std::vector connectedNetworks(UserId user) override; void setNetworkConnected(UserId user, const NetworkId& networkId, bool isConnected) override; /* persistent channels */ @@ -91,8 +91,8 @@ public slots: /* Buffer handling */ BufferInfo bufferInfo(UserId user, const NetworkId& networkId, BufferInfo::Type type, const QString& buffer = "", bool create = true) override; BufferInfo getBufferInfo(UserId user, const BufferId& bufferId) override; - QList requestBuffers(UserId user) override; - QList requestBufferIdsForNetwork(UserId user, NetworkId networkId) override; + std::vector requestBuffers(UserId user) override; + std::vector requestBufferIdsForNetwork(UserId user, NetworkId networkId) override; bool removeBuffer(const UserId& user, const BufferId& bufferId) override; bool renameBuffer(const UserId& user, const BufferId& bufferId, const QString& newName) override; bool mergeBuffersPermanently(const UserId& user, const BufferId& bufferId1, const BufferId& bufferId2) override; @@ -112,21 +112,21 @@ public slots: /* Message handling */ bool logMessage(Message& msg) override; bool logMessages(MessageList& msgs) override; - QList requestMsgs(UserId user, BufferId bufferId, MsgId first = -1, MsgId last = -1, int limit = -1) override; - QList requestMsgsFiltered(UserId user, - BufferId bufferId, - MsgId first = -1, - MsgId last = -1, - int limit = -1, - Message::Types type = Message::Types{-1}, - Message::Flags flags = Message::Flags{-1}) override; - QList requestAllMsgs(UserId user, MsgId first = -1, MsgId last = -1, int limit = -1) override; - QList requestAllMsgsFiltered(UserId user, - MsgId first = -1, - MsgId last = -1, - int limit = -1, - Message::Types type = Message::Types{-1}, - Message::Flags flags = Message::Flags{-1}) override; + std::vector requestMsgs(UserId user, BufferId bufferId, MsgId first = -1, MsgId last = -1, int limit = -1) override; + std::vector requestMsgsFiltered(UserId user, + BufferId bufferId, + MsgId first = -1, + MsgId last = -1, + int limit = -1, + Message::Types type = Message::Types{-1}, + Message::Flags flags = Message::Flags{-1}) override; + std::vector requestAllMsgs(UserId user, MsgId first = -1, MsgId last = -1, int limit = -1) override; + std::vector requestAllMsgsFiltered(UserId user, + MsgId first = -1, + MsgId last = -1, + int limit = -1, + Message::Types type = Message::Types{-1}, + Message::Flags flags = Message::Flags{-1}) override; /* Sysident handling */ QMap getAllAuthUserNames() override; diff --git a/src/core/storage.h b/src/core/storage.h index c14ba20b..4fdc848e 100644 --- a/src/core/storage.h +++ b/src/core/storage.h @@ -20,7 +20,8 @@ #pragma once -#include +#include + #include #include #include @@ -199,7 +200,7 @@ public slots: virtual IdentityId createIdentity(UserId user, CoreIdentity& identity) = 0; virtual bool updateIdentity(UserId user, const CoreIdentity& identity) = 0; virtual void removeIdentity(UserId user, IdentityId identityId) = 0; - virtual QList identities(UserId user) = 0; + virtual std::vector identities(UserId user) = 0; /* Network handling */ @@ -233,7 +234,7 @@ public slots: * \param user The core user * \return QList. */ - virtual QList networks(UserId user) = 0; + virtual std::vector networks(UserId user) = 0; //! Get a list of Networks to restore /** Return a list of networks the user was connected at the time of core shutdown @@ -241,7 +242,7 @@ public slots: * * \param user The User Id in question */ - virtual QList connectedNetworks(UserId user) = 0; + virtual std::vector connectedNetworks(UserId user) = 0; //! Update the connected state of a network /** \note This method is threadsafe @@ -340,7 +341,7 @@ public slots: * \param user The user whose buffers we request * \return A list of the BufferInfos for all buffers as requested */ - virtual QList requestBuffers(UserId user) = 0; + virtual std::vector requestBuffers(UserId user) = 0; //! Request a list of BufferIds for a given NetworkId /** \note This method is threadsafe. @@ -349,7 +350,7 @@ public slots: * \param networkId The NetworkId of the network in question * \return List of BufferIds belonging to the Network */ - virtual QList requestBufferIdsForNetwork(UserId user, NetworkId networkId) = 0; + virtual std::vector requestBufferIdsForNetwork(UserId user, NetworkId networkId) = 0; //! Remove permanently a buffer and it's content from the storage backend /** This call cannot be reverted! @@ -503,7 +504,7 @@ public slots: * \param limit if != -1 limit the returned list to a max of \limit entries * \return The requested list of messages */ - virtual QList requestMsgs(UserId user, BufferId bufferId, MsgId first = -1, MsgId last = -1, int limit = -1) = 0; + virtual std::vector requestMsgs(UserId user, BufferId bufferId, MsgId first = -1, MsgId last = -1, int limit = -1) = 0; //! Request a certain number messages stored in a given buffer, matching certain filters /** \param buffer The buffer we request messages from @@ -513,14 +514,13 @@ public slots: * \param type The Message::Types that should be returned * \return The requested list of messages */ - virtual QList requestMsgsFiltered(UserId user, - BufferId bufferId, - MsgId first = -1, - MsgId last = -1, - int limit = -1, - Message::Types type = Message::Types{-1}, - Message::Flags flags = Message::Flags{-1}) - = 0; + virtual std::vector requestMsgsFiltered(UserId user, + BufferId bufferId, + MsgId first = -1, + MsgId last = -1, + int limit = -1, + Message::Types type = Message::Types{-1}, + Message::Flags flags = Message::Flags{-1}) = 0; //! Request a certain number of messages across all buffers /** \param first if != -1 return only messages with a MsgId >= first @@ -528,7 +528,7 @@ public slots: * \param limit Max amount of messages * \return The requested list of messages */ - virtual QList requestAllMsgs(UserId user, MsgId first = -1, MsgId last = -1, int limit = -1) = 0; + virtual std::vector requestAllMsgs(UserId user, MsgId first = -1, MsgId last = -1, int limit = -1) = 0; //! Request a certain number of messages across all buffers, matching certain filters /** \param first if != -1 return only messages with a MsgId >= first @@ -537,13 +537,12 @@ public slots: * \param type The Message::Types that should be returned * \return The requested list of messages */ - virtual QList requestAllMsgsFiltered(UserId user, - MsgId first = -1, - MsgId last = -1, - int limit = -1, - Message::Types type = Message::Types{-1}, - Message::Flags flags = Message::Flags{-1}) - = 0; + virtual std::vector requestAllMsgsFiltered(UserId user, + MsgId first = -1, + MsgId last = -1, + int limit = -1, + Message::Types type = Message::Types{-1}, + Message::Flags flags = Message::Flags{-1}) = 0; //! Fetch all authusernames /** \return Map of all current UserIds to permitted idents