43 static constexpr std::uint64_t kUnknownFileSize = std::uint64_t(-1);
45 enum class ELineBreaks { kAuto, kSystem, kUnix, kWindows };
49 static constexpr
int kFeatureHasSize = 0x01;
51 static constexpr
int kFeatureHasMmap = 0x02;
55 ELineBreaks fLineBreak;
61 ROptions() : fLineBreak(ELineBreaks::kAuto), fBlockSize(-1) {}
66 static constexpr
unsigned int kNumBlockBuffers = 2;
69 std::uint64_t fBufferOffset;
73 unsigned char *fBuffer;
75 RBlockBuffer() : fBufferOffset(0), fBufferSize(0), fBuffer(nullptr) {}
76 RBlockBuffer(
const RBlockBuffer &) =
delete;
77 RBlockBuffer &operator=(
const RBlockBuffer &) =
delete;
78 ~RBlockBuffer() =
default;
81 size_t CopyTo(
void *buffer,
size_t nbytes, std::uint64_t offset);
84 unsigned int fBlockBufferIdx;
86 RBlockBuffer fBlockBuffers[kNumBlockBuffers];
88 unsigned char *fBufferSpace;
90 std::uint64_t fFileSize;
98 std::uint64_t fFilePos;
105 virtual void OpenImpl() = 0;
110 virtual size_t ReadAtImpl(
void *buffer,
size_t nbytes, std::uint64_t offset) = 0;
112 virtual std::uint64_t GetSizeImpl() = 0;
116 virtual void *MapImpl(
size_t nbytes, std::uint64_t offset, std::uint64_t &mapdOffset);
118 virtual void UnmapImpl(
void *region,
size_t nbytes);
121 RRawFile(std::string_view url, ROptions options);
122 RRawFile(
const RRawFile &) =
delete;
123 RRawFile &operator=(
const RRawFile &) =
delete;
127 virtual std::unique_ptr<RRawFile> Clone()
const = 0;
130 static std::unique_ptr<RRawFile> Create(std::string_view url, ROptions options = ROptions());
132 static std::string GetLocation(std::string_view url);
134 static std::string GetTransport(std::string_view url);
140 size_t ReadAt(
void *buffer,
size_t nbytes, std::uint64_t offset);
142 size_t Read(
void *buffer,
size_t nbytes);
144 void Seek(std::uint64_t offset);
146 std::uint64_t GetSize();
151 void *Map(
size_t nbytes, std::uint64_t offset, std::uint64_t &mapdOffset);
153 void Unmap(
void *region,
size_t nbytes);
157 virtual int GetFeatures()
const = 0;
160 bool Readln(std::string &line);