2 #ifndef _YI_LOCKLESS_CACHE_H_ 3 #define _YI_LOCKLESS_CACHE_H_ 13 #define YI_LOCKLESS_CACHE_SIZE 3 // Triple Buffer 24 template<
typename YI_CACHE_TYPE>
29 mutable volatile uint32_t m_uCurrentReadIndex;
30 mutable volatile uint32_t m_uNextReadIndex;
38 m_uCurrentReadIndex(0), m_uNextReadIndex(0)
50 return m_uCurrentReadIndex != m_uNextReadIndex;
56 inline const YI_CACHE_TYPE &
Read()
const 58 m_uCurrentReadIndex = m_uNextReadIndex;
59 return m_cacheLists[m_uCurrentReadIndex];
70 inline void Write(
const YI_CACHE_TYPE &rData)
72 volatile uint32_t m_uUnusedIndex = 0;
73 while((m_uUnusedIndex == m_uNextReadIndex || m_uUnusedIndex == m_uCurrentReadIndex)) ++m_uUnusedIndex;
74 m_cacheLists[m_uUnusedIndex] = rData;
75 YI_SWAP(m_uNextReadIndex, m_uUnusedIndex);
const YI_CACHE_TYPE & Read() const
Definition: YiLocklessCache.h:56
CYILocklessCache()
Definition: YiLocklessCache.h:37
Lockless cache is a triple-buffered cache.
Definition: YiLocklessCache.h:25
bool HasNextRead() const
Definition: YiLocklessCache.h:48
void YI_SWAP(YI_SWAP_TYPE &a, YI_SWAP_TYPE &b)
Definition: YiUtilities.h:35
void Write(const YI_CACHE_TYPE &rData)
Definition: YiLocklessCache.h:70
#define YI_LOCKLESS_CACHE_SIZE
Definition: YiLocklessCache.h:13