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

struct l2_io_mem_writer { struct l2_io_mem_writer {
struct l2_io_writer w; struct l2_io_writer w;
size_t len; size_t len;
size_t size;
void *mem; void *mem;
}; };
void l2_io_mem_write(struct l2_io_writer *self, const void *buf, size_t len); void l2_io_mem_write(struct l2_io_writer *self, const void *buf, size_t len);

+ 7
- 1
lib/io.c View File

void l2_io_mem_write(struct l2_io_writer *self, const 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; struct l2_io_mem_writer *w = (struct l2_io_mem_writer *)self;
size_t idx = w->len; 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->len += len;
w->mem = realloc(w->mem, w->len);
memcpy((char *)w->mem + idx, buf, len); memcpy((char *)w->mem + idx, buf, len);
} }



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



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


struct l2_lexer lexer; struct l2_lexer lexer;

Loading…
Cancel
Save