mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
core: convert taxonomy.c to C++
Since the taxonomy is now a real C++ struct with constructor and destructor, dive_site has to be converted to C++ as well. A bit hairy for now, but will ultimately be distinctly simpler. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
3c1401785b
commit
3f8b4604be
39 changed files with 259 additions and 336 deletions
59
core/taxonomy.cpp
Normal file
59
core/taxonomy.cpp
Normal file
|
@ -0,0 +1,59 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
#include "taxonomy.h"
|
||||
#include "errorhelper.h"
|
||||
#include "gettext.h"
|
||||
#include "subsurface-string.h"
|
||||
#include <algorithm>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <QtGlobal> // for QT_TRANSLATE_NOOP
|
||||
|
||||
const char *taxonomy_category_names[TC_NR_CATEGORIES] = {
|
||||
QT_TRANSLATE_NOOP("gettextFromC", "None"),
|
||||
QT_TRANSLATE_NOOP("gettextFromC", "Ocean"),
|
||||
QT_TRANSLATE_NOOP("gettextFromC", "Country"),
|
||||
QT_TRANSLATE_NOOP("gettextFromC", "State"),
|
||||
QT_TRANSLATE_NOOP("gettextFromC", "County"),
|
||||
QT_TRANSLATE_NOOP("gettextFromC", "Town"),
|
||||
QT_TRANSLATE_NOOP("gettextFromC", "City")
|
||||
};
|
||||
|
||||
// these are the names for geoname.org
|
||||
const char *taxonomy_api_names[TC_NR_CATEGORIES] = {
|
||||
"none",
|
||||
"name",
|
||||
"countryName",
|
||||
"adminName1",
|
||||
"adminName2",
|
||||
"toponymName",
|
||||
"adminName3"
|
||||
};
|
||||
|
||||
std::string taxonomy_get_value(const taxonomy_data &t, enum taxonomy_category cat)
|
||||
{
|
||||
auto it = std::find_if(t.begin(), t.end(), [cat] (const taxonomy &tax) { return tax.category == cat; });
|
||||
return it != t.end() ? it->value : std::string();
|
||||
}
|
||||
|
||||
std::string taxonomy_get_country(const taxonomy_data &t)
|
||||
{
|
||||
return taxonomy_get_value(t, TC_COUNTRY);
|
||||
}
|
||||
|
||||
void taxonomy_set_category(taxonomy_data &t, enum taxonomy_category cat, const std::string &value, enum taxonomy_origin origin)
|
||||
{
|
||||
auto it = std::find_if(t.begin(), t.end(), [cat] (const taxonomy &tax) { return tax.category == cat; });
|
||||
if (it == t.end()) {
|
||||
t.emplace_back();
|
||||
it = std::prev(t.end());
|
||||
}
|
||||
it->value = value;
|
||||
it->origin = origin;
|
||||
it->category = cat;
|
||||
}
|
||||
|
||||
void taxonomy_set_country(taxonomy_data &t, const std::string &country, enum taxonomy_origin origin)
|
||||
{
|
||||
report_info("%s: set the taxonomy country to %s\n", __func__, country.c_str());
|
||||
taxonomy_set_category(t, TC_COUNTRY, country, origin);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue