add parse to f64/f32

This commit is contained in:
Kevin Trogant 2026-01-09 18:40:38 +01:00
parent 8cdfe4829b
commit 02b55a6f35

View File

@ -260,11 +260,25 @@ typedef struct
i32 i; i32 i;
b32 ok; b32 ok;
} s8_parse_i32_result; } s8_parse_i32_result;
typedef struct
{
f64 f;
b32 ok;
} s8_parse_f64_result;
typedef struct
{
f32 f;
b32 ok;
} s8_parse_f32_result;
/* Parses a integer from string s */ /* Parses a integer from string s */
RTC_API s8_parse_i64_result S8ParseI64(s8 s, int base); RTC_API s8_parse_i64_result S8ParseI64(s8 s, int base);
/* Parses an integer from string s */ /* Parses an integer from string s */
RTC_API s8_parse_i32_result S8ParseI32(s8 s, int base); RTC_API s8_parse_i32_result S8ParseI32(s8 s, int base);
/* Parses a float from string s */
RTC_API s8_parse_f64_result S8ParseF64(s8 s);
/* Parses a float from string s */
RTC_API s8_parse_f32_result S8ParseF32(s8 s);
/* Basic file io */ /* Basic file io */
typedef struct file_buffer typedef struct file_buffer
@ -415,6 +429,8 @@ RTC_API THREAD_RETURN_TYPE JoinThread(thread *t);
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include <string.h>
#include <errno.h>
#ifdef __linux__ #ifdef __linux__
#include <pthread.h> #include <pthread.h>
@ -628,6 +644,22 @@ S8ParseI32(s8 s, int base)
.ok = 1, .ok = 1,
}; };
} }
RTC_API s8_parse_f64_result
S8ParseF64(s8 s)
{
f64 f = strtod((const char *)s.data, NULL);
if (errno == ERANGE)
return (s8_parse_f64_result){.f = 0.0, .ok = 0};
return (s8_parse_f64_result){.f = f, .ok = 1};
}
RTC_API s8_parse_f32_result
S8ParseF32(s8 s)
{
f32 f = strtof((const char *)s.data, NULL);
if (errno == ERANGE)
return (s8_parse_f32_result){.f = 0.0, .ok = 0};
return (s8_parse_f32_result){.f = f, .ok = 1};
}
/* Basic file io */ /* Basic file io */
RTC_API file_buffer RTC_API file_buffer