mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-04 14:48:47 +00:00
Reversed order of sort_maps_by_key check in marshal.odin to make PR comparison clearer.
This commit is contained in:
@@ -275,7 +275,39 @@ marshal_to_writer :: proc(w: io.Writer, v: any, opt: ^Marshal_Options) -> (err:
|
|||||||
map_cap := uintptr(runtime.map_cap(m^))
|
map_cap := uintptr(runtime.map_cap(m^))
|
||||||
ks, vs, hs, _, _ := runtime.map_kvh_data_dynamic(m^, info.map_info)
|
ks, vs, hs, _, _ := runtime.map_kvh_data_dynamic(m^, info.map_info)
|
||||||
|
|
||||||
if opt.sort_maps_by_key {
|
if !opt.sort_maps_by_key {
|
||||||
|
i := 0
|
||||||
|
for bucket_index in 0..<map_cap {
|
||||||
|
runtime.map_hash_is_valid(hs[bucket_index]) or_continue
|
||||||
|
|
||||||
|
opt_write_iteration(w, opt, i) or_return
|
||||||
|
i += 1
|
||||||
|
|
||||||
|
key := rawptr(runtime.map_cell_index_dynamic(ks, info.map_info.ks, bucket_index))
|
||||||
|
value := rawptr(runtime.map_cell_index_dynamic(vs, info.map_info.vs, bucket_index))
|
||||||
|
|
||||||
|
// check for string type
|
||||||
|
{
|
||||||
|
v := any{key, info.key.id}
|
||||||
|
ti := runtime.type_info_base(type_info_of(v.id))
|
||||||
|
a := any{v.data, ti.id}
|
||||||
|
name: string
|
||||||
|
|
||||||
|
#partial switch info in ti.variant {
|
||||||
|
case runtime.Type_Info_String:
|
||||||
|
switch s in a {
|
||||||
|
case string: name = s
|
||||||
|
case cstring: name = string(s)
|
||||||
|
}
|
||||||
|
opt_write_key(w, opt, name) or_return
|
||||||
|
|
||||||
|
case: return .Unsupported_Type
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
marshal_to_writer(w, any{value, info.value.id}, opt) or_return
|
||||||
|
}
|
||||||
|
} else {
|
||||||
Entry :: struct {
|
Entry :: struct {
|
||||||
key: string,
|
key: string,
|
||||||
value: any,
|
value: any,
|
||||||
@@ -318,38 +350,6 @@ marshal_to_writer :: proc(w: io.Writer, v: any, opt: ^Marshal_Options) -> (err:
|
|||||||
opt_write_key(w, opt, s.key) or_return
|
opt_write_key(w, opt, s.key) or_return
|
||||||
marshal_to_writer(w, s.value, opt) or_return
|
marshal_to_writer(w, s.value, opt) or_return
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
i := 0
|
|
||||||
for bucket_index in 0..<map_cap {
|
|
||||||
runtime.map_hash_is_valid(hs[bucket_index]) or_continue
|
|
||||||
|
|
||||||
opt_write_iteration(w, opt, i) or_return
|
|
||||||
i += 1
|
|
||||||
|
|
||||||
key := rawptr(runtime.map_cell_index_dynamic(ks, info.map_info.ks, bucket_index))
|
|
||||||
value := rawptr(runtime.map_cell_index_dynamic(vs, info.map_info.vs, bucket_index))
|
|
||||||
|
|
||||||
// check for string type
|
|
||||||
{
|
|
||||||
v := any{key, info.key.id}
|
|
||||||
ti := runtime.type_info_base(type_info_of(v.id))
|
|
||||||
a := any{v.data, ti.id}
|
|
||||||
name: string
|
|
||||||
|
|
||||||
#partial switch info in ti.variant {
|
|
||||||
case runtime.Type_Info_String:
|
|
||||||
switch s in a {
|
|
||||||
case string: name = s
|
|
||||||
case cstring: name = string(s)
|
|
||||||
}
|
|
||||||
opt_write_key(w, opt, name) or_return
|
|
||||||
|
|
||||||
case: return .Unsupported_Type
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
marshal_to_writer(w, any{value, info.value.id}, opt) or_return
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user