summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikaël Capelle <capelle.mikael@gmail.com>2020-05-27 22:45:42 +0200
committerMikaël Capelle <capelle.mikael@gmail.com>2020-05-27 22:45:42 +0200
commit700c5fb16c1c4e39fd757998e95ead4a25ecc6da (patch)
tree723e3c3b9d6b72d3fc69b27632adf6e750169eb7
parent6f22a77cdac588abcb60ac4c45d795b74872c626 (diff)
Store contents as a set instead of a vector.
-rw-r--r--src/modinfo.h2
-rw-r--r--src/modinforegular.cpp5
-rw-r--r--src/modinforegular.h2
-rw-r--r--src/modinfowithconflictinfo.cpp2
-rw-r--r--src/modinfowithconflictinfo.h7
-rw-r--r--src/modlist.cpp11
-rw-r--r--src/modlist.h6
7 files changed, 17 insertions, 18 deletions
diff --git a/src/modinfo.h b/src/modinfo.h
index 5f2d7ba7..a6c8ea65 100644
--- a/src/modinfo.h
+++ b/src/modinfo.h
@@ -521,7 +521,7 @@ public:
/**
* @return a list of content types contained in a mod
*/
- virtual const std::vector<int>& getContents() const = 0;
+ virtual const std::set<int>& getContents() const = 0;
/**
* @brief test if the specified flag is set for this mod
diff --git a/src/modinforegular.cpp b/src/modinforegular.cpp
index 8ad7ffe5..8ef8e007 100644
--- a/src/modinforegular.cpp
+++ b/src/modinforegular.cpp
@@ -653,12 +653,13 @@ std::vector<ModInfo::EFlag> ModInfoRegular::getFlags() const
}
-std::vector<int> ModInfoRegular::doGetContents() const
+std::set<int> ModInfoRegular::doGetContents() const
{
ModDataContent* contentFeature = m_GamePlugin->feature<ModDataContent>();
if (contentFeature) {
- return contentFeature->getContentsFor(contentFileTree());
+ auto result = contentFeature->getContentsFor(contentFileTree());
+ return std::set<int>(std::begin(result), std::end(result));
}
return {};
diff --git a/src/modinforegular.h b/src/modinforegular.h
index b09dcd98..7e70631e 100644
--- a/src/modinforegular.h
+++ b/src/modinforegular.h
@@ -416,7 +416,7 @@ private slots:
protected:
- virtual std::vector<int> doGetContents() const override;
+ virtual std::set<int> doGetContents() const override;
ModInfoRegular(PluginContainer *pluginContainer, const MOBase::IPluginGame *game, const QDir &path, MOShared::DirectoryEntry **directoryStructure);
diff --git a/src/modinfowithconflictinfo.cpp b/src/modinfowithconflictinfo.cpp
index 14b341d2..227ee12e 100644
--- a/src/modinfowithconflictinfo.cpp
+++ b/src/modinfowithconflictinfo.cpp
@@ -331,7 +331,7 @@ bool ModInfoWithConflictInfo::isValid() const {
return m_Valid.value();
}
-const std::vector<int>& ModInfoWithConflictInfo::getContents() const {
+const std::set<int>& ModInfoWithConflictInfo::getContents() const {
return m_Contents.value();
}
diff --git a/src/modinfowithconflictinfo.h b/src/modinfowithconflictinfo.h
index b66a7444..7109b83d 100644
--- a/src/modinfowithconflictinfo.h
+++ b/src/modinfowithconflictinfo.h
@@ -6,6 +6,7 @@
#include "thread_utils.h"
#include "modinfo.h"
+#include <set>
#include <QTime>
class ModInfoWithConflictInfo : public ModInfo
@@ -24,7 +25,7 @@ public:
/**
* @return a list of content types contained in a mod
*/
- virtual const std::vector<int>& getContents() const override;
+ virtual const std::set<int>& getContents() const override;
/**
* @brief Test if the mod contains the specified content.
@@ -75,7 +76,7 @@ protected:
*
* @return the contents for this mod.
**/
- virtual std::vector<int> doGetContents() const { return {}; }
+ virtual std::set<int> doGetContents() const { return {}; }
/**
* @brief Retrieve a file tree corresponding to the underlying disk content
@@ -146,7 +147,7 @@ private:
MOShared::MemoizedLocked<std::shared_ptr<const MOBase::IFileTree>> m_FileTree;
MOShared::MemoizedLocked<bool> m_Valid;
- MOShared::MemoizedLocked<std::vector<int>> m_Contents;
+ MOShared::MemoizedLocked<std::set<int>> m_Contents;
MOShared::DirectoryEntry **m_DirectoryStructure;
diff --git a/src/modlist.cpp b/src/modlist.cpp
index 7fa63b54..614588db 100644
--- a/src/modlist.cpp
+++ b/src/modlist.cpp
@@ -178,13 +178,12 @@ QString ModList::getConflictFlagText(ModInfo::EConflictFlag flag, ModInfo::Ptr m
}
-QVariantList ModList::contentsToIcons(const std::vector<int> &contents) const
+QVariantList ModList::contentsToIcons(const std::set<int> &contents) const
{
QVariantList result;
- std::set<int> contentsSet(contents.begin(), contents.end());
for (auto &content: m_Organizer->modDataContents()) {
if (!content.isOnlyForFilter()) {
- if (contentsSet.find(content.id()) != contentsSet.end()) {
+ if (contents.find(content.id()) != contents.end()) {
result.append(content.icon());
}
else {
@@ -195,13 +194,11 @@ QVariantList ModList::contentsToIcons(const std::vector<int> &contents) const
return result;
}
-QString ModList::contentsToToolTip(const std::vector<int> &contents) const
+QString ModList::contentsToToolTip(const std::set<int> &contents) const
{
QString result("<table cellspacing=7>");
-
- std::set<int> contentsSet(contents.begin(), contents.end());
for (auto& content : m_Organizer->modDataContents()) {
- if (!content.isOnlyForFilter() && contentsSet.find(content.id()) != contentsSet.end()) {
+ if (!content.isOnlyForFilter() && contents.find(content.id()) != contents.end()) {
result.append(QString("<tr><td><img src=\"%1\" width=32/></td>"
"<td valign=\"middle\">%2</td></tr>")
.arg(content.icon()).arg(content.name()));
diff --git a/src/modlist.h b/src/modlist.h
index 4e2e86d2..8c29300d 100644
--- a/src/modlist.h
+++ b/src/modlist.h
@@ -79,7 +79,7 @@ public:
* @brief constructor
* @todo ensure this view works without a profile set, otherwise there are intransparent dependencies on the initialisation order
**/
- ModList(PluginContainer *pluginContainer, OrganizerCore *parent = nullptr);
+ ModList(PluginContainer *pluginContainer, OrganizerCore *parent);
~ModList();
@@ -285,9 +285,9 @@ private:
QString getColumnToolTip(int column) const;
- QVariantList contentsToIcons(const std::vector<int> &contentIds) const;
+ QVariantList contentsToIcons(const std::set<int> &contentIds) const;
- QString contentsToToolTip(const std::vector<int> &contentsIds) const;
+ QString contentsToToolTip(const std::set<int> &contentsIds) const;
ModList::EColumn getEnabledColumn(int index) const;