MCPcopy Create free account
hub / github.com/OpenMC2/OpenMC2 / read

Method read

src/FileHandler.cpp:80–114  ·  view source on GitHub ↗

mc2: 0x00617D20

Source from the content-addressed store, hash-verified

78
79// mc2: 0x00617D20
80std::int32_t FileHandler::read(void *data, std::int32_t size) {
81 if (buffer_read == 0 && buffer_offset != 0 && this->flush() < 0) return -1;
82
83 std::int32_t buffer_used = 0;
84 const std::int32_t buffer_available = buffer_read - buffer_offset;
85 if (size > buffer_available) {
86 if (buffer_available > 0) {
87 std::memcpy(data, buffer + buffer_offset, buffer_available);
88 data = reinterpret_cast<std::uint8_t *>(data) + buffer_available;
89 size -= buffer_available;
90 buffer_used = buffer_available;
91 }
92
93 seek_pos += buffer_read;
94 buffer_read = 0;
95 buffer_offset = 0;
96
97 if (size >= buffer_size) {
98 // skip buffering if read would consume an entire buffer
99 std::int32_t read = this->file_funcs->read(handle, data, size);
100 if (read < 0) return -1;
101 seek_pos += read;
102 return read + buffer_used;
103 }
104
105 std::int32_t read = this->file_funcs->read(handle, buffer, buffer_size);
106 if (read < 0) return -1;
107 buffer_read = read;
108 size = std::min(size, read);
109 }
110
111 std::memcpy(data, buffer + buffer_offset, size);
112 buffer_offset += size;
113 return buffer_used + size;
114}
115
116// mc2: 0x00617F60
117std::int32_t FileHandler::seek(std::int32_t offset) {

Callers 1

sub_5FD3A0Method · 0.45

Calls 1

flushMethod · 0.95

Tested by

no test coverage detected