26 enum Mode { kInputMode, kOutputMode };
30 uint64_t io_cache_size,
31 uint64_t io_block_size);
35 bool Close()
override;
36 int64_t Read(
void* buffer, uint64_t length)
override;
37 int64_t Write(
const void* buffer, uint64_t length)
override;
38 void CloseForWriting()
override;
39 int64_t Size()
override;
40 bool Flush()
override;
41 bool Seek(uint64_t position)
override;
42 bool Tell(uint64_t* position)
override;
54 void RunInInputMode();
55 void RunInOutputMode();
56 void WaitForSignal(absl::Mutex* mutex,
bool* condition);
58 std::unique_ptr<File, FileCloser> internal_file_;
61 std::vector<uint8_t> io_buffer_;
64 std::atomic<bool> eof_;
65 std::atomic<int64_t> internal_file_error_;
67 absl::Mutex flush_mutex_;
68 bool flushing_ ABSL_GUARDED_BY(flush_mutex_);
69 bool flush_complete_ ABSL_GUARDED_BY(flush_mutex_);
71 absl::Mutex task_exited_mutex_;
72 bool task_exited_ ABSL_GUARDED_BY(task_exited_mutex_);