Shaka Packager SDK
Loading...
Searching...
No Matches
io_cache.h
1// Copyright 2015 Google LLC. All rights reserved.
2//
3// Use of this source code is governed by a BSD-style
4// license that can be found in the LICENSE file or at
5// https://developers.google.com/open-source/licenses/bsd
6
7#ifndef PACKAGER_FILE_IO_CACHE_H_
8#define PACKAGER_FILE_IO_CACHE_H_
9
10#include <cstdint>
11#include <vector>
12
13#include <absl/base/thread_annotations.h>
14#include <absl/synchronization/mutex.h>
15
16#include <packager/macros/classes.h>
17
18namespace shaka {
19
21class IoCache {
22 public:
23 explicit IoCache(uint64_t cache_size);
24 ~IoCache();
25
32 uint64_t Read(void* buffer, uint64_t size);
33
41 uint64_t Write(const void* buffer, uint64_t size);
42
44 void Clear();
45
48 void Close();
49
51 bool closed() { return closed_; }
52
54 void Reopen();
55
58 uint64_t BytesCached();
59
62 uint64_t BytesFree();
63
66
67 private:
68 uint64_t BytesCachedInternal();
69 uint64_t BytesFreeInternal();
70
71 const uint64_t cache_size_;
72 absl::Mutex mutex_;
73 absl::CondVar read_event_ ABSL_GUARDED_BY(mutex_);
74 absl::CondVar write_event_ ABSL_GUARDED_BY(mutex_);
75 std::vector<uint8_t> circular_buffer_ ABSL_GUARDED_BY(mutex_);
76 const uint8_t* end_ptr_ ABSL_GUARDED_BY(mutex_);
77 uint8_t* r_ptr_ ABSL_GUARDED_BY(mutex_);
78 uint8_t* w_ptr_ ABSL_GUARDED_BY(mutex_);
79 bool closed_ ABSL_GUARDED_BY(mutex_);
80
81 DISALLOW_COPY_AND_ASSIGN(IoCache);
82};
83
84} // namespace shaka
85
86#endif // PACKAGER_FILE_IO_CACHE_H
Declaration of class which implements a thread-safe circular buffer.
Definition io_cache.h:21
void Clear()
Empties the cache.
Definition io_cache.cc:98
uint64_t Write(const void *buffer, uint64_t size)
Definition io_cache.cc:60
bool closed()
Definition io_cache.h:51
uint64_t BytesFree()
Definition io_cache.cc:124
uint64_t Read(void *buffer, uint64_t size)
Definition io_cache.cc:33
uint64_t BytesCached()
Definition io_cache.cc:119
void WaitUntilEmptyOrClosed()
Waits until the cache is empty or has been closed.
Definition io_cache.cc:139
void Reopen()
Reopens the cache. Any data still in the cache will be lost.
Definition io_cache.cc:112
All the methods that are virtual are virtual for mocking.