#ifndef FIFO_CACHE_POLICY_HPP #define FIFO_CACHE_POLICY_HPP #include #include "cache_policy.hpp" namespace caches { template class FIFOCachePolicy : public ICachePolicy { public: FIFOCachePolicy() = default; ~FIFOCachePolicy() = default; void Insert(const Key& key) override { fifo_queue.emplace_front(key); } // handle request to the key-element in a cache void Touch(const Key& key) override { // nothing to do here in the FIFO strategy } // handle element deletion from a cache void Erase(const Key& key) override { fifo_queue.pop_back(); } // return a key of a replacement candidate const Key& ReplCandidate() const override { return fifo_queue.back(); } // return a key of a displacement candidate void Clear() override { fifo_queue.clear(); } private: std::list fifo_queue; }; } // namespace caches #endif // FIFO_CACHE_POLICY_HPP