Android-cuttlefish cvd tool
io.h
Go to the documentation of this file.
1//
2// Copyright (C) 2026 The Android Open Source Project
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15
16#pragma once
17
18#include <stdint.h>
19
22
23namespace cuttlefish {
24
25class ConcatReaderSeeker;
26class ReadWindowView;
27class SharedFdIo;
28
29class Reader : public virtual IoVisitable {
30 public:
31 virtual ~Reader() = default;
32
33 Result<void> Visit(IoVisitor&) override;
34 // Has the semantics of read(2)
35 virtual Result<uint64_t> Read(void* buf, uint64_t count) = 0;
36};
37
38class Writer : public virtual IoVisitable {
39 public:
40 virtual ~Writer() = default;
41
42 Result<void> Visit(IoVisitor&) override;
43 // Has the semantics of write(2)
44 virtual Result<uint64_t> Write(const void* buf, uint64_t count) = 0;
45};
46
47class Seeker : public virtual IoVisitable {
48 public:
49 virtual ~Seeker() = default;
50
51 Result<void> Visit(IoVisitor&) override;
52 // Has the semantics of lseek(2) with SEEK_SET
53 virtual Result<uint64_t> SeekSet(uint64_t offset) = 0;
54 // Has the semantics of lseek(2) with SEEK_CUR
55 virtual Result<uint64_t> SeekCur(int64_t offset) = 0;
56 // Has the semantics of lseek(2) with SEEK_END
57 virtual Result<uint64_t> SeekEnd(int64_t offset) = 0;
58};
59
60class ReaderSeeker : public Reader, public Seeker {
61 public:
62 Result<void> Visit(IoVisitor&) override;
63 // Has the semantics of pread(2)
64 virtual Result<uint64_t> PRead(void* buf, uint64_t count,
65 uint64_t offset) const = 0;
66};
67
68class WriterSeeker : public Writer, public Seeker {
69 public:
70 Result<void> Visit(IoVisitor&) override;
71 // Has the semantics of pwrite(2)
72 virtual Result<uint64_t> PWrite(const void* buf, uint64_t count,
73 uint64_t offset) = 0;
74 virtual Result<void> Truncate(uint64_t size);
75};
76
78 public:
79 // Members redeclared to avoid compilation errors like "non-static member
80 // 'Xyz' found in multiple base-class subobjects"
81 Result<void> Visit(IoVisitor&) override;
82
83 Result<uint64_t> Read(void* buf, uint64_t count) override = 0;
84 Result<uint64_t> Write(const void* buf, uint64_t count) override = 0;
85 Result<uint64_t> SeekSet(uint64_t offset) override = 0;
86 Result<uint64_t> SeekCur(int64_t offset) override = 0;
87 Result<uint64_t> SeekEnd(int64_t offset) override = 0;
88 Result<uint64_t> PRead(void* buf, uint64_t count,
89 uint64_t offset) const override = 0;
90 Result<uint64_t> PWrite(const void* buf, uint64_t count,
91 uint64_t offset) override = 0;
92 Result<void> Truncate(uint64_t size) override;
93};
94
107 public:
108 virtual ~IoVisitor() = default;
109
119};
120
121} // namespace cuttlefish
Definition: concat.h:34
Definition: visitable.h:25
Definition: io.h:106
virtual ~IoVisitor()=default
virtual Result< void > Accept(WriterSeeker &)=0
virtual Result< void > Accept(SharedFdIo &)=0
virtual Result< void > Accept(ReaderWriterSeeker &)=0
virtual Result< void > Accept(ConcatReaderSeeker &)=0
virtual Result< void > Accept(Seeker &)=0
virtual Result< void > Accept(Reader &)=0
virtual Result< void > Accept(ReadWindowView &)=0
virtual Result< void > Accept(Writer &)=0
virtual Result< void > Accept(ReaderSeeker &)=0
Definition: read_window_view.h:29
Definition: io.h:60
virtual Result< uint64_t > PRead(void *buf, uint64_t count, uint64_t offset) const =0
Result< void > Visit(IoVisitor &) override
Definition: io.cc:40
Result< uint64_t > SeekSet(uint64_t offset) override=0
Result< uint64_t > SeekEnd(int64_t offset) override=0
Result< uint64_t > Read(void *buf, uint64_t count) override=0
Result< uint64_t > Write(const void *buf, uint64_t count) override=0
Result< uint64_t > SeekCur(int64_t offset) override=0
Result< uint64_t > PWrite(const void *buf, uint64_t count, uint64_t offset) override=0
Result< uint64_t > PRead(void *buf, uint64_t count, uint64_t offset) const override=0
Result< void > Visit(IoVisitor &) override
Definition: io.cc:50
Result< void > Truncate(uint64_t size) override
Definition: io.cc:59
Definition: io.h:29
virtual ~Reader()=default
Result< void > Visit(IoVisitor &) override
Definition: io.cc:25
virtual Result< uint64_t > Read(void *buf, uint64_t count)=0
Definition: io.h:47
virtual Result< uint64_t > SeekSet(uint64_t offset)=0
Result< void > Visit(IoVisitor &) override
Definition: io.cc:35
virtual Result< uint64_t > SeekEnd(int64_t offset)=0
virtual ~Seeker()=default
virtual Result< uint64_t > SeekCur(int64_t offset)=0
Definition: shared_fd.h:26
Definition: io.h:68
virtual Result< void > Truncate(uint64_t size)
Definition: io.cc:55
virtual Result< uint64_t > PWrite(const void *buf, uint64_t count, uint64_t offset)=0
Result< void > Visit(IoVisitor &) override
Definition: io.cc:45
Definition: io.h:38
virtual ~Writer()=default
Result< void > Visit(IoVisitor &) override
Definition: io.cc:30
virtual Result< uint64_t > Write(const void *buf, uint64_t count)=0
uint32_t size
Definition: io.h:2
Definition: alloc_driver.h:20
tl::expected< T, StackTraceError > Result
Definition: result_type.h:30