aboutsummaryrefslogtreecommitdiff
path: root/core/encoding
diff options
context:
space:
mode:
authorKarl Zylinski <karl@zylinski.se>2023-11-01 00:37:27 +0100
committerKarl Zylinski <karl@zylinski.se>2023-11-01 00:37:27 +0100
commitd8f06ed55741fe52ec7bf260dddc1a369cfa05a7 (patch)
tree9314e185211a48ddefca74f644a2339792ba0ce3 /core/encoding
parenta73ff00b0207ed211f2732ca4832ea6dd93e2d2f (diff)
Reversed order of sort_maps_by_key check in marshal.odin to make PR comparison clearer.
Diffstat (limited to 'core/encoding')
-rw-r--r--core/encoding/json/marshal.odin52
1 files changed, 26 insertions, 26 deletions
diff --git a/core/encoding/json/marshal.odin b/core/encoding/json/marshal.odin
index e53ab9a7c..80b2e4dd4 100644
--- a/core/encoding/json/marshal.odin
+++ b/core/encoding/json/marshal.odin
@@ -275,27 +275,23 @@ marshal_to_writer :: proc(w: io.Writer, v: any, opt: ^Marshal_Options) -> (err:
map_cap := uintptr(runtime.map_cap(m^))
ks, vs, hs, _, _ := runtime.map_kvh_data_dynamic(m^, info.map_info)
- if opt.sort_maps_by_key {
- Entry :: struct {
- key: string,
- value: any,
- }
-
- // If we are sorting the map by key, then we temp alloc an array
- // and sort it, then output the result.
- sorted := make([dynamic]Entry, 0, map_cap, context.temp_allocator)
+ 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))
- name: string
// 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:
@@ -303,38 +299,35 @@ marshal_to_writer :: proc(w: io.Writer, v: any, opt: ^Marshal_Options) -> (err:
case string: name = s
case cstring: name = string(s)
}
+ opt_write_key(w, opt, name) or_return
case: return .Unsupported_Type
}
}
- append(&sorted, Entry { key = name, value = any{value, info.value.id}})
- }
-
- slice.sort_by(sorted[:], proc(i, j: Entry) -> bool { return i.key < j.key })
-
- for s, i in sorted {
- opt_write_iteration(w, opt, i) or_return
- opt_write_key(w, opt, s.key) or_return
- marshal_to_writer(w, s.value, opt) or_return
+ marshal_to_writer(w, any{value, info.value.id}, opt) or_return
}
} else {
- i := 0
+ Entry :: struct {
+ key: string,
+ value: any,
+ }
+
+ // If we are sorting the map by key, then we temp alloc an array
+ // and sort it, then output the result.
+ sorted := make([dynamic]Entry, 0, map_cap, context.temp_allocator)
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))
+ name: string
// 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:
@@ -342,13 +335,20 @@ marshal_to_writer :: proc(w: io.Writer, v: any, opt: ^Marshal_Options) -> (err:
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
+ append(&sorted, Entry { key = name, value = any{value, info.value.id}})
+ }
+
+ slice.sort_by(sorted[:], proc(i, j: Entry) -> bool { return i.key < j.key })
+
+ for s, i in sorted {
+ opt_write_iteration(w, opt, i) or_return
+ opt_write_key(w, opt, s.key) or_return
+ marshal_to_writer(w, s.value, opt) or_return
}
}
}