Skip to content

Commit 0848b27

Browse files
committed
Refactor file write APIs to use uint8_t for byte data
Changed file write and binary read methods in FileHandle to use std::span<const uint8_t> and std::vector<uint8_t> instead of char-based types for improved type safety and clarity. Updated related function signatures and internal logic in both C++ and C API wrappers to match the new byte type.
1 parent a26c4fc commit 0848b27

File tree

3 files changed

+25
-25
lines changed

3 files changed

+25
-25
lines changed

src/VirtualFileSystem/FileHandle.cpp

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ FileOperationHandle FileHandle::readLine(size_t lineNumber) const {
5252
return FileOperationHandle::immediate(FileOpStatus::Failed);
5353
}
5454

55-
FileOperationHandle FileHandle::readLineBinary(size_t lineNumber, char delimiter) const {
55+
FileOperationHandle FileHandle::readLineBinary(size_t lineNumber, uint8_t delimiter) const {
5656
if (!_backend) {
5757
return FileOperationHandle::immediate(FileOpStatus::Failed);
5858
}
@@ -72,13 +72,13 @@ FileOperationHandle FileHandle::readLineBinary(size_t lineNumber, char delimiter
7272
}
7373
auto buf = rh.contentsBytes();
7474
size_t idx = 0;
75-
std::vector<char> line;
76-
auto charDelim = static_cast<std::byte>(static_cast<unsigned char>(delimiter));
75+
std::vector<uint8_t> line;
76+
auto byteDelim = static_cast<std::byte>(delimiter);
7777
for (size_t i = 0; i < buf.size(); ++i) {
78-
if (buf[i] == charDelim) {
78+
if (buf[i] == byteDelim) {
7979
if (idx == lineNumber) break; else { line.clear(); ++idx; continue; }
8080
}
81-
line.push_back(static_cast<char>(buf[i]));
81+
line.push_back(static_cast<uint8_t>(buf[i]));
8282
}
8383
if (idx != lineNumber) { s.complete(FileOpStatus::Partial); return; }
8484
s.bytes.assign(reinterpret_cast<const std::byte*>(line.data()),
@@ -87,12 +87,12 @@ FileOperationHandle FileHandle::readLineBinary(size_t lineNumber, char delimiter
8787
});
8888
}
8989

90-
FileOperationHandle FileHandle::writeAll(std::span<const char> bytes) const {
90+
FileOperationHandle FileHandle::writeAll(std::span<const uint8_t> bytes) const {
9191
if (_backend && _vfs) {
9292
WriteOptions opts; opts.truncate = true;
93-
auto data = std::vector<char>(bytes.begin(), bytes.end());
93+
auto data = std::vector<uint8_t>(bytes.begin(), bytes.end());
9494
return _vfs->submitSerialized(_meta.path, [opts, data=std::move(data)](FileOperationHandle::OpState& s, std::shared_ptr<IFileSystemBackend> backend, const std::string& p, const ExecContext&) mutable {
95-
auto byteSpan = std::as_bytes(std::span<const char>(data.data(), data.size()));
95+
auto byteSpan = std::as_bytes(std::span<const uint8_t>(data.data(), data.size()));
9696
auto inner = backend->writeFile(p, byteSpan, opts);
9797
inner.wait();
9898
auto st = inner.status();
@@ -110,11 +110,11 @@ FileOperationHandle FileHandle::writeAll(std::span<const char> bytes) const {
110110
return FileOperationHandle::immediate(FileOpStatus::Failed);
111111
}
112112

113-
FileOperationHandle FileHandle::writeAll(std::span<const char> bytes, const WriteOptions& opts) const {
113+
FileOperationHandle FileHandle::writeAll(std::span<const uint8_t> bytes, const WriteOptions& opts) const {
114114
if (_backend && _vfs) {
115-
auto data = std::vector<char>(bytes.begin(), bytes.end());
115+
auto data = std::vector<uint8_t>(bytes.begin(), bytes.end());
116116
return _vfs->submitSerialized(_meta.path, [opts, data=std::move(data)](FileOperationHandle::OpState& s, std::shared_ptr<IFileSystemBackend> backend, const std::string& p, const ExecContext&) mutable {
117-
auto byteSpan = std::as_bytes(std::span<const char>(data.data(), data.size()));
117+
auto byteSpan = std::as_bytes(std::span<const uint8_t>(data.data(), data.size()));
118118
if (auto* local = dynamic_cast<LocalFileSystemBackend*>(backend.get())) {
119119
local->doWriteFile(s, p, byteSpan, opts);
120120
} else {
@@ -136,12 +136,12 @@ FileOperationHandle FileHandle::writeAll(std::span<const char> bytes, const Writ
136136
return FileOperationHandle::immediate(FileOpStatus::Failed);
137137
}
138138

139-
FileOperationHandle FileHandle::writeRange(uint64_t offset, std::span<const char> bytes) const {
139+
FileOperationHandle FileHandle::writeRange(uint64_t offset, std::span<const uint8_t> bytes) const {
140140
WriteOptions opts; opts.offset = offset; opts.truncate = false;
141141
if (_backend && _vfs) {
142-
auto data = std::vector<char>(bytes.begin(), bytes.end());
142+
auto data = std::vector<uint8_t>(bytes.begin(), bytes.end());
143143
return _vfs->submitSerialized(_meta.path, [opts, data=std::move(data)](FileOperationHandle::OpState& s, std::shared_ptr<IFileSystemBackend> backend, const std::string& p, const ExecContext&) mutable {
144-
auto byteSpan = std::as_bytes(std::span<const char>(data.data(), data.size()));
144+
auto byteSpan = std::as_bytes(std::span<const uint8_t>(data.data(), data.size()));
145145
if (auto* local = dynamic_cast<LocalFileSystemBackend*>(backend.get())) {
146146
local->doWriteFile(s, p, byteSpan, opts);
147147
} else {
@@ -163,14 +163,14 @@ FileOperationHandle FileHandle::writeRange(uint64_t offset, std::span<const char
163163
return FileOperationHandle::immediate(FileOpStatus::Failed);
164164
}
165165

166-
FileOperationHandle FileHandle::writeRange(uint64_t offset, std::span<const char> bytes, const WriteOptions& opts) const {
166+
FileOperationHandle FileHandle::writeRange(uint64_t offset, std::span<const uint8_t> bytes, const WriteOptions& opts) const {
167167
if (_backend && _vfs) {
168168
WriteOptions wopts = opts;
169169
wopts.offset = offset;
170170
wopts.truncate = false;
171-
auto data = std::vector<char>(bytes.begin(), bytes.end());
171+
auto data = std::vector<uint8_t>(bytes.begin(), bytes.end());
172172
return _vfs->submitSerialized(_meta.path, [wopts, data=std::move(data)](FileOperationHandle::OpState& s, std::shared_ptr<IFileSystemBackend> backend, const std::string& p, const ExecContext&) mutable {
173-
auto byteSpan = std::as_bytes(std::span<const char>(data.data(), data.size()));
173+
auto byteSpan = std::as_bytes(std::span<const uint8_t>(data.data(), data.size()));
174174
if (auto* local = dynamic_cast<LocalFileSystemBackend*>(backend.get())) {
175175
local->doWriteFile(s, p, byteSpan, wopts);
176176
} else {

src/VirtualFileSystem/FileHandle.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ class FileHandle {
103103
* @param delimiter Byte delimiter to split lines
104104
* @return Handle with raw bytes of the line
105105
*/
106-
FileOperationHandle readLineBinary(size_t lineNumber, char delimiter) const;
106+
FileOperationHandle readLineBinary(size_t lineNumber, uint8_t delimiter) const;
107107

108108
// Writes
109109
/**
@@ -123,22 +123,22 @@ class FileHandle {
123123
* @param bytes Data to write
124124
* @return Handle for the asynchronous write
125125
*/
126-
FileOperationHandle writeAll(std::span<const char> bytes) const;
126+
FileOperationHandle writeAll(std::span<const uint8_t> bytes) const;
127127
/**
128128
* @brief Writes raw bytes with explicit WriteOptions
129129
*/
130-
FileOperationHandle writeAll(std::span<const char> bytes, const WriteOptions& opts) const;
130+
FileOperationHandle writeAll(std::span<const uint8_t> bytes, const WriteOptions& opts) const;
131131
/**
132132
* @brief Writes bytes starting at a specific offset
133133
* @param offset Byte offset to begin writing
134134
* @param bytes Data to write
135135
* @return Handle for the asynchronous write
136136
*/
137-
FileOperationHandle writeRange(uint64_t offset, std::span<const char> bytes) const;
137+
FileOperationHandle writeRange(uint64_t offset, std::span<const uint8_t> bytes) const;
138138
/**
139139
* @brief Writes bytes at offset with explicit WriteOptions (offset is applied to opts)
140140
*/
141-
FileOperationHandle writeRange(uint64_t offset, std::span<const char> bytes, const WriteOptions& opts) const;
141+
FileOperationHandle writeRange(uint64_t offset, std::span<const uint8_t> bytes, const WriteOptions& opts) const;
142142
/**
143143
* @brief Replaces a single line by index (0-based)
144144
*

src/entropy/entropy_file_handle_c.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ entropy_FileOperationHandle entropy_file_handle_write_all_bytes(
235235

236236
try {
237237
auto* cpp_handle = reinterpret_cast<FileHandle*>(handle);
238-
std::span<const char> data(reinterpret_cast<const char*>(bytes), length);
238+
std::span<const uint8_t> data(bytes, length);
239239
FileOperationHandle op = cpp_handle->writeAll(data);
240240
*status = ENTROPY_OK;
241241
return wrap_file_operation_handle(std::move(op));
@@ -260,7 +260,7 @@ entropy_FileOperationHandle entropy_file_handle_write_all_bytes_with_options(
260260

261261
try {
262262
auto* cpp_handle = reinterpret_cast<FileHandle*>(handle);
263-
std::span<const char> data(reinterpret_cast<const char*>(bytes), length);
263+
std::span<const uint8_t> data(bytes, length);
264264
WriteOptions wo = to_cpp_write_options(options);
265265
FileOperationHandle op = cpp_handle->writeAll(data, wo);
266266
*status = ENTROPY_OK;
@@ -286,7 +286,7 @@ entropy_FileOperationHandle entropy_file_handle_write_range(
286286

287287
try {
288288
auto* cpp_handle = reinterpret_cast<FileHandle*>(handle);
289-
std::span<const char> data(reinterpret_cast<const char*>(bytes), length);
289+
std::span<const uint8_t> data(bytes, length);
290290
FileOperationHandle op = cpp_handle->writeRange(offset, data);
291291
*status = ENTROPY_OK;
292292
return wrap_file_operation_handle(std::move(op));

0 commit comments

Comments
 (0)