summaryrefslogtreecommitdiffstats
path: root/xbmc/filesystem/CircularCache.h
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-10 18:07:22 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-10 18:07:22 +0000
commitc04dcc2e7d834218ef2d4194331e383402495ae1 (patch)
tree7333e38d10d75386e60f336b80c2443c1166031d /xbmc/filesystem/CircularCache.h
parentInitial commit. (diff)
downloadkodi-c04dcc2e7d834218ef2d4194331e383402495ae1.tar.xz
kodi-c04dcc2e7d834218ef2d4194331e383402495ae1.zip
Adding upstream version 2:20.4+dfsg.upstream/2%20.4+dfsg
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'xbmc/filesystem/CircularCache.h')
-rw-r--r--xbmc/filesystem/CircularCache.h55
1 files changed, 55 insertions, 0 deletions
diff --git a/xbmc/filesystem/CircularCache.h b/xbmc/filesystem/CircularCache.h
new file mode 100644
index 0000000..21d3e6b
--- /dev/null
+++ b/xbmc/filesystem/CircularCache.h
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2005-2018 Team Kodi
+ * This file is part of Kodi - https://kodi.tv
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ * See LICENSES/README.md for more information.
+ */
+
+#pragma once
+
+#include "CacheStrategy.h"
+#include "threads/CriticalSection.h"
+#include "threads/Event.h"
+
+namespace XFILE {
+
+class CCircularCache : public CCacheStrategy
+{
+public:
+ 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;
+
+ int64_t CachedDataEndPosIfSeekTo(int64_t iFilePosition) override;
+ int64_t CachedDataStartPos() override;
+ int64_t CachedDataEndPos() override;
+ bool IsCachedPosition(int64_t iFilePosition) override;
+
+ CCacheStrategy *CreateNew() override;
+protected:
+ int64_t m_beg; /**< index in file (not buffer) of beginning of valid data */
+ int64_t m_end; /**< index in file (not buffer) of end of valid data */
+ int64_t m_cur; /**< current reading index in file */
+ uint8_t *m_buf; /**< buffer holding data */
+ size_t m_size; /**< size of data buffer used (m_buf) */
+ size_t m_size_back; /**< guaranteed size of back buffer (actual size can be smaller, or larger if front buffer doesn't need it) */
+ CCriticalSection m_sync;
+ CEvent m_written;
+#ifdef TARGET_WINDOWS
+ HANDLE m_handle;
+#endif
+};
+
+} // namespace XFILE
+