You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
946 B
C++
54 lines
946 B
C++
8 years ago
|
#ifndef FIFO_CACHE_POLICY_HPP
|
||
|
#define FIFO_CACHE_POLICY_HPP
|
||
|
|
||
|
#include <list>
|
||
|
#include "cache_policy.hpp"
|
||
|
|
||
|
namespace caches
|
||
|
{
|
||
|
|
||
|
template <typename Key>
|
||
|
class FIFOCachePolicy : public ICachePolicy<Key>
|
||
|
{
|
||
|
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<Key> fifo_queue;
|
||
|
};
|
||
|
} // namespace caches
|
||
|
|
||
|
#endif // FIFO_CACHE_POLICY_HPP
|