#pragma once #include #include #include using namespace std; namespace spit { template class SpitRepo { public: bool hasEntry(const string &id) { return mEntries.contains(id); } T *getEntry(const string &id) { auto i = mEntries.find(id); if (i == mEntries.end()) { return nullptr; } return i->second.get(); } const T &getEntryRef(const string &id) { return *mEntries.at(id); } void addEntry(unique_ptr entry) { mEntries[entry->getID()] = move(entry); } bool removeEntry(const T &entry) { return removeEntry(entry.getID()); } bool removeEntry(const string &id) { auto i = mEntries.find(id); if (i == mEntries.end()) { return false; } mEntries.erase(i); return true; } int getSize() { return mEntries.size(); } unordered_map> &getRepo() { return mEntries; } void clearEntries() { mEntries.clear(); } private: unordered_map> mEntries; }; }