Browse Source

Add slice.to_type

Jeroen van Rijn 10 months ago
parent
commit
eba7be34e7
1 changed files with 11 additions and 0 deletions
  1. 11 0
      core/slice/slice.odin

+ 11 - 0
core/slice/slice.odin

@@ -36,6 +36,17 @@ to_bytes :: proc "contextless" (s: []$T) -> []byte {
 	return ([^]byte)(raw_data(s))[:len(s) * size_of(T)]
 	return ([^]byte)(raw_data(s))[:len(s) * size_of(T)]
 }
 }
 
 
+/*
+	Turns a byte slice into a type.
+*/
+@(require_results)
+to_type :: proc(buf: []u8, $T: typeid) -> (T, bool) #optional_ok {
+	if len(buf) < size_of(T) {
+		return {}, false
+	}
+	return intrinsics.unaligned_load((^T)(raw_data(buf))), true
+}
+
 /*
 /*
 	Turn a slice of one type, into a slice of another type.
 	Turn a slice of one type, into a slice of another type.