mirror of
https://github.com/pocoproject/poco.git
synced 2025-12-10 09:44:35 +01:00
added update message to caching
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
//
|
//
|
||||||
// AbstractCache.h
|
// AbstractCache.h
|
||||||
//
|
//
|
||||||
// $Id: //poco/svn/Foundation/include/Poco/AbstractCache.h#2 $
|
// $Id: //poco/Main/Foundation/include/Poco/AbstractCache.h#16 $
|
||||||
//
|
//
|
||||||
// Library: Foundation
|
// Library: Foundation
|
||||||
// Package: Cache
|
// Package: Cache
|
||||||
@@ -62,6 +62,7 @@ class AbstractCache
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
FIFOEvent<const KeyValueArgs<TKey, TValue >, TEventMutex > Add;
|
FIFOEvent<const KeyValueArgs<TKey, TValue >, TEventMutex > Add;
|
||||||
|
FIFOEvent<const KeyValueArgs<TKey, TValue >, TEventMutex > Update;
|
||||||
FIFOEvent<const TKey, TEventMutex> Remove;
|
FIFOEvent<const TKey, TEventMutex> Remove;
|
||||||
FIFOEvent<const TKey, TEventMutex> Get;
|
FIFOEvent<const TKey, TEventMutex> Get;
|
||||||
FIFOEvent<const EventArgs, TEventMutex> Clear;
|
FIFOEvent<const EventArgs, TEventMutex> Clear;
|
||||||
@@ -94,14 +95,37 @@ public:
|
|||||||
doAdd(key, val);
|
doAdd(key, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
void add(const TKey& key, SharedPtr<TValue > val)
|
void update(const TKey& key, const TValue& val)
|
||||||
/// Adds the key value pair to the cache. Note that adding a NULL SharedPtr will fail!
|
/// Adds the key value pair to the cache. Note that adding a NULL SharedPtr will fail!
|
||||||
/// If for the key already an entry exists, it will be overwritten.
|
/// If for the key already an entry exists, it will be overwritten.
|
||||||
|
/// The difference to add is that no remove or add events are thrown in this case,
|
||||||
|
/// just a simply silent update is performed
|
||||||
|
/// If the key doesnot exist the behavior is equal to add, ie. an add event is thrown
|
||||||
|
{
|
||||||
|
typename TMutex::ScopedLock lock(_mutex);
|
||||||
|
doUpdate(key, val);
|
||||||
|
}
|
||||||
|
|
||||||
|
void add(const TKey& key, SharedPtr<TValue > val)
|
||||||
|
/// Adds the key value pair to the cache. Note that adding a NULL SharedPtr will fail!
|
||||||
|
/// If for the key already an entry exists, it will be overwritten, ie. first a remove event
|
||||||
|
/// is thrown, then a add event
|
||||||
{
|
{
|
||||||
typename TMutex::ScopedLock lock(_mutex);
|
typename TMutex::ScopedLock lock(_mutex);
|
||||||
doAdd(key, val);
|
doAdd(key, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void update(const TKey& key, SharedPtr<TValue > val)
|
||||||
|
/// Adds the key value pair to the cache. Note that adding a NULL SharedPtr will fail!
|
||||||
|
/// If for the key already an entry exists, it will be overwritten.
|
||||||
|
/// The difference to add is that no remove or add events are thrown in this case,
|
||||||
|
/// just an Update is thrown
|
||||||
|
/// If the key doesnot exist the behavior is equal to add, ie. an add event is thrown
|
||||||
|
{
|
||||||
|
typename TMutex::ScopedLock lock(_mutex);
|
||||||
|
doUpdate(key, val);
|
||||||
|
}
|
||||||
|
|
||||||
void remove(const TKey& key)
|
void remove(const TKey& key)
|
||||||
/// Removes an entry from the cache. If the entry is not found,
|
/// Removes an entry from the cache. If the entry is not found,
|
||||||
/// the remove is ignored.
|
/// the remove is ignored.
|
||||||
@@ -175,6 +199,7 @@ protected:
|
|||||||
/// Sets up event registration.
|
/// Sets up event registration.
|
||||||
{
|
{
|
||||||
Add += Delegate<TStrategy, const KeyValueArgs<TKey, TValue> >(&_strategy, &TStrategy::onAdd);
|
Add += Delegate<TStrategy, const KeyValueArgs<TKey, TValue> >(&_strategy, &TStrategy::onAdd);
|
||||||
|
Update += Delegate<TStrategy, const KeyValueArgs<TKey, TValue> >(&_strategy, &TStrategy::onUpdate);
|
||||||
Remove += Delegate<TStrategy, const TKey>(&_strategy, &TStrategy::onRemove);
|
Remove += Delegate<TStrategy, const TKey>(&_strategy, &TStrategy::onRemove);
|
||||||
Get += Delegate<TStrategy, const TKey>(&_strategy, &TStrategy::onGet);
|
Get += Delegate<TStrategy, const TKey>(&_strategy, &TStrategy::onGet);
|
||||||
Clear += Delegate<TStrategy, const EventArgs>(&_strategy, &TStrategy::onClear);
|
Clear += Delegate<TStrategy, const EventArgs>(&_strategy, &TStrategy::onClear);
|
||||||
@@ -186,6 +211,7 @@ protected:
|
|||||||
/// Reverts event registration.
|
/// Reverts event registration.
|
||||||
{
|
{
|
||||||
Add -= Delegate<TStrategy, const KeyValueArgs<TKey, TValue> >(&_strategy, &TStrategy::onAdd );
|
Add -= Delegate<TStrategy, const KeyValueArgs<TKey, TValue> >(&_strategy, &TStrategy::onAdd );
|
||||||
|
Update -= Delegate<TStrategy, const KeyValueArgs<TKey, TValue> >(&_strategy, &TStrategy::onUpdate);
|
||||||
Remove -= Delegate<TStrategy, const TKey>(&_strategy, &TStrategy::onRemove);
|
Remove -= Delegate<TStrategy, const TKey>(&_strategy, &TStrategy::onRemove);
|
||||||
Get -= Delegate<TStrategy, const TKey>(&_strategy, &TStrategy::onGet);
|
Get -= Delegate<TStrategy, const TKey>(&_strategy, &TStrategy::onGet);
|
||||||
Clear -= Delegate<TStrategy, const EventArgs>(&_strategy, &TStrategy::onClear);
|
Clear -= Delegate<TStrategy, const EventArgs>(&_strategy, &TStrategy::onClear);
|
||||||
@@ -221,6 +247,44 @@ protected:
|
|||||||
doReplace();
|
doReplace();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void doUpdate(const TKey& key, const TValue& val)
|
||||||
|
/// Adds the key value pair to the cache.
|
||||||
|
/// If for the key already an entry exists, it will be overwritten.
|
||||||
|
{
|
||||||
|
KeyValueArgs<TKey, TValue> args(key, val);
|
||||||
|
Iterator it = _data.find(key);
|
||||||
|
if (it == _data.end())
|
||||||
|
{
|
||||||
|
Add.notify(this, args);
|
||||||
|
_data.insert(std::make_pair(key, SharedPtr<TValue>(new TValue(val))));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Update.notify(this, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
doReplace();
|
||||||
|
}
|
||||||
|
|
||||||
|
void doUpdate(const TKey& key, SharedPtr<TValue>& val)
|
||||||
|
/// Adds the key value pair to the cache.
|
||||||
|
/// If for the key already an entry exists, it will be overwritten.
|
||||||
|
{
|
||||||
|
KeyValueArgs<TKey, TValue> args(key, *val);
|
||||||
|
Iterator it = _data.find(key);
|
||||||
|
if (it == _data.end())
|
||||||
|
{
|
||||||
|
Add.notify(this, args);
|
||||||
|
_data.insert(std::make_pair(key, SharedPtr<TValue>(new TValue(val))));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Update.notify(this, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
doReplace();
|
||||||
|
}
|
||||||
|
|
||||||
void doRemove(Iterator it)
|
void doRemove(Iterator it)
|
||||||
/// Removes an entry from the cache. If the entry is not found
|
/// Removes an entry from the cache. If the entry is not found
|
||||||
/// the remove is ignored.
|
/// the remove is ignored.
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
//
|
//
|
||||||
// AbstractStrategy.h
|
// AbstractStrategy.h
|
||||||
//
|
//
|
||||||
// $Id: //poco/svn/Foundation/include/Poco/AbstractStrategy.h#2 $
|
// $Id: //poco/Main/Foundation/include/Poco/AbstractStrategy.h#4 $
|
||||||
//
|
//
|
||||||
// Library: Foundation
|
// Library: Foundation
|
||||||
// Package: Cache
|
// Package: Cache
|
||||||
@@ -60,10 +60,17 @@ public:
|
|||||||
virtual ~AbstractStrategy()
|
virtual ~AbstractStrategy()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual void onUpdate(const void* pSender, const KeyValueArgs <TKey, TValue>& args)
|
||||||
|
/// Updates an existing entry.
|
||||||
|
{
|
||||||
|
onRemove(pSender,args.key());
|
||||||
|
onAdd(pSender, args);
|
||||||
|
}
|
||||||
|
|
||||||
virtual void onAdd(const void* pSender, const KeyValueArgs <TKey, TValue>& key) = 0;
|
virtual void onAdd(const void* pSender, const KeyValueArgs <TKey, TValue>& key) = 0;
|
||||||
/// Adds the key to the strategy.
|
/// Adds the key to the strategy.
|
||||||
/// If for the key already an entry exists, an excpetion will be thrown.
|
/// If for the key already an entry exists, an exception will be thrown.
|
||||||
|
|
||||||
virtual void onRemove(const void* pSender, const TKey& key) = 0;
|
virtual void onRemove(const void* pSender, const TKey& key) = 0;
|
||||||
/// Removes an entry from the strategy. If the entry is not found
|
/// Removes an entry from the strategy. If the entry is not found
|
||||||
|
|||||||
Reference in New Issue
Block a user