File indexing completed on 2025-08-28 08:26:59
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 #pragma once
0021
0022 #include <cstdint>
0023 #include <memory>
0024 #include <string>
0025 #include <vector>
0026
0027 #include "arrow/io/concurrency.h"
0028 #include "arrow/io/interfaces.h"
0029 #include "arrow/util/visibility.h"
0030
0031 namespace arrow {
0032
0033 class Buffer;
0034 class MemoryPool;
0035 class Status;
0036
0037 namespace io {
0038
0039
0040 class ARROW_EXPORT FileOutputStream : public OutputStream {
0041 public:
0042 ~FileOutputStream() override;
0043
0044
0045
0046
0047
0048
0049
0050
0051 static Result<std::shared_ptr<FileOutputStream>> Open(const std::string& path,
0052 bool append = false);
0053
0054
0055
0056
0057
0058
0059
0060
0061 static Result<std::shared_ptr<FileOutputStream>> Open(int fd);
0062
0063
0064 Status Close() override;
0065 bool closed() const override;
0066 Result<int64_t> Tell() const override;
0067
0068
0069 Status Write(const void* data, int64_t nbytes) override;
0070
0071 using Writable::Write;
0072
0073
0074 int file_descriptor() const;
0075
0076 private:
0077 FileOutputStream();
0078
0079 class ARROW_NO_EXPORT FileOutputStreamImpl;
0080 std::unique_ptr<FileOutputStreamImpl> impl_;
0081 };
0082
0083
0084
0085
0086
0087
0088 class ARROW_EXPORT ReadableFile
0089 : public internal::RandomAccessFileConcurrencyWrapper<ReadableFile> {
0090 public:
0091 ~ReadableFile() override;
0092
0093
0094
0095
0096
0097 static Result<std::shared_ptr<ReadableFile>> Open(
0098 const std::string& path, MemoryPool* pool = default_memory_pool());
0099
0100
0101
0102
0103
0104
0105
0106
0107 static Result<std::shared_ptr<ReadableFile>> Open(
0108 int fd, MemoryPool* pool = default_memory_pool());
0109
0110 bool closed() const override;
0111
0112 int file_descriptor() const;
0113
0114 Status WillNeed(const std::vector<ReadRange>& ranges) override;
0115
0116 private:
0117 friend RandomAccessFileConcurrencyWrapper<ReadableFile>;
0118
0119 explicit ReadableFile(MemoryPool* pool);
0120
0121 Status DoClose();
0122 Result<int64_t> DoTell() const;
0123 Result<int64_t> DoRead(int64_t nbytes, void* buffer);
0124 Result<std::shared_ptr<Buffer>> DoRead(int64_t nbytes);
0125
0126
0127 Result<int64_t> DoReadAt(int64_t position, int64_t nbytes, void* out);
0128
0129
0130 Result<std::shared_ptr<Buffer>> DoReadAt(int64_t position, int64_t nbytes);
0131
0132 Result<int64_t> DoGetSize();
0133 Status DoSeek(int64_t position);
0134
0135 class ARROW_NO_EXPORT ReadableFileImpl;
0136 std::unique_ptr<ReadableFileImpl> impl_;
0137 };
0138
0139
0140
0141
0142
0143
0144
0145
0146 class ARROW_EXPORT MemoryMappedFile : public ReadWriteFileInterface {
0147 public:
0148 ~MemoryMappedFile() override;
0149
0150
0151 static Result<std::shared_ptr<MemoryMappedFile>> Create(const std::string& path,
0152 int64_t size);
0153
0154
0155 static Result<std::shared_ptr<MemoryMappedFile>> Open(const std::string& path,
0156 FileMode::type mode);
0157
0158
0159 static Result<std::shared_ptr<MemoryMappedFile>> Open(const std::string& path,
0160 FileMode::type mode,
0161 const int64_t offset,
0162 const int64_t length);
0163
0164 Status Close() override;
0165
0166 bool closed() const override;
0167
0168 Result<int64_t> Tell() const override;
0169
0170 Status Seek(int64_t position) override;
0171
0172
0173 Result<int64_t> Read(int64_t nbytes, void* out) override;
0174
0175
0176 Result<std::shared_ptr<Buffer>> Read(int64_t nbytes) override;
0177
0178
0179
0180 Result<std::shared_ptr<Buffer>> ReadAt(int64_t position, int64_t nbytes) override;
0181
0182
0183
0184
0185 Result<int64_t> ReadAt(int64_t position, int64_t nbytes, void* out) override;
0186
0187
0188 Future<std::shared_ptr<Buffer>> ReadAsync(const IOContext&, int64_t position,
0189 int64_t nbytes) override;
0190
0191 Status WillNeed(const std::vector<ReadRange>& ranges) override;
0192
0193 bool supports_zero_copy() const override;
0194
0195
0196 Status Write(const void* data, int64_t nbytes) override;
0197
0198 using Writable::Write;
0199
0200
0201
0202 Status Resize(int64_t new_size);
0203
0204
0205 Status WriteAt(int64_t position, const void* data, int64_t nbytes) override;
0206
0207 Result<int64_t> GetSize() override;
0208
0209 int file_descriptor() const;
0210
0211 private:
0212 MemoryMappedFile();
0213
0214 Status WriteInternal(const void* data, int64_t nbytes);
0215
0216 class ARROW_NO_EXPORT MemoryMap;
0217 std::shared_ptr<MemoryMap> memory_map_;
0218 };
0219
0220 }
0221 }