unordered

This commit is contained in:
David Markowitz 2023-07-25 22:28:24 -07:00
parent 4a189edf43
commit 6f2d583ca2
2 changed files with 5 additions and 18 deletions

View File

@ -1,19 +1,8 @@
#include "CDRebuildComponentTable.h" #include "CDRebuildComponentTable.h"
void CDRebuildComponentTable::LoadValuesFromDatabase() { void CDRebuildComponentTable::LoadValuesFromDatabase() {
// First, get the size of the table
unsigned int size = 0;
auto tableSize = CDClientDatabase::ExecuteQuery("SELECT COUNT(*) FROM RebuildComponent");
while (!tableSize.eof()) {
size = tableSize.getIntField(0, 0);
tableSize.nextRow();
}
this->entries.reserve(size);
// Now get the data // Now get the data
auto tableData = CDClientDatabase::ExecuteQuery("SELECT * FROM RebuildComponent order by id"); auto tableData = CDClientDatabase::ExecuteQuery("SELECT * FROM RebuildComponent");
while (!tableData.eof()) { while (!tableData.eof()) {
CDRebuildComponent entry; CDRebuildComponent entry;
uint32_t id = tableData.getIntField("id", -1); uint32_t id = tableData.getIntField("id", -1);
@ -27,14 +16,12 @@ void CDRebuildComponentTable::LoadValuesFromDatabase() {
entry.post_imagination_cost = tableData.getIntField("post_imagination_cost", -1); entry.post_imagination_cost = tableData.getIntField("post_imagination_cost", -1);
entry.time_before_smash = tableData.getFloatField("time_before_smash", -1.0f); entry.time_before_smash = tableData.getFloatField("time_before_smash", -1.0f);
this->entries.push_back(std::make_pair(id, entry)); this->entries.insert_or_assign(id, entry);
tableData.nextRow(); tableData.nextRow();
} }
} }
const std::optional<CDRebuildComponent> CDRebuildComponentTable::Get(uint32_t componentId) { const std::optional<CDRebuildComponent> CDRebuildComponentTable::Get(uint32_t componentId) {
auto result = std::lower_bound(this->entries.begin(), this->entries.end(), componentId, [](const auto& entry, const auto& componentId) { auto it = this->entries.find(componentId);
return entry.first < componentId; return it != this->entries.end() ? std::make_optional(it->second) : std::nullopt;
});
return result == this->entries.end() ? std::nullopt : std::make_optional(result->second);
} }

View File

@ -17,7 +17,7 @@ struct CDRebuildComponent {
class CDRebuildComponentTable : public CDTable<CDRebuildComponentTable> { class CDRebuildComponentTable : public CDTable<CDRebuildComponentTable> {
private: private:
std::vector<std::pair<uint32_t, CDRebuildComponent>> entries; std::unordered_map<uint32_t, CDRebuildComponent> entries;
public: public:
void LoadValuesFromDatabase(); void LoadValuesFromDatabase();