// #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 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 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);