mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-04 16:56:53 +08:00
refs #759 Allow cache value notification slot to be changed after construction.
Also allow slot to be any type of callable, including member function or lambda.
This commit is contained in:
committed by
Roland Winklmeier
parent
d24c17eba2
commit
e01ae2be11
@@ -286,17 +286,11 @@ namespace BlackMisc
|
||||
class CData : public BlackMisc::CCached<typename Trait::type>
|
||||
{
|
||||
public:
|
||||
//! \copydoc BlackMisc::CCached::NotifySlot
|
||||
template <typename T>
|
||||
using NotifySlot = typename BlackMisc::CCached<typename Trait::type>::template NotifySlot<T>;
|
||||
|
||||
//! Constructor.
|
||||
//! \param owner Will be the parent of the internal QObject used to access the value.
|
||||
//! \param slot Slot to call when the value is modified by another object.
|
||||
//! Must be a void, non-const member function of the owner.
|
||||
template <typename T>
|
||||
CData(T *owner, NotifySlot<T> slot = nullptr) :
|
||||
CData::CCached(CDataCache::instance(), Trait::key(), Trait::humanReadable(), Trait::isValid, Trait::defaultValue(), owner, slot)
|
||||
CData(T *owner) :
|
||||
CData::CCached(CDataCache::instance(), Trait::key(), Trait::humanReadable(), Trait::isValid, Trait::defaultValue(), owner)
|
||||
{
|
||||
if (Trait::timeToLive() >= 0) { CDataCache::instance()->setTimeToLive(Trait::key(), Trait::timeToLive()); }
|
||||
if (Trait::isPinned()) { CDataCache::instance()->pinValue(Trait::key()); }
|
||||
@@ -304,6 +298,16 @@ namespace BlackMisc
|
||||
static_assert(! (Trait::isPinned() && Trait::isDeferred()), "trait can not be both pinned and deferred");
|
||||
}
|
||||
|
||||
//! Constructor.
|
||||
//! \param owner Will be the parent of the internal QObject used to access the value.
|
||||
//! \param slot Slot to call when the value is modified by another object.
|
||||
//! Must be a void, non-const member function of the owner.
|
||||
template <typename T, typename F>
|
||||
CData(T *owner, F slot) : CData(owner)
|
||||
{
|
||||
this->setNotifySlot(slot);
|
||||
}
|
||||
|
||||
//! \copydoc BlackMisc::CCached::set
|
||||
CStatusMessage set(const typename Trait::type &value, qint64 timestamp = 0)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user