From 02b55a6f35cb189aded5bcf31dae092df60cd3de Mon Sep 17 00:00:00 2001 From: Kevin Trogant Date: Fri, 9 Jan 2026 18:40:38 +0100 Subject: [PATCH] add parse to f64/f32 --- rtcore.h | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/rtcore.h b/rtcore.h index 321c585..780c435 100644 --- a/rtcore.h +++ b/rtcore.h @@ -260,11 +260,25 @@ typedef struct i32 i; b32 ok; } 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 */ RTC_API s8_parse_i64_result S8ParseI64(s8 s, int base); /* Parses an integer from string s */ 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 */ typedef struct file_buffer @@ -415,6 +429,8 @@ RTC_API THREAD_RETURN_TYPE JoinThread(thread *t); #include #include +#include +#include #ifdef __linux__ #include @@ -628,6 +644,22 @@ S8ParseI32(s8 s, int base) .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 */ RTC_API file_buffer