#pragma once #include #include #include class GameDatabase { public: GameDatabase() = default; static bool compareById(const GameObject &a, const GameObject &b) { return a.id > b.id; } std::vector datab; int is_indb(ObjectId id) { for (unsigned int i = 0; i < datab.size(); i++) { if (datab[i].id == id) return i; } return -1; } /// вставляет в базу объект с именем [name] и позицией [x, y] /// если объект с таким id в базе уже есть, заменяет его новым void Insert(ObjectId id, string name, size_t x, size_t y) { int id_ = is_indb(id); if (id_ == -1) datab.push_back({id, name, x, y}); else datab[id_] = {id, name, x, y}; } /// удаляет элемент по id /// если такого элемента нет, ничего не делает void Remove(ObjectId id) { int id_ = is_indb(id); if (id_ != -1) datab.erase(datab.begin() + id_); } /// возвращает вектор объектов c именем [name] /// сортировка по убыванию id vector DataByName(string name) const { vector base; for (auto e : datab) if (e.name == name) base.push_back(e); std::sort(base.begin(), base.end(), compareById); return base; } /// возвращает вектор объектов, находящихся в позиции [x, y] /// сортировка по убыванию id vector DataByPosition(size_t x, size_t y) const { vector base; for (auto e : datab) if (e.x == x && e.y == y) base.push_back(e); std::sort(base.begin(), base.end(), compareById); return base; } /// возвращает вектор всех объектов из базы /// сортировка по убыванию id vector Data() const { vector base = datab; std::sort(base.begin(), base.end(), compareById); return base; } };