aboutsummaryrefslogtreecommitdiff
path: root/lib/arena_strings.h
blob: b25435d9eaa9482c2601dbf76acc14ceda18a3de (plain)
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
#ifndef ARENA_STRINGS_H_
#define ARENA_STRINGS_H_

#include "arena.h"
#include "const_strings.h"

typedef struct {
  const_string *data;
  size_t len;
  size_t cap;
} const_string_da;

typedef struct {
  char* data;
  size_t len;
  size_t cap;
} string_builder;

const_string arena_cs_append(arena *a, const_string dst, const_string src);
const_string arena_cs_init(arena *a, int len);
const_string arena_cs_concat(arena *a, const_string_da strings, const_string sep);

#define arena_sb_append_buf(a, sb, buf, len) arena_da_append_many((a), (sb), (buf), (len))

#define arena_sb_append_cstr(a, sb, cstr)				\
    do {												\
        const char * str = (cstr);						\
        size_t len = strlen((cstr));					\
        arena_da_append_many((a), (sb), (str), len);	\
    } while (0)

#define arena_sb_append_null(a, sb)	arena_da_append_many((a), (sb), "", 1)

#define arena_sb_to_cs(sb) cs_from_parts((sb).data, (sb).len)

#endif // ARENA_STRINGS_H_