emp-toolkit
mem_io_channel.h
Go to the documentation of this file.
1 #include <string>
2 #include "io_channel.h"
3 #include "file_io_channel.h"
4 
5 #ifndef MEM_IO_CHANNEL
6 #define MEM_IO_CHANNEL
7 
12 class MemIO: public IOChannel<MemIO> { public:
13  char * buffer = nullptr;
14  int size = 0;
15  int read_pos = 0;
16  int cap;
17 
18  MemIO(int _cap=1024*1024) {
19  this->cap = _cap;
20  buffer = new char[cap];
21  size = 0;
22  }
23  ~MemIO(){
24  if(buffer!=nullptr)
25  delete[] buffer;
26  }
27  void load_from_file(FileIO * fio, uint64_t size) {
28  delete[] buffer;
29  buffer = new char[size];
30  this->cap = size;
31  this->read_pos = 0;
32  this->size = size;
33  fio->recv_data(buffer, size);
34  }
35  void clear(){
36  size = 0;
37  }
38  void send_data_impl(const void * data, int len) {
39  if(size + len >= cap){
40  char * new_buffer = new char[2*(cap+len)];
41  memcpy(new_buffer, buffer, size);
42  delete[] buffer;
43  buffer = new_buffer;
44  cap = 2*(cap + len);
45  }
46  memcpy(buffer + size, data, len);
47  size += len;
48  }
49 
50  void recv_data_impl(void * data, int len) {
51  if(read_pos + len <= size) {
52  memcpy(data, buffer + read_pos, len);
53  read_pos += len;
54  } else {
55  fprintf(stderr,"error: mem_recv_data\n");
56  }
57  }
58 };
60 #endif//MEM_IO_CHANNEL_H__
MemIO(int _cap=1024 *1024)
Definition: mem_io_channel.h:18
void recv_data(void *data, int nbyte)
Definition: io_channel.h:17
Definition: mem_io_channel.h:12
void send_data_impl(const void *data, int len)
Definition: mem_io_channel.h:38
void load_from_file(FileIO *fio, uint64_t size)
Definition: mem_io_channel.h:27
~MemIO()
Definition: mem_io_channel.h:23
int cap
Definition: mem_io_channel.h:16
void recv_data_impl(void *data, int len)
Definition: mem_io_channel.h:50
void clear()
Definition: mem_io_channel.h:35
int read_pos
Definition: mem_io_channel.h:15
int size
Definition: mem_io_channel.h:14
char * buffer
Definition: mem_io_channel.h:13
Definition: io_channel.h:12
Definition: file_io_channel.h:21