21 lines
1.3 KiB
C
21 lines
1.3 KiB
C
// #string_builder
|
|
// #limitations This won't be as fast as Jon's String_Builder in jai because we're backing it with an
|
|
// Arena, which requires a variable number of cycles depending on if our process has
|
|
// memory available already. It also has a max capacity depending on what Arena_Reserve we choose.
|
|
// That being said, the implementation is much simpler.
|
|
typedef ArenaArray<u8> String_Builder; // struct String_Builder
|
|
|
|
force_inline String_Builder* new_string_builder (Arena_Reserve new_reserve=Arena_Reserve::Size_64K);
|
|
force_inline void append (String_Builder* sb, string s);
|
|
void append (String_Builder* sb, ArrayView<string> strings);
|
|
// This should probably be called append_but_do_not_increment_count
|
|
internal force_inline void append_no_add (String_Builder* sb, string s); // for appending null terminators, does not increment count.
|
|
void print_to_builder (String_Builder* sb, string format, ...);
|
|
void print_to_builder_internal (String_Builder* sb, string format, va_list args);
|
|
string string_view (String_Builder* sb);
|
|
internal force_inline void reset_string_builder (String_Builder* sb, bool keep_memory=false);
|
|
|
|
// #rename copy_string_and_free_builder
|
|
force_inline string builder_to_string (String_Builder* sb); // returns copy and frees string_builder
|
|
internal force_inline void free_string_builder (String_Builder* sb);
|