core: port tag-list to C++

Also adds a new test, which tests merging of two tag-lists.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
Berthold Stoeger 2024-05-29 17:57:48 +02:00 committed by bstoeger
parent 640ecb345b
commit f18acf6fb9
25 changed files with 195 additions and 227 deletions

View file

@ -1501,8 +1501,8 @@ struct DiveGuideVariable : public StatsVariableTemplate<StatsVariable::Type::Dis
struct TagBinner : public StringBinner<TagBinner, StringBin> {
std::vector<QString> to_bin_values(const dive *d) const {
std::vector<QString> tags;
for (const tag_entry *tag = d->tag_list; tag; tag = tag->next)
tags.push_back(QString::fromStdString(tag->tag->name).trimmed());
for (const divetag *tag: d->tags)
tags.push_back(QString::fromStdString(tag->name).trimmed());
return tags;
}
};
@ -1513,7 +1513,7 @@ struct TagVariable : public StatsVariableTemplate<StatsVariable::Type::Discrete>
return StatsTranslations::tr("Tags");
}
QString diveCategories(const dive *d) const override {
return QString::fromStdString(taglist_get_tagstring(d->tag_list));
return QString::fromStdString(taglist_get_tagstring(d->tags));
}
std::vector<const StatsBinner *> binners() const override {
return { &tag_binner };