Browse Source

Add make version of bitset to slice.

Jeroen van Rijn 1 year ago
parent
commit
a61d8daec1
1 changed files with 18 additions and 2 deletions
  1. 18 2
      core/slice/slice.odin

+ 18 - 2
core/slice/slice.odin

@@ -717,11 +717,27 @@ enum_slice_to_bitset :: proc(enums: []$E, $T: typeid/bit_set[E]) -> (bits: T) wh
 // e.g.:
 //    sl := slice.bitset_to_enum_slice(flag_buf[:], bs)
 @(require_results)
-bitset_to_enum_slice :: proc(buf: []$E, bs: $T) -> (slice: []E) where intrinsics.type_is_enum(E) && intrinsics.type_bit_set_elem_type(T) == E {
+bitset_to_enum_slice_with_buffer :: proc(buf: []$E, bs: $T) -> (slice: []E) where intrinsics.type_is_enum(E) && intrinsics.type_bit_set_elem_type(T) == E {
 	count := 0
 	for v in bs {
 		buf[count] = v
 		count += 1
 	}
 	return buf[:count]
-}
+}
+
+// Turn a `bit_set[E]` into a `[]E`, allocates
+// e.g.:
+//    sl := slice.bitset_to_enum_slice(bs)
+@(require_results)
+bitset_to_enum_slice_with_make :: proc(buf: []$E, bs: $T) -> (slice: []E) where intrinsics.type_is_enum(E) && intrinsics.type_bit_set_elem_type(T) == E {
+
+	count := 0
+	for v in bs {
+		buf[count] = v
+		count += 1
+	}
+	return buf[:count]
+}
+
+bitset_to_enum_slice :: proc{bitset_to_enum_slice_with_make, bitset_to_enum_slice_with_buffer}