#pragma once #include #include #include #include #include #include namespace secsgem::gem { enum class ProcessProgramAck : uint8_t { Accept = 0, PermissionNotGranted = 1, LengthError = 2, MatrixOverflow = 3, PpidNotFound = 4, ModeUnsupported = 5, PerformanceError = 6, }; class RecipeStore { public: void add(std::string ppid, std::string body) { by_ppid_.insert_or_assign(std::move(ppid), std::move(body)); } std::optional get(const std::string& ppid) const { auto it = by_ppid_.find(ppid); if (it == by_ppid_.end()) return std::nullopt; return it->second; } std::vector list() const { std::vector out; out.reserve(by_ppid_.size()); for (const auto& [k, _] : by_ppid_) out.push_back(k); return out; } ProcessProgramAck remove(const std::string& ppid) { if (!by_ppid_.count(ppid)) return ProcessProgramAck::PpidNotFound; by_ppid_.erase(ppid); return ProcessProgramAck::Accept; } std::size_t size() const { return by_ppid_.size(); } private: std::map by_ppid_; }; } // namespace secsgem::gem