Krita Source Code Documentation
Loading...
Searching...
No Matches
KisLockFreeCache< T > Class Template Referenceabstract

#include <kis_lock_free_cache.h>

Public Member Functions

getValue () const
 
void invalidate ()
 
bool tryGetValue (T &result) const
 
virtual ~KisLockFreeCache ()
 

Protected Member Functions

virtual T calculateNewValue () const =0
 

Private Attributes

KisCacheStateValue m_state
 
m_value
 

Detailed Description

template<typename T>
class KisLockFreeCache< T >

Definition at line 98 of file kis_lock_free_cache.h.

Constructor & Destructor Documentation

◆ ~KisLockFreeCache()

template<typename T >
virtual KisLockFreeCache< T >::~KisLockFreeCache ( )
inlinevirtual

Definition at line 101 of file kis_lock_free_cache.h.

101{}

Member Function Documentation

◆ calculateNewValue()

template<typename T >
virtual T KisLockFreeCache< T >::calculateNewValue ( ) const
protectedpure virtual

Calculate the value. Used by the cache internally. Reimplemented by the user.

◆ getValue()

template<typename T >
T KisLockFreeCache< T >::getValue ( ) const
inline

Calculate the value or fetch it from the cache

Definition at line 113 of file kis_lock_free_cache.h.

113 {
115 bool isValid = false;
116 T savedValue;
117
118 if (m_state.startRead(&seqValue)) {
119 savedValue = m_value;
120 isValid = m_state.endRead(seqValue);
121 }
122
123 if (isValid) {
124 return savedValue;
125 } else if (m_state.startWrite(&seqValue)) {
126 savedValue = calculateNewValue();
127 m_value = savedValue;
128 m_state.endWrite(seqValue);
129 return savedValue;
130 } else {
131 return calculateNewValue();
132 }
133 }
bool endRead(int seq) const
bool startWrite(int *seq)
bool startRead(int *seq) const
virtual T calculateNewValue() const =0
KisCacheStateValue m_state

References KisLockFreeCache< T >::calculateNewValue(), KisCacheStateValue::endRead(), KisCacheStateValue::endWrite(), KisLockFreeCache< T >::m_state, KisLockFreeCache< T >::m_value, KisCacheStateValue::startRead(), and KisCacheStateValue::startWrite().

◆ invalidate()

template<typename T >
void KisLockFreeCache< T >::invalidate ( )
inline

Notify the cache that the value has changed

Definition at line 106 of file kis_lock_free_cache.h.

106 {
108 }

References KisCacheStateValue::invalidate(), and KisLockFreeCache< T >::m_state.

◆ tryGetValue()

template<typename T >
bool KisLockFreeCache< T >::tryGetValue ( T & result) const
inline

Definition at line 135 of file kis_lock_free_cache.h.

135 {
137 bool isValid = false;
138 T savedValue;
139
140 if (m_state.startRead(&seqValue)) {
141 savedValue = m_value;
142 isValid = m_state.endRead(seqValue);
143 }
144
145 if (isValid) {
146 result = savedValue;
147 }
148
149 return isValid;
150 }

References KisCacheStateValue::endRead(), KisLockFreeCache< T >::m_state, KisLockFreeCache< T >::m_value, and KisCacheStateValue::startRead().

Member Data Documentation

◆ m_state

template<typename T >
KisCacheStateValue KisLockFreeCache< T >::m_state
mutableprivate

Definition at line 160 of file kis_lock_free_cache.h.

◆ m_value

template<typename T >
T KisLockFreeCache< T >::m_value
mutableprivate

Definition at line 161 of file kis_lock_free_cache.h.


The documentation for this class was generated from the following file: