string-builder: Ajoute un paquet pour construire des char*

This commit is contained in:
2022-11-28 11:40:21 +01:00
parent cb6d978cad
commit 27eafc7b9c
5 changed files with 137 additions and 0 deletions

View File

@@ -0,0 +1,42 @@
#include "builder.h"
#include <assert.h>
#include <string.h>
char tmp[TMP_CAP] = {};
size_t tmp_size = 0;
char *tmp_end(void) {
return tmp + tmp_size;
}
char *tmp_alloc(size_t size) {
assert(tmp_size + size <= TMP_CAP);
char *result = tmp_end();
tmp_size += size;
return result;
}
char *tmp_append_char(char c) {
assert(tmp_size < TMP_CAP);
tmp[tmp_size++] = c;
return tmp + tmp_size - 1;
}
char *tmp_append_sized(const char *buffer, size_t buffer_sz) {
char *result = tmp_alloc(buffer_sz);
return memcpy(result, buffer, buffer_sz);
}
char *tmp_append_cstr(const char *cstr) {
return tmp_append_sized(cstr, strlen(cstr));
}
void tmp_clean() {
tmp_size = 0;
}
void tmp_rewind(const char *end) {
tmp_size = end - tmp;
}

View File

@@ -0,0 +1,31 @@
#ifndef STATIC_STRING_BUILDER_H
#define STATIC_STRING_BUILDER_H
#include <stddef.h>
#ifndef TMP_CAP
#define TMP_CAP 1024
#endif
/**
* Get a pointer on the byte just after the last character of the buffer.
*
* @return A char pointer
*/
char *tmp_end(void);
/**
* Append a new byte at the end of the current string builder.
*
* @param c The character to add
* @return A pointer just before the character was added
*/
char *tmp_append_char(char c);
char *tmp_append_cstr(const char *cstr);
void tmp_clean();
void tmp_rewind(const char *end);
#endif // STATIC_STRING_BUILDER_H