Browse Source

reduce unnecessary allocs in io_mem_writer

master
Martin Dørum 3 years ago
parent
commit
5b6dc6be51
3 changed files with 8 additions and 3 deletions
  1. 1
    0
      include/lang2/io.h
  2. 7
    1
      lib/io.c
  3. 0
    2
      test/src/examples.t.c

+ 1
- 0
include/lang2/io.h View File

@@ -62,6 +62,7 @@ size_t l2_io_file_read(struct l2_io_reader *self, void *buf, size_t len);
struct l2_io_mem_writer {
struct l2_io_writer w;
size_t len;
size_t size;
void *mem;
};
void l2_io_mem_write(struct l2_io_writer *self, const void *buf, size_t len);

+ 7
- 1
lib/io.c View File

@@ -103,8 +103,14 @@ size_t l2_io_file_read(struct l2_io_reader *self, void *buf, size_t len) {
void l2_io_mem_write(struct l2_io_writer *self, const void *buf, size_t len) {
struct l2_io_mem_writer *w = (struct l2_io_mem_writer *)self;
size_t idx = w->len;

if (w->len + len > w->size) {
if (w->size == 0) w->size = 64;
while (w->len + len > w->size) w->size *= 2;
w->mem = realloc(w->mem, w->size);
}

w->len += len;
w->mem = realloc(w->mem, w->len);
memcpy((char *)w->mem + idx, buf, len);
}


+ 0
- 2
test/src/examples.t.c View File

@@ -75,8 +75,6 @@ static void check_impl(const char *name) {

struct l2_io_mem_writer bytecode = {
.w.write = l2_io_mem_write,
.len = 0,
.mem = NULL,
};

struct l2_lexer lexer;

Loading…
Cancel
Save