mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-05 07:08:48 +00:00
Simplify bitset_to_enum_slice
This commit is contained in:
+3
-12
@@ -731,18 +731,9 @@ bitset_to_enum_slice_with_buffer :: proc(buf: []$E, bs: $T) -> (slice: []E) wher
|
|||||||
// sl := slice.bitset_to_enum_slice(bs)
|
// sl := slice.bitset_to_enum_slice(bs)
|
||||||
@(require_results)
|
@(require_results)
|
||||||
bitset_to_enum_slice_with_make :: proc(bs: $T, $E: typeid) -> (slice: []E) where intrinsics.type_is_enum(E), intrinsics.type_bit_set_elem_type(T) == E {
|
bitset_to_enum_slice_with_make :: proc(bs: $T, $E: typeid) -> (slice: []E) where intrinsics.type_is_enum(E), intrinsics.type_bit_set_elem_type(T) == E {
|
||||||
count := 0
|
ones := intrinsics.count_ones(transmute(E)bs)
|
||||||
for _ in bs {
|
buf := make([]E, int(ones))
|
||||||
count += 1
|
return bitset_to_enum_slice(buf, bs)
|
||||||
}
|
|
||||||
slice = make([]E, count)
|
|
||||||
|
|
||||||
i := 0
|
|
||||||
for v in bs {
|
|
||||||
slice[i] = v
|
|
||||||
i += 1
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bitset_to_enum_slice :: proc{bitset_to_enum_slice_with_make, bitset_to_enum_slice_with_buffer}
|
bitset_to_enum_slice :: proc{bitset_to_enum_slice_with_make, bitset_to_enum_slice_with_buffer}
|
||||||
Reference in New Issue
Block a user