template class Poco::LRUStrategy

Overview

An LRUStrategy implements least recently used cache replacement. Moreā€¦

#include <LRUStrategy.h>

template <
    class TKey,
    class TValue
    >
class LRUStrategy: public Poco::AbstractStrategy
{
public:
    // typedefs

    typedef std::list<TKey> Keys;
    typedef Keys::iterator Iterator;
    typedef Keys::const_iterator ConstIterator;
    typedef std::map<TKey, Iterator> KeyIndex;
    typedef KeyIndex::iterator IndexIterator;
    typedef KeyIndex::const_iterator ConstIndexIterator;

    // construction

    LRUStrategy(std::size_t size);

    // methods

    virtual
    void
    onAdd(
        const void* pSender,
        const KeyValueArgs<TKey, TValue>& key
        );

    virtual
    void
    onRemove(
        const void* pSender,
        const TKey& key
        );

    virtual
    void
    onGet(
        const void* pSender,
        const TKey& key
        );

    virtual
    void
    onClear(
        const void* pSender,
        const EventArgs& args
        );

    virtual
    void
    onIsValid(
        const void* pSender,
        ValidArgs<TKey>& key
        );

    virtual
    void
    onReplace(
        const void* pSender,
        std::set<TKey>& elemsToRemove
        );

protected:
    // fields

    std::size_t _size;
    Keys _keys;
    KeyIndex _keyIndex;
};

Inherited Members

public:
    // methods

    virtual
    void
    onUpdate(
        const void* pSender,
        const KeyValueArgs<TKey, TValue>& args
        );

    virtual
    void
    onAdd(
        const void* pSender,
        const KeyValueArgs<TKey, TValue>& key
        ) = 0;

    virtual
    void
    onRemove(
        const void* pSender,
        const TKey& key
        ) = 0;

    virtual
    void
    onGet(
        const void* pSender,
        const TKey& key
        ) = 0;

    virtual
    void
    onClear(
        const void* pSender,
        const EventArgs& args
        ) = 0;

    virtual
    void
    onIsValid(
        const void* pSender,
        ValidArgs<TKey>& key
        ) = 0;

    virtual
    void
    onReplace(
        const void* pSender,
        std::set<TKey>& elemsToRemove
        ) = 0;

Detailed Documentation

An LRUStrategy implements least recently used cache replacement.

Fields

std::size_t _size

Number of keys the cache can store.

KeyIndex _keyIndex

For faster access to _keys.

Methods

virtual
void
onAdd(
    const void* pSender,
    const KeyValueArgs<TKey, TValue>& key
    )

Adds the key to the strategy.

If for the key already an entry exists, an exception will be thrown.

virtual
void
onRemove(
    const void* pSender,
    const TKey& key
    )

Removes an entry from the strategy.

If the entry is not found the remove is ignored.

virtual
void
onGet(
    const void* pSender,
    const TKey& key
    )

Informs the strategy that a read-access happens to an element.

virtual
void
onClear(
    const void* pSender,
    const EventArgs& args
    )

Removes all elements from the cache.

virtual
void
onIsValid(
    const void* pSender,
    ValidArgs<TKey>& key
    )

Used to query if a key is still valid (i.e. cached).

virtual
void
onReplace(
    const void* pSender,
    std::set<TKey>& elemsToRemove
    )

Used by the Strategy to indicate which elements should be removed from the cache.

Note that onReplace does not change the current list of keys. The cache object is reponsible to remove the elements.