1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
#ifndef INCLUDED__CMMM__STRING_BUILDER__H
#define INCLUDED__CMMM__STRING_BUILDER__H
// #define CMMM__STRING_BUILDER__STRIP_VENDOR
// #define CMMM__STRING_BUILDER__SHORT_NAMESPACE
#include <stddef.h>
#include <string.h>
#include "cmmm/dynamic-array.h"
#define CMMM__STRING_BUILDER struct string_builder *
struct cmmm__string_builder {
union { char *items, *string; };
size_t count;
size_t capacity;
};
#define CMMM__STRING_BUILDER__APPEND_CHAR(SB, CHAR) \
CMMM__DYNAMIC_ARRAY__APPEND (SB, CHAR)
#define CMMM__STRING_BUILDER__APPEND_BUF(SB, BUF, SIZE) \
CMMM__DYNAMIC_ARRAY__APPEND_MANY (SB, BUF, SIZE)
#define CMMM__STRING_BUILDER__APPEND_CSTR(SB, CSTR) \
({ \
const char *s = (CSTR); \
size_t n = strlen (s); \
CMMM__DYNAMIC_ARRAY__APPEND_MANY(SB, s, n); \
})
#define CMMM__STRING_BUILDER__APPEND_CSTRS(SB, ...) \
cmmm__string_builder__append_cstrs (&(SB), __VA_ARGS__, NULL)
#define CMMM__STRING_BUILDER__APPEND_STRING_VIEW(SB, SV) \
CMMM__DYNAMIC_ARRAY__APPEND_MANY(SB, (SV).beg, CMMM__STRING_VIEW__LENGTH (SV));
#define CMMM__STRING_BUILDER__APPEND_NULL(SB) \
CMMM__DYNAMIC_ARRAY__APPEND (SB, '\0')
#define CMMM__STRING_BUILDER__RESET(SB) CMMM__DYNAMIC_ARRAY__RESET (SB)
#define CMMM__STRING_BUILDER__FREE( SB) CMMM__DYNAMIC_ARRAY__FREE ( SB)
void cmmm__string_builder__append_ntimes (CMMM__STRING_BUILDER, char c, size_t n);
void cmmm__string_builder__append_cstrs (CMMM__STRING_BUILDER, ...);
void cmmm__string_builder__printf (CMMM__STRING_BUILDER, const char *format, ...);
#ifdef CMMM__STRING_BUILDER__SHORT_NAMESPACE
#define CMMM__SB_STRIP_VENDOR CMMM__STRING_BUILDER__STRIP_VENDOR
#define CMMM__SB_SHORT_NAMESPACE CMMM__STRING_BUILDER__SHORT_NAMESPACE
#define CMMM__SB CMMM__STRING_BUILDER
#define cmmm__sb cmmm__string_builder
#define CMMM__SB_APPEND_CHAR CMMM__STRING_BUILDER__APPEND_CHAR
#define CMMM__SB_APPEND_BUF CMMM__STRING_BUILDER__APPEND_BUF
#define CMMM__SB_APPEND_CSTR CMMM__STRING_BUILDER__APPEND_CSTR
#define CMMM__SB_APPEND_CSTRS CMMM__STRING_BUILDER__APPEND_CSTRS
#define CMMM__SB_APPEND_STRING_VIEW CMMM__STRING_BUILDER__APPEND_STRING_VIEW
#define CMMM__SB_APPEND_NULL CMMM__STRING_BUILDER__APPEND_NULL
#define CMMM__SB_RESET CMMM__STRING_BUILDER__RESET
#define CMMM__SB_FREE CMMM__STRING_BUILDER__FREE
#define cmmm__sb_append_ntimes cmmm__string_builder__append_ntimes
#define cmmm__sb_append_cstrs cmmm__string_builder__append_cstrs
#define cmmm__sb_printf cmmm__string_builder__printf
#endif // CMMM__STRING_BUILDER__SHORT_NAMESPACE
#ifdef CMMM__STRING_BUILDER__STRIP_VENDOR
#define STRING_BUILDER__STRIP_VENDOR CMMM__STRING_BUILDER__STRIP_VENDOR
#define STRING_BUILDER__SHORT_NAMESPACE CMMM__STRING_BUILDER__SHORT_NAMESPACE
#define STRING_BUILDER CMMM__STRING_BUILDER
#define STRING_BUILDER__APPEND_CHAR CMMM__STRING_BUILDER__APPEND_CHAR
#define STRING_BUILDER__APPEND_BUF CMMM__STRING_BUILDER__APPEND_BUF
#define STRING_BUILDER__APPEND_CSTR CMMM__STRING_BUILDER__APPEND_CSTR
#define STRING_BUILDER__APPEND_CSTRS CMMM__STRING_BUILDER__APPEND_CSTRS
#define STRING_BUILDER__APPEND_STRING_VIEW CMMM__STRING_BUILDER__APPEND_STRING_VIEW
#define STRING_BUILDER__APPEND_NULL CMMM__STRING_BUILDER__APPEND_NULL
#define STRING_BUILDER__RESET CMMM__STRING_BUILDER__RESET
#define STRING_BUILDER__FREE CMMM__STRING_BUILDER__FREE
#define string_builder__append_ntimes cmmm__string_builder__append_ntimes
#define string_builder__append_cstrs cmmm__string_builder__append_cstrs
#define string_builder__printf cmmm__string_builder__printf
#ifdef CMMM__STRING_BUILDER__SHORT_NAMESPACE
#define SB_STRIP_VENDOR CMMM__STRING_BUILDER__STRIP_VENDOR
#define SB_SHORT_NAMESPACE CMMM__STRING_BUILDER__SHORT_NAMESPACE
#define SB CMMM__STRING_BUILDER
#define SB_APPEND_CHAR CMMM__STRING_BUILDER__APPEND_CHAR
#define SB_APPEND_BUF CMMM__STRING_BUILDER__APPEND_BUF
#define SB_APPEND_CSTR CMMM__STRING_BUILDER__APPEND_CSTR
#define SB_APPEND_CSTRS CMMM__STRING_BUILDER__APPEND_CSTRS
#define SB_APPEND_STRING_VIEW CMMM__STRING_BUILDER__APPEND_STRING_VIEW
#define SB_APPEND_NULL CMMM__STRING_BUILDER__APPEND_NULL
#define SB_RESET CMMM__STRING_BUILDER__RESET
#define SB_FREE CMMM__STRING_BUILDER__FREE
#define sb_append_ntimes cmmm__string_builder__append_ntimes
#define sb_append_cstrs cmmm__string_builder__append_cstrs
#define sb_printf cmmm__string_builder__printf
#endif // CMMM__STRING_BUILDER__SHORT_NAMESPACE
#endif // CMMM__STRING_BUILDER__STRIP_VENDOR
#endif // INCLUDED__STRING_BUILDER__H
|