mirror of
https://github.com/odin-lang/Odin.git
synced 2026-09-02 18:23:35 +00:00
@@ -437,6 +437,12 @@ _append_soa_elem :: proc(#no_alias array: ^$T/#soa[dynamic]$E, zero_memory: bool
|
||||
err = _reserve_soa(array, cap, zero_memory, loc) // do not 'or_return' here as it could be a partial success
|
||||
}
|
||||
|
||||
if size_of(E) == 0 {
|
||||
footer := raw_soa_footer(array)
|
||||
footer.len += 1
|
||||
return 1, nil
|
||||
}
|
||||
|
||||
if size_of(E) > 0 && cap(array)-len(array) > 0 {
|
||||
footer := raw_soa_footer(array)
|
||||
// Field stores are generated by the compiler's #soa
|
||||
@@ -480,10 +486,14 @@ _append_soa_elems :: proc(#no_alias array: ^$T/#soa[dynamic]$E, zero_memory: boo
|
||||
|
||||
footer := raw_soa_footer(array)
|
||||
if size_of(E) > 0 && arg_len > 0 {
|
||||
offset := footer.len
|
||||
FIELD_COUNT :: len(E) when intrinsics.type_is_array(E) else intrinsics.type_struct_field_count(E)
|
||||
// Advance len before the copy, soa_copy_from_slice needs the final len to be set
|
||||
when FIELD_COUNT != 0 {
|
||||
offset := footer.len
|
||||
}
|
||||
|
||||
footer.len += arg_len
|
||||
|
||||
when FIELD_COUNT == 0 {
|
||||
// do nothing
|
||||
} else when FIELD_COUNT <= 16 && ODIN_OPTIMIZATION_MODE <= .Size {
|
||||
|
||||
Reference in New Issue
Block a user