#ifndef COCKATRICE_ARROW_REGISTRY_H #define COCKATRICE_ARROW_REGISTRY_H #include "board/arrow_data.h" #include #include #include class ArrowItem; struct ArrowKey { int creatorId; int arrowId; bool operator<(const ArrowKey &other) const { if (creatorId != other.creatorId) { return creatorId < other.creatorId; } return arrowId < other.arrowId; } }; class ArrowRegistry { public: void insert(QSharedPointer data, ArrowItem *arrow); ArrowItem *take(int creatorId, int arrowId); [[nodiscard]] ArrowItem *get(int creatorId, int arrowId) const; [[nodiscard]] bool contains(int creatorId, int arrowId) const; [[nodiscard]] QSet idsForPlayer(int playerId) const; [[nodiscard]] QList all() const; private: QMap> dataStore; QMap items; QMap> byPlayer; }; #endif