1#pragma once
 2
 3#include <cstddef>
 4#include <cstdint>
 5#include <string>
 6
 7struct ggml_tensor;
 8
 9class llama_io_write_i {
10public:
11    llama_io_write_i() = default;
12    virtual ~llama_io_write_i() = default;
13
14    virtual void write(const void * src, size_t size) = 0;
15    virtual void write_tensor(const ggml_tensor * tensor, size_t offset, size_t size) = 0;
16
17    // bytes written so far
18    virtual size_t n_bytes() = 0;
19
20    void write_string(const std::string & str);
21};
22
23class llama_io_read_i {
24public:
25    llama_io_read_i() = default;
26    virtual ~llama_io_read_i() = default;
27
28    virtual const uint8_t * read(size_t size) = 0;
29    virtual void read_to(void * dst, size_t size) = 0;
30
31    // bytes read so far
32    virtual size_t n_bytes() = 0;
33
34    void read_string(std::string & str);
35};