28 enum Mode { kInputMode, kOutputMode };
32 uint64_t io_cache_size,
33 uint64_t io_block_size);
37 bool Close()
override;
38 int64_t Read(
void* buffer, uint64_t length)
override;
39 int64_t Write(
const void* buffer, uint64_t length)
override;
40 void CloseForWriting()
override;
41 int64_t Size()
override;
42 bool Flush()
override;
43 bool Seek(uint64_t position)
override;
44 bool Tell(uint64_t* position)
override;
56 void RunInInputMode();
57 void RunInOutputMode();
58 void WaitForSignal(absl::Mutex* mutex,
bool* condition);
60 std::unique_ptr<File, FileCloser> internal_file_;
63 std::vector<uint8_t> io_buffer_;
66 std::atomic<bool> eof_;
67 std::atomic<int64_t> internal_file_error_;
69 absl::Mutex flush_mutex_;
70 bool flushing_ ABSL_GUARDED_BY(flush_mutex_);
71 bool flush_complete_ ABSL_GUARDED_BY(flush_mutex_);
73 absl::Mutex task_exited_mutex_;
74 bool task_exited_ ABSL_GUARDED_BY(task_exited_mutex_);