1 #include <kiba/format/defaults/integer.h>
7 usize left_pad_length = 0;
8 while (format_buffer_match_char(buf, FORMAT_PADDING_CHAR)) {
12 if (!(format_buffer_peak_char(buf, &c) && character_is_decimal(c))) {
15 format_buffer_advance(buf);
16 u64 res = (u64) c -
'0';
18 while (format_buffer_peak_char(buf, &c) && character_is_decimal(c)) {
19 format_buffer_advance(buf);
20 u64 digit = (u64) c -
'0';
21 res = res * 10 + digit;
25 usize left_pad, right_pad;
26 format_calculate_padding(options, digits, &left_pad, &right_pad);
28 for (; i < right_pad && format_buffer_match_char(buf, FORMAT_PADDING_CHAR); ++i)
30 return left_pad_length == left_pad && i == right_pad;
35 const usize size =
sizeof(buffer) /
sizeof(buffer[0]);
38 for (; value != 0LU; value /= 10LU, ++digits) {
39 u64 digit = value % 10LU;
40 buffer[size - digits - 1] = (char) digit +
'0';
42 digits =
KB_MAX(digits, 1);
43 usize left_pad, right_pad;
44 format_calculate_padding(options, digits, &left_pad, &right_pad);
45 return format_buffer_add_char_n(buf, FORMAT_PADDING_CHAR, left_pad)
46 && format_buffer_add_chars(buf, buffer + size - digits, digits)
47 && format_buffer_add_char_n(buf, FORMAT_PADDING_CHAR, right_pad);
51 usize left_pad_length = 0;
52 while (format_buffer_match_char(buf, FORMAT_PADDING_CHAR)) {
56 if (!format_buffer_peak_char(buf, &c)) {
64 if (!(format_buffer_advance(buf) && format_buffer_peak_char(buf, &c))) {
68 if (!character_is_decimal(c)) {
71 format_buffer_advance(buf);
72 i64 res = (i64) c -
'0';
73 while (format_buffer_peak_char(buf, &c) && character_is_decimal(c)) {
74 format_buffer_advance(buf);
75 i64 digit = (i64) c -
'0';
76 res = res * 10 + digit;
81 usize left_pad, right_pad;
82 format_calculate_padding(options, digits, &left_pad, &right_pad);
84 for (; i < right_pad && format_buffer_match_char(buf, FORMAT_PADDING_CHAR); ++i)
86 return left_pad_length == left_pad && i == right_pad;
91 const usize size =
sizeof(buffer) /
sizeof(buffer[0]);
94 b8 negative = value < 0L;
98 for (; value != 0L; value /= 10L, ++digits) {
99 i64 digit = value % 10L;
100 buffer[size - digits - 1] = (char) digit +
'0';
103 buffer[size - digits++ - 1] =
'-';
105 digits =
KB_MAX(digits, 1);
106 usize left_pad, right_pad;
107 format_calculate_padding(options, digits, &left_pad, &right_pad);
108 return format_buffer_add_char_n(buf, FORMAT_PADDING_CHAR, left_pad)
109 && format_buffer_add_chars(buf, buffer + size - digits, digits)
110 && format_buffer_add_char_n(buf, FORMAT_PADDING_CHAR, right_pad);
113 FORMAT_FUNCTION(format_read_u64) {
114 u64 *arg = VA_ARG(*args, u64 *);
115 return format_read_unsigned_decimal(buf, options, arg);
118 FORMAT_FUNCTION(format_write_u64) {
119 u64 arg = VA_ARG(*args, u64);
120 return format_write_unsigned_decimal(buf, options, arg);
123 FORMAT_FUNCTION(format_read_i64) {
124 i64 *arg = VA_ARG(*args, i64 *);
125 return format_read_signed_decimal(buf, options, arg);
128 FORMAT_FUNCTION(format_write_i64) {
129 i64 arg = VA_ARG(*args, i64);
130 return format_write_signed_decimal(buf, options, arg);
133 FORMAT_FUNCTION(format_read_u32) {
134 u32 *arg = VA_ARG(*args, u32 *);
136 if (!format_read_unsigned_decimal(buf, options, &tmp)) {
143 FORMAT_FUNCTION(format_write_u32) {
144 u32 arg = VA_ARG(*args, u32);
145 return format_write_unsigned_decimal(buf, options, arg);
148 FORMAT_FUNCTION(format_read_i32) {
149 i32 *arg = VA_ARG(*args, i32 *);
151 if (!format_read_signed_decimal(buf, options, &tmp)) {
158 FORMAT_FUNCTION(format_write_i32) {
159 i32 arg = VA_ARG(*args, i32);
160 return format_write_signed_decimal(buf, options, arg);
163 FORMAT_FUNCTION(format_read_u16) {
164 u16 *arg = VA_ARG(*args, u16 *);
166 if (!format_read_unsigned_decimal(buf, options, &tmp)) {
173 FORMAT_FUNCTION(format_write_u16) {
return format_write_u32(buf, options, args); }
175 FORMAT_FUNCTION(format_read_i16) {
176 i16 *arg = VA_ARG(*args, i16 *);
178 if (!format_read_signed_decimal(buf, options, &tmp)) {
185 FORMAT_FUNCTION(format_write_i16) {
return format_write_i32(buf, options, args); }
187 FORMAT_FUNCTION(format_read_u8) {
188 u8 *arg = VA_ARG(*args, u8 *);
190 if (!format_read_unsigned_decimal(buf, options, &tmp)) {
197 FORMAT_FUNCTION(format_write_u8) {
return format_write_u32(buf, options, args); }
199 FORMAT_FUNCTION(format_read_i8) {
200 i8 *arg = VA_ARG(*args, i8 *);
202 if (!format_read_signed_decimal(buf, options, &tmp)) {
209 FORMAT_FUNCTION(format_write_i8) {
return format_write_i32(buf, options, args); }
211 FORMAT_FUNCTION(format_read_usize) {
212 usize *arg = VA_ARG(*args, usize *);
214 if (!format_read_unsigned_decimal(buf, options, &tmp)) {
221 FORMAT_FUNCTION(format_write_usize) {
222 usize arg = VA_ARG(*args, usize);
223 return format_write_unsigned_decimal(buf, options, arg);
Lightweight layer between platform and other engine components to enable tracing/monitoring.
Custom library for interactions with strings using string views.
#define KB_MAX(x, y)
Ternary to get the maximum of two numbers.