6
#include <celutil/logger.h>
8
#include <celutil/gettext.h>
9
#include <celutil/greek.h>
10
#include <celutil/utf8.h>
13
NameDatabase::add(const AstroCatalog::IndexNumber catalogNumber, std::string_view name)
19
if (AstroCatalog::IndexNumber tmp = getCatalogNumberByName(name, false); tmp != AstroCatalog::InvalidIndex)
20
celestia::util::GetLogger()->debug("Duplicated name '{}' on object with catalog numbers: {} and {}\n", name, tmp, catalogNumber);
23
std::string fname = ReplaceGreekLetterAbbr(name);
24
nameIndex[fname] = catalogNumber;
27
std::string_view lname = D_(fname.c_str());
29
localizedNameIndex[std::string(lname)] = catalogNumber;
32
numberIndex.emplace(catalogNumber, std::move(fname));
35
void NameDatabase::erase(const AstroCatalog::IndexNumber catalogNumber)
37
numberIndex.erase(catalogNumber);
40
AstroCatalog::IndexNumber
41
NameDatabase::getCatalogNumberByName(std::string_view name, [[maybe_unused]] bool i18n) const
43
if (auto iter = nameIndex.find(name); iter != nameIndex.end())
49
if (auto iter = localizedNameIndex.find(name); iter != localizedNameIndex.end())
54
if (auto replacedGreek = ReplaceGreekLetterAbbr(name); replacedGreek != name)
55
return getCatalogNumberByName(replacedGreek, i18n);
57
return AstroCatalog::InvalidIndex;
68
NameDatabase::NumberIndex::const_iterator
69
NameDatabase::getFirstNameIter(const AstroCatalog::IndexNumber catalogNumber) const
71
auto iter = numberIndex.lower_bound(catalogNumber);
72
if (iter == numberIndex.end() || iter->first != catalogNumber)
73
return getFinalNameIter();
78
NameDatabase::NumberIndex::const_iterator
79
NameDatabase::getFinalNameIter() const
81
return numberIndex.end();
85
NameDatabase::getCompletion(std::vector<std::string>& completion, std::string_view name) const
87
std::string name2 = ReplaceGreekLetter(name);
88
for (const auto &[n, _] : nameIndex)
90
if (UTF8StartsWith(n, name2, true))
91
completion.push_back(n);
95
for (const auto &[n, _] : localizedNameIndex)
97
if (UTF8StartsWith(n, name2, true))
98
completion.push_back(n);