@@ -15,18 +15,42 @@ buffer buffer_create(size_t size, bool can_grow, bool circular){
1515void buffer_write (buffer * buf , char * fmt , ...){
1616 __attribute__((aligned (16 ))) va_list args ;
1717 va_start (args , fmt );
18+ buffer_write_va (buf , fmt , args );
19+ //TODO: circular
20+ va_end (args );
21+ }
22+
23+ void buffer_write_va (buffer * buf , char * fmt , va_list args ){
1824 size_t n = string_format_va_buf (fmt , buf -> buffer + buf -> cursor , buf -> limit - buf -> cursor , args );
1925 buf -> cursor += n ;
2026 buf -> buffer_size += n ;
2127 if (buf -> can_grow && buf -> buffer_size > buf -> limit - 256 ){
22- size_t new_size = buf -> limit ;
28+ size_t new_size = buf -> limit * 2 ;
2329 buf -> buffer = realloc_sized (buf -> buffer , buf -> limit , new_size );
2430 buf -> limit = new_size ;
2531 }
26- //TODO: circular
27- va_end (args );
32+ }
33+
34+ void buffer_write_const (buffer * buf , char * lit ){
35+ size_t lit_size = strlen (lit );
36+ buffer_write_lim (buf , lit , lit_size );
37+ }
38+
39+ void buffer_write_lim (buffer * buf , char * lit , size_t lit_size ){
40+ if (buf -> limit - buf -> buffer_size <= lit_size ){
41+ if (buf -> can_grow ){
42+ size_t new_size = buf -> limit ;
43+ buf -> buffer = realloc_sized (buf -> buffer , buf -> limit , new_size );
44+ buf -> limit = new_size ;
45+ } else return ;
46+ //TODO: circular
47+ }
48+ for (size_t i = 0 ; i < lit_size ; i ++ ){
49+ buf -> buffer [buf -> cursor ++ ] = lit [i ];
50+ }
51+ buf -> buffer_size += lit_size ;
2852}
2953
3054void buffer_write_space (buffer * buf ){
31- buffer_write (buf , " " );
55+ buffer_write_const (buf , " " );
3256}
0 commit comments