string-builder: Ajoute un paquet pour construire des char*
This commit is contained in:
42
static-string-builder/src/builder.c
Normal file
42
static-string-builder/src/builder.c
Normal 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;
|
||||
}
|
||||
|
31
static-string-builder/src/builder.h
Normal file
31
static-string-builder/src/builder.h
Normal 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
|
Reference in New Issue
Block a user