#pragma once #include #include #include 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); } T *getEntry(int index) { if (index >= 0 && index < mEntries.size()) { return next(mEntries.begin(), index)->second.get(); } return nullptr; } const T &getEntryRef(int index) { if (index >= 0 && index < mEntries.size()) { auto i = next(mEntries.begin(), index); return *i->second; } else { throw "SPITObject index out of range"; } } 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; } i = mEntries.erase(i); return true; } int getEntryCount() { return mEntries.size(); } unordered_map> &getRepo() { return mEntries; } void clearEntries() { mEntries.clear(); } private: unordered_map> mEntries; };