kiba-engine
string.c
1 #include <kiba/format/defaults/string.h>
2 
3 // TODO limit length of written string with precision option
4 // TODO add functionality to read in strings. Open question: when to stop??
5 
6 b8 format_write_character_array(format_buffer *buf, format_options options, string_view view) {
7  usize left_pad, right_pad;
8  format_calculate_padding(options, view.length, &left_pad, &right_pad);
9  return format_buffer_add_char_n(buf, FORMAT_PADDING_CHAR, left_pad) && format_buffer_add_string_view(buf, view)
10  && format_buffer_add_char_n(buf, FORMAT_PADDING_CHAR, right_pad);
11 }
12 
13 FORMAT_FUNCTION(format_write_string_view) {
14  string_view arg = VA_ARG(*args, string_view);
15  return format_write_character_array(buf, options, arg);
16 }
17 
18 FORMAT_FUNCTION(format_write_string) {
19  UNUSED(options);
20  string arg = VA_ARG(*args, string);
21  return format_write_character_array(buf, options, string_view_from_string(arg));
22 }
23 
24 FORMAT_FUNCTION(format_write_raw_string) {
25  UNUSED(options);
26  const char *arg = VA_ARG(*args, const char *);
27  return format_write_character_array(buf, options, string_view_from_string(string_from_raw(arg)));
28 }
29 
30 FORMAT_FUNCTION(format_write_char) {
31  UNUSED(options);
32  i32 arg = VA_ARG(*args, i32);
33  const char data[2] = {(char) arg, '\0'};
34  return format_write_character_array(buf, options, string_view_from_string(string_from_raw(data)));
35 }
string_view string_view_from_string(const string str)
Create a new string view of a whole string.
Definition: string.c:126
string string_from_raw(const char *raw)
Construct a string from a raw string.
Definition: string.c:13
#define UNUSED(x)
Mark parameter as unused.
Definition: defines.h:21
Non owning views on actual strings.
Definition: string.h:31
usize length
The length of the view.
Definition: string.h:35