7#ifndef KISLAZYSHAREDCACHESTORAGE_H
8#define KISLAZYSHAREDCACHESTORAGE_H
15#include <QAtomicPointer>
16#include <QSharedPointer>
17#include <QSharedDataPointer>
18#include <QExplicitlySharedDataPointer>
27template <
typename StorageType,
typename T,
typename... Args>
40 m_value.reset(factory(std::forward<Args...>(args...)));
57template <
typename T,
typename... Args>
66template <
typename T,
typename... Args>
94 return m_sharedStorage->m_value.lazyInitialize(factory, std::forward<Args...>(args...));
112template <
typename DataWrapper,
typename T,
typename... Args>
188template <
typename T,
typename... Args>
204template <
typename T,
typename... Args>
float value(const T *src, size_t ch)
ConstType * value(Args... args)
KisLazySharedCacheStorageBase(std::function< FactoryType > factory)
void setFactory(std::function< FactoryType > factory)
void initialize(Args... args)
KisLazySharedCacheStorageBase()
QAtomicPointer< ConstType > m_cachedValue
KisLazySharedCacheStorageBase(const KisLazySharedCacheStorageBase &rhs)
std::function< FactoryType > m_factory
DataWrapper m_dataWrapper
std::add_const_t< T > ConstType
typedef void(QOPENGLF_APIENTRYP PFNGLINVALIDATEBUFFERDATAPROC)(GLuint buffer)
DataStorage(const DataStorage &rhs)=default
std::add_const_t< T > ConstType
DataStorage & operator=(const DataStorage &rhs)=default
ConstType * lazyInitialize(const std::function< FactoryType > &factory, Args... args)
DataStorage< QScopedPointer< ConstType >, T, Args... > m_value
std::add_const_t< T > ConstType
SharedStorage(const SharedStorage &rhs)=delete
DataWrapperShared & operator=(const DataWrapperShared &rhs)=default
std::add_const_t< T > ConstType
DataWrapperShared(T *value)
ConstType * lazyInitialize(const std::function< FactoryType > &factory, Args... args)
DataWrapperShared(const DataWrapperShared &rhs)=default
QSharedPointer< SharedStorage > m_sharedStorage