| 155 | */ |
| 156 | template <typename F> |
| 157 | ssize_t TransferIn(F transfer_function) |
| 158 | { |
| 159 | size_t amount = this->RemainingBytesToTransfer(); |
| 160 | if (amount == 0) return 0; |
| 161 | |
| 162 | assert(this->pos < this->buffer.size()); |
| 163 | assert(this->pos + amount <= this->buffer.size()); |
| 164 | auto input_buffer = std::span<uint8_t>(this->buffer.data() + this->pos, amount); |
| 165 | ssize_t bytes = transfer_function(input_buffer); |
| 166 | if (bytes > 0) this->pos += bytes; |
| 167 | return bytes; |
| 168 | } |
| 169 | }; |
| 170 | |
| 171 | #endif /* NETWORK_CORE_PACKET_H */ |