mirror of
https://github.com/johnkerl/miller.git
synced 2026-01-23 18:25:45 +00:00
38 lines
1.1 KiB
C
38 lines
1.1 KiB
C
#ifndef STRING_BUILDER_H
|
|
#define STRING_BUILDER_H
|
|
|
|
typedef struct _string_builder_t {
|
|
int used_length;
|
|
int alloc_length;
|
|
char* buffer;
|
|
} string_builder_t;
|
|
|
|
string_builder_t* sb_alloc(int alloc_length);
|
|
void sb_free(string_builder_t* psb);
|
|
void sb_init(string_builder_t* psb, int alloc_length);
|
|
void _sb_enlarge(string_builder_t* psb); // private method
|
|
|
|
static inline void sb_append_char(string_builder_t* psb, char c) {
|
|
if (psb->used_length >= psb->alloc_length)
|
|
_sb_enlarge(psb);
|
|
psb->buffer[psb->used_length++] = c;
|
|
}
|
|
static inline void sb_append_chars(string_builder_t* psb, char* s, int so, int eo) {
|
|
char* p = s+so;
|
|
char* e = s+eo;
|
|
while (p <= e)
|
|
sb_append_char(psb, *(p++));
|
|
}
|
|
static inline void sb_append_char_range(string_builder_t* psb, char* b, char* e) {
|
|
char* p = b;
|
|
while (p <= e)
|
|
sb_append_char(psb, *(p++));
|
|
}
|
|
|
|
void sb_append_string(string_builder_t* psb, char* s);
|
|
int sb_is_empty(string_builder_t* psb);
|
|
// The caller should free() the return value:
|
|
char* sb_finish(string_builder_t* psb);
|
|
char* sb_finish_with_length(string_builder_t* psb, int* pline_length);
|
|
|
|
#endif // STRING_BUILDER_H
|