From 8d346eca90e89262961ada4f95865d6860352530 Mon Sep 17 00:00:00 2001 From: Martin Fouilleul Date: Sun, 10 Sep 2023 19:59:02 +0200 Subject: [PATCH 1/3] flip order of len and ptr in oc_str8/16/32 structs, to make bindings easier --- src/graphics/graphics_common.c | 14 +++++++------- src/runtime_memory.h | 2 +- src/util/strings.h | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/graphics/graphics_common.c b/src/graphics/graphics_common.c index 23a6307..406dcdf 100644 --- a/src/graphics/graphics_common.c +++ b/src/graphics/graphics_common.c @@ -636,8 +636,8 @@ oc_str32 oc_font_get_glyph_indices_from_font_data(oc_font_data* fontData, oc_str u32 oc_font_get_glyph_index_from_font_data(oc_font_data* fontData, oc_utf32 codePoint) { u32 glyphIndex = 0; - oc_str32 codePoints = { 1, &codePoint }; - oc_str32 backing = { 1, &glyphIndex }; + oc_str32 codePoints = { .ptr = &codePoint, .len = 1 }; + oc_str32 backing = { .ptr = &glyphIndex, 1 }; oc_font_get_glyph_indices_from_font_data(fontData, codePoints, backing); return (glyphIndex); } @@ -655,15 +655,15 @@ oc_str32 oc_font_get_glyph_indices(oc_font font, oc_str32 codePoints, oc_str32 b oc_str32 oc_font_push_glyph_indices(oc_font font, oc_arena* arena, oc_str32 codePoints) { u32* buffer = oc_arena_push_array(arena, u32, codePoints.len); - oc_str32 backing = { codePoints.len, buffer }; + oc_str32 backing = { .ptr = buffer, .len = codePoints.len }; return (oc_font_get_glyph_indices(font, codePoints, backing)); } u32 oc_font_get_glyph_index(oc_font font, oc_utf32 codePoint) { u32 glyphIndex = 0; - oc_str32 codePoints = { 1, &codePoint }; - oc_str32 backing = { 1, &glyphIndex }; + oc_str32 codePoints = { .ptr = &codePoint, .len = 1 }; + oc_str32 backing = { .ptr = &glyphIndex, .len = 1 }; oc_font_get_glyph_indices(font, codePoints, backing); return (glyphIndex); } @@ -783,7 +783,7 @@ oc_text_metrics oc_font_text_metrics_utf32(oc_font font, f32 fontSize, oc_str32 if(missingGlyphIndex) { - oc_font_get_glyph_metrics_from_font_data(fontData, (oc_str32){ 1, &missingGlyphIndex }, &missingGlyphMetrics); + oc_font_get_glyph_metrics_from_font_data(fontData, (oc_str32){ .ptr = &missingGlyphIndex, .len = 1 }, &missingGlyphMetrics); } else { @@ -793,7 +793,7 @@ oc_text_metrics oc_font_text_metrics_utf32(oc_font font, f32 fontSize, oc_str32 missingGlyphIndex = oc_font_get_glyph_index_from_font_data(fontData, 'X'); if(missingGlyphIndex) { - oc_font_get_glyph_metrics_from_font_data(fontData, (oc_str32){ 1, &missingGlyphIndex }, &missingGlyphMetrics); + oc_font_get_glyph_metrics_from_font_data(fontData, (oc_str32){ .ptr = &missingGlyphIndex, .len = 1 }, &missingGlyphMetrics); } else { diff --git a/src/runtime_memory.h b/src/runtime_memory.h index c87b9e4..a54ab8d 100644 --- a/src/runtime_memory.h +++ b/src/runtime_memory.h @@ -72,8 +72,8 @@ void oc_wasm_list_push_back(oc_wasm_list* list, oc_wasm_list_elt* elt); typedef struct oc_wasm_str8 { - u64 len; u32 ptr; + u64 len; } oc_wasm_str8; typedef struct oc_wasm_str8_elt diff --git a/src/util/strings.h b/src/util/strings.h index 44fc27c..32da663 100644 --- a/src/util/strings.h +++ b/src/util/strings.h @@ -34,8 +34,8 @@ extern "C" { //---------------------------------------------------------------------------------- typedef struct oc_str8 { - u64 len; char* ptr; + u64 len; } oc_str8; #define OC_STR8(s) ((oc_str8){ .len = (s) ? strlen(s) : 0, .ptr = (char*)s }) @@ -43,7 +43,7 @@ typedef struct oc_str8 //NOTE: this only works with string literals, but is sometimes necessary to generate compile-time constants #define OC_STR8_LIT(s) \ { \ - sizeof(s) - 1, s \ + s, sizeof(s) - 1 \ } #define oc_str8_lp(s) ((s).len), ((s).ptr) @@ -92,8 +92,8 @@ ORCA_API oc_str8_list oc_str8_split(oc_arena* arena, oc_str8 str, oc_str8_list s //---------------------------------------------------------------------------------- typedef struct oc_str16 { - u64 len; u16* ptr; + u64 len; } oc_str16; ORCA_API oc_str16 oc_str16_from_buffer(u64 len, u16* buffer); @@ -125,8 +125,8 @@ ORCA_API oc_str16_list oc_str16_split(oc_arena* arena, oc_str16 str, oc_str16_li //---------------------------------------------------------------------------------- typedef struct oc_str32 { - u64 len; u32* ptr; + u64 len; } oc_str32; ORCA_API oc_str32 oc_str32_from_buffer(u64 len, u32* buffer); -- 2.25.1 From dc837a6a6da014149c7bffd9c0870060dc9e1372 Mon Sep 17 00:00:00 2001 From: Martin Fouilleul Date: Mon, 11 Sep 2023 09:05:48 +0200 Subject: [PATCH 2/3] change len of strings to size_t --- src/runtime_memory.h | 2 +- src/util/macros.h | 3 ++- src/util/strings.h | 6 +++--- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/runtime_memory.h b/src/runtime_memory.h index a54ab8d..e571c8f 100644 --- a/src/runtime_memory.h +++ b/src/runtime_memory.h @@ -73,7 +73,7 @@ void oc_wasm_list_push_back(oc_wasm_list* list, oc_wasm_list_elt* elt); typedef struct oc_wasm_str8 { u32 ptr; - u64 len; + u32 len; //NOTE: size_t is 4 bytes on wasm32 } oc_wasm_str8; typedef struct oc_wasm_str8_elt diff --git a/src/util/macros.h b/src/util/macros.h index d0c0651..c43c99d 100644 --- a/src/util/macros.h +++ b/src/util/macros.h @@ -111,7 +111,8 @@ inline T oc_cube(T a) #define oc_tga_variants(def, ...) \ def(u8, ##__VA_ARGS__) def(i8, ##__VA_ARGS__) def(u16, ##__VA_ARGS__) def(i16, ##__VA_ARGS__) \ def(u32, ##__VA_ARGS__) def(i32, ##__VA_ARGS__) def(u64, ##__VA_ARGS__) def(i64, ##__VA_ARGS__) \ - def(f32, ##__VA_ARGS__) def(f64, ##__VA_ARGS__) + def(size_t, ##__VA_ARGS__) \ + def(f32, ##__VA_ARGS__) def(f64, ##__VA_ARGS__) // This macro generates one _Generic association between a type and its variant #define oc_tga_association(type, name) , type : OC_CAT3(name, _, type) diff --git a/src/util/strings.h b/src/util/strings.h index 32da663..e3e44a3 100644 --- a/src/util/strings.h +++ b/src/util/strings.h @@ -35,7 +35,7 @@ extern "C" { typedef struct oc_str8 { char* ptr; - u64 len; + size_t len; } oc_str8; #define OC_STR8(s) ((oc_str8){ .len = (s) ? strlen(s) : 0, .ptr = (char*)s }) @@ -93,7 +93,7 @@ ORCA_API oc_str8_list oc_str8_split(oc_arena* arena, oc_str8 str, oc_str8_list s typedef struct oc_str16 { u16* ptr; - u64 len; + size_t len; } oc_str16; ORCA_API oc_str16 oc_str16_from_buffer(u64 len, u16* buffer); @@ -126,7 +126,7 @@ ORCA_API oc_str16_list oc_str16_split(oc_arena* arena, oc_str16 str, oc_str16_li typedef struct oc_str32 { u32* ptr; - u64 len; + size_t len; } oc_str32; ORCA_API oc_str32 oc_str32_from_buffer(u64 len, u32* buffer); -- 2.25.1 From 3e2f550b6802d84cee24cbc8639c2c1fae66fe54 Mon Sep 17 00:00:00 2001 From: Martin Fouilleul Date: Mon, 11 Sep 2023 14:15:35 +0200 Subject: [PATCH 3/3] switch order of designated enums in strings, to make it easier to compile in c++ mode --- src/graphics/graphics_common.c | 4 ++-- src/util/strings.c | 18 +++++++++--------- src/util/strings.h | 2 +- src/util/utf8.c | 6 +++--- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/graphics/graphics_common.c b/src/graphics/graphics_common.c index 406dcdf..27cd6f7 100644 --- a/src/graphics/graphics_common.c +++ b/src/graphics/graphics_common.c @@ -629,7 +629,7 @@ oc_str32 oc_font_get_glyph_indices_from_font_data(oc_font_data* fontData, oc_str } backing.ptr[i] = glyphIndex; } - oc_str32 res = { .len = count, .ptr = backing.ptr }; + oc_str32 res = {.ptr = backing.ptr , .len = count}; return (res); } @@ -1428,7 +1428,7 @@ oc_rect oc_glyph_outlines_from_font_data(oc_font_data* fontData, oc_str32 glyphI if(missingGlyphIndex) { - oc_font_get_glyph_metrics_from_font_data(fontData, (oc_str32){ .len = 1, .ptr = &missingGlyphIndex }, &missingGlyphMetrics); + oc_font_get_glyph_metrics_from_font_data(fontData, (oc_str32){.ptr = &missingGlyphIndex , .len = 1}, &missingGlyphMetrics); } else { diff --git a/src/util/strings.c b/src/util/strings.c index ed89bc9..72fbe3b 100644 --- a/src/util/strings.c +++ b/src/util/strings.c @@ -14,13 +14,13 @@ oc_str8 oc_str8_from_buffer(u64 len, char* buffer) { - return ((oc_str8){ .len = len, .ptr = buffer }); + return ((oc_str8){.ptr = buffer , .len = len}); } oc_str8 oc_str8_slice(oc_str8 s, u64 start, u64 end) { OC_ASSERT(start <= end && start <= s.len && end <= s.len); - return ((oc_str8){ .len = end - start, .ptr = s.ptr + start }); + return ((oc_str8){.ptr = s.ptr + start , .len = end - start}); } oc_str8 oc_str8_push_buffer(oc_arena* arena, u64 len, char* buffer) @@ -158,7 +158,7 @@ oc_str8 oc_str8_list_collate(oc_arena* arena, oc_str8_list list, oc_str8 prefix, oc_str8 oc_str8_list_join(oc_arena* arena, oc_str8_list list) { - oc_str8 empty = { .len = 0, .ptr = 0 }; + oc_str8 empty = {.ptr = 0 , .len = 0}; return (oc_str8_list_collate(arena, list, empty, empty, empty)); } @@ -221,13 +221,13 @@ oc_str8_list oc_str8_split(oc_arena* arena, oc_str8 str, oc_str8_list separators //---------------------------------------------------------------------------------- oc_str16 oc_str16_from_buffer(u64 len, u16* buffer) { - return ((oc_str16){ .len = len, .ptr = buffer }); + return ((oc_str16){.ptr = buffer , .len = len}); } oc_str16 oc_str16_slice(oc_str16 s, u64 start, u64 end) { OC_ASSERT(start <= end && start <= s.len && end <= s.len); - return ((oc_str16){ .len = end - start, .ptr = s.ptr + start }); + return ((oc_str16){.ptr = s.ptr + start , .len = end - start}); } oc_str16 oc_str16_push_buffer(oc_arena* arena, u64 len, u16* buffer) @@ -298,7 +298,7 @@ oc_str16 oc_str16_list_collate(oc_arena* arena, oc_str16_list list, oc_str16 pre oc_str16 oc_str16_list_join(oc_arena* arena, oc_str16_list list) { - oc_str16 empty = { .len = 0, .ptr = 0 }; + oc_str16 empty = {.ptr = 0 , .len = 0}; return (oc_str16_list_collate(arena, list, empty, empty, empty)); } @@ -307,13 +307,13 @@ oc_str16 oc_str16_list_join(oc_arena* arena, oc_str16_list list) //---------------------------------------------------------------------------------- oc_str32 oc_str32_from_buffer(u64 len, u32* buffer) { - return ((oc_str32){ .len = len, .ptr = buffer }); + return ((oc_str32){.ptr = buffer , .len = len}); } oc_str32 oc_str32_slice(oc_str32 s, u64 start, u64 end) { OC_ASSERT(start <= end && start <= s.len && end <= s.len); - return ((oc_str32){ .len = end - start, .ptr = s.ptr + start }); + return ((oc_str32){.ptr = s.ptr + start , .len = end - start}); } oc_str32 oc_str32_push_buffer(oc_arena* arena, u64 len, u32* buffer) @@ -384,6 +384,6 @@ oc_str32 oc_str32_list_collate(oc_arena* arena, oc_str32_list list, oc_str32 pre oc_str32 oc_str32_list_join(oc_arena* arena, oc_str32_list list) { - oc_str32 empty = { .len = 0, .ptr = 0 }; + oc_str32 empty = {.ptr = 0 , .len = 0}; return (oc_str32_list_collate(arena, list, empty, empty, empty)); } diff --git a/src/util/strings.h b/src/util/strings.h index e3e44a3..693a226 100644 --- a/src/util/strings.h +++ b/src/util/strings.h @@ -38,7 +38,7 @@ typedef struct oc_str8 size_t len; } oc_str8; -#define OC_STR8(s) ((oc_str8){ .len = (s) ? strlen(s) : 0, .ptr = (char*)s }) +#define OC_STR8(s) ((oc_str8){.ptr = (char*)s , .len = (s) ? strlen(s) : 0}) //NOTE: this only works with string literals, but is sometimes necessary to generate compile-time constants #define OC_STR8_LIT(s) \ diff --git a/src/util/utf8.c b/src/util/utf8.c index 1d41c4b..f992db4 100644 --- a/src/util/utf8.c +++ b/src/util/utf8.c @@ -225,7 +225,7 @@ oc_str8 oc_utf8_encode(char* dest, oc_utf32 codePoint) dest[3] = (codePoint & 0x3F) | 0x80; sz = 4; } - oc_str8 res = { .len = sz, .ptr = dest }; + oc_str8 res = {.ptr = dest , .len = sz}; return (res); } @@ -239,7 +239,7 @@ oc_str32 oc_utf8_to_codepoints(u64 maxCount, oc_utf32* backing, oc_str8 string) backing[codePointIndex] = decode.codepoint; byteOffset += decode.size; } - oc_str32 res = { .len = codePointIndex, .ptr = backing }; + oc_str32 res = {.ptr = backing , .len = codePointIndex}; return (res); } @@ -257,7 +257,7 @@ oc_str8 oc_utf8_from_codepoints(u64 maxBytes, char* backing, oc_str32 codePoints oc_utf8_encode(backing + byteOffset, codePoint); byteOffset += byteCount; } - oc_str8 res = { .len = byteOffset, .ptr = backing }; + oc_str8 res = {.ptr = backing , .len = byteOffset}; return (res); } -- 2.25.1