Skip to content

Commit 824ef9a

Browse files
author
Diego Ferrari
committed
[BUF] more buffer output functions
1 parent 504b2e5 commit 824ef9a

2 files changed

Lines changed: 32 additions & 4 deletions

File tree

shared/files/buffer.c

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,42 @@ buffer buffer_create(size_t size, bool can_grow, bool circular){
1515
void buffer_write(buffer *buf, char* fmt, ...){
1616
__attribute__((aligned(16))) va_list args;
1717
va_start(args, fmt);
18+
buffer_write_va(buf, fmt, args);
19+
//TODO: circular
20+
va_end(args);
21+
}
22+
23+
void buffer_write_va(buffer *buf, char* fmt, va_list args){
1824
size_t n = string_format_va_buf(fmt, buf->buffer+buf->cursor, buf->limit-buf->cursor, args);
1925
buf->cursor += n;
2026
buf->buffer_size += n;
2127
if (buf->can_grow && buf->buffer_size > buf->limit-256){
22-
size_t new_size = buf->limit;
28+
size_t new_size = buf->limit * 2;
2329
buf->buffer = realloc_sized(buf->buffer, buf->limit, new_size);
2430
buf->limit = new_size;
2531
}
26-
//TODO: circular
27-
va_end(args);
32+
}
33+
34+
void buffer_write_const(buffer *buf, char *lit){
35+
size_t lit_size = strlen(lit);
36+
buffer_write_lim(buf, lit, lit_size);
37+
}
38+
39+
void buffer_write_lim(buffer *buf, char *lit, size_t lit_size){
40+
if (buf->limit - buf->buffer_size <= lit_size){
41+
if (buf->can_grow){
42+
size_t new_size = buf->limit;
43+
buf->buffer = realloc_sized(buf->buffer, buf->limit, new_size);
44+
buf->limit = new_size;
45+
} else return;
46+
//TODO: circular
47+
}
48+
for (size_t i = 0; i < lit_size; i++){
49+
buf->buffer[buf->cursor++] = lit[i];
50+
}
51+
buf->buffer_size += lit_size;
2852
}
2953

3054
void buffer_write_space(buffer *buf){
31-
buffer_write(buf, " ");
55+
buffer_write_const(buf, " ");
3256
}

shared/files/buffer.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#pragma once
22

33
#include "types.h"
4+
#include "std/args.h"
45

56
typedef struct {
67
char* buffer;
@@ -13,4 +14,7 @@ typedef struct {
1314

1415
buffer buffer_create(size_t size, bool can_grow, bool circular);
1516
void buffer_write(buffer *buf, char* fmt, ...);
17+
void buffer_write_va(buffer *buf, char* fmt, va_list args);
18+
void buffer_write_const(buffer *buf, char *lit);
19+
void buffer_write_lim(buffer *buf, char *lit, size_t size);
1620
void buffer_write_space(buffer *buf);

0 commit comments

Comments
 (0)