Kodi Documentation 22.0
Kodi is an open source media player and entertainment hub.
Loading...
Searching...
No Matches
XFILE::CCircularCache Class Reference

#include <CircularCache.h>

Inheritance diagram for XFILE::CCircularCache:
XFILE::CCacheStrategy

Public Member Functions

 CCircularCache (size_t front, size_t back)
 
 ~CCircularCache () override
 
int Open () override
 
void Close () override
 
size_t GetMaxWriteSize (const size_t &iRequestSize) override
 
int WriteToCache (const char *buf, size_t len) override
 
int ReadFromCache (char *buf, size_t len) override
 
int64_t WaitForData (uint32_t minimum, std::chrono::milliseconds timeout) override
 
int64_t Seek (int64_t pos) override
 
bool Reset (int64_t pos) override
 Reset cache position.
 
int64_t CachedDataEndPosIfSeekTo (int64_t iFilePosition) override
 
int64_t CachedDataStartPos () override
 
int64_t CachedDataEndPos () override
 
bool IsCachedPosition (int64_t iFilePosition) override
 
CCacheStrategyCreateNew () override
 
- Public Member Functions inherited from XFILE::CCacheStrategy
virtual ~CCacheStrategy ()
 
virtual void EndOfInput ()
 
virtual bool IsEndOfInput ()
 
virtual void ClearEndOfInput ()
 

Protected Attributes

int64_t m_beg = 0
 
int64_t m_end = 0
 
int64_t m_cur = 0
 
uint8_tm_buf
 
size_t m_size
 
size_t m_size_back
 
CCriticalSection m_sync
 
CEvent m_written
 
- Protected Attributes inherited from XFILE::CCacheStrategy
bool m_bEndOfInput = false
 

Additional Inherited Members

- Public Attributes inherited from XFILE::CCacheStrategy
CEvent m_space
 

Constructor & Destructor Documentation

◆ CCircularCache()

CCircularCache::CCircularCache ( size_t front,
size_t back )

◆ ~CCircularCache()

CCircularCache::~CCircularCache ( )
override

Member Function Documentation

◆ CachedDataEndPos()

int64_t CCircularCache::CachedDataEndPos ( )
overridevirtual

Implements XFILE::CCacheStrategy.

◆ CachedDataEndPosIfSeekTo()

int64_t CCircularCache::CachedDataEndPosIfSeekTo ( int64_t iFilePosition)
overridevirtual

Implements XFILE::CCacheStrategy.

◆ CachedDataStartPos()

int64_t CCircularCache::CachedDataStartPos ( )
overridevirtual

Implements XFILE::CCacheStrategy.

◆ Close()

void CCircularCache::Close ( )
overridevirtual

Implements XFILE::CCacheStrategy.

◆ CreateNew()

CCacheStrategy * CCircularCache::CreateNew ( )
overridevirtual

Implements XFILE::CCacheStrategy.

◆ GetMaxWriteSize()

size_t CCircularCache::GetMaxWriteSize ( const size_t & iRequestSize)
overridevirtual

Implements XFILE::CCacheStrategy.

◆ IsCachedPosition()

bool CCircularCache::IsCachedPosition ( int64_t iFilePosition)
overridevirtual

Implements XFILE::CCacheStrategy.

◆ Open()

int CCircularCache::Open ( )
overridevirtual

Implements XFILE::CCacheStrategy.

◆ ReadFromCache()

int CCircularCache::ReadFromCache ( char * buf,
size_t len )
overridevirtual

Reads data from cache. Will only read up till the buffer wrap point. So multiple calls may be needed to empty the whole cache

Implements XFILE::CCacheStrategy.

◆ Reset()

bool CCircularCache::Reset ( int64_t iSourcePosition)
overridevirtual

Reset cache position.

Parameters
iSourcePositionposition to reset to
Returns
Whether a full reset was performed, or not (e.g. only cache swap)
See also
CCacheStrategy

Implements XFILE::CCacheStrategy.

◆ Seek()

int64_t CCircularCache::Seek ( int64_t pos)
overridevirtual

Implements XFILE::CCacheStrategy.

◆ WaitForData()

int64_t CCircularCache::WaitForData ( uint32_t minimum,
std::chrono::milliseconds timeout )
overridevirtual

Implements XFILE::CCacheStrategy.

◆ WriteToCache()

int CCircularCache::WriteToCache ( const char * buf,
size_t len )
overridevirtual

Function will write to m_buf at m_end % m_size location it will write at maximum m_size, but it will only write as much it can without wrapping around in the buffer

It will always leave m_size_back of the backbuffer intact but if the back buffer is less than that, that space is usable to write.

If back buffer is filled to an larger extent than m_size_back, it will allow it to be overwritten until only m_size_back data remains.

The following always apply:

  • m_end <= m_cur <= m_end
  • m_end - m_beg <= m_size

Multiple calls may be needed to fill buffer completely.

Implements XFILE::CCacheStrategy.

Member Data Documentation

◆ m_beg

int64_t XFILE::CCircularCache::m_beg = 0
protected

index in file (not buffer) of beginning of valid data

◆ m_buf

uint8_t* XFILE::CCircularCache::m_buf
protected

buffer holding data

◆ m_cur

int64_t XFILE::CCircularCache::m_cur = 0
protected

current reading index in file

◆ m_end

int64_t XFILE::CCircularCache::m_end = 0
protected

index in file (not buffer) of end of valid data

◆ m_size

size_t XFILE::CCircularCache::m_size
protected

size of data buffer used (m_buf)

◆ m_size_back

size_t XFILE::CCircularCache::m_size_back
protected

guaranteed size of back buffer (actual size can be smaller, or larger if front buffer doesn't need it)

◆ m_sync

CCriticalSection XFILE::CCircularCache::m_sync
protected

◆ m_written

CEvent XFILE::CCircularCache::m_written
protected

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