#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <cx/string.h>
#include "strbuf.h"
sbuf_t* sbuf_new(
size_t size) {
sbuf_t *buf = malloc(
sizeof(
sbuf_t));
buf->ptr = malloc(size);
buf->ptr[
0] =
0;
buf->size = size;
buf->length =
0;
return buf;
}
void sbuf_puts(
sbuf_t *buf,
char *str) {
sbuf_append(buf, cx_str(str));
}
void sbuf_put(
sbuf_t *buf,
char chr) {
sbuf_append(buf, (cxstring){&chr,
1});
}
void sbuf_append(
sbuf_t *buf, cxstring str) {
if (buf->length + str.length >= buf->size) {
buf->size *=
2;
buf->ptr = realloc(buf->ptr, buf->size);
sbuf_append(buf, str);
return;
}
memcpy(&buf->ptr[buf->length], str.ptr, str.length);
buf->length += str.length;
buf->ptr[buf->length] =
0;
}
void sbuf_free(
sbuf_t *buf) {
free(buf->ptr);
free(buf);
}