raw.odin 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package mem
  2. Raw_Any :: struct {
  3. data: rawptr,
  4. id: typeid,
  5. }
  6. Raw_String :: struct {
  7. data: ^byte,
  8. len: int,
  9. }
  10. Raw_Cstring :: struct {
  11. data: ^byte,
  12. }
  13. Raw_Slice :: struct {
  14. data: rawptr,
  15. len: int,
  16. }
  17. Raw_Dynamic_Array :: struct {
  18. data: rawptr,
  19. len: int,
  20. cap: int,
  21. allocator: Allocator,
  22. }
  23. Raw_Map :: struct {
  24. hashes: []int,
  25. entries: Raw_Dynamic_Array,
  26. }
  27. Raw_Complex64 :: struct {real, imag: f32};
  28. Raw_Complex128 :: struct {real, imag: f64};
  29. Raw_Quaternion128 :: struct {imag, jmag, kmag: f32, real: f32};
  30. Raw_Quaternion256 :: struct {imag, jmag, kmag: f64, real: f64};
  31. Raw_Quaternion128_Vector_Scalar :: struct {vector: [3]f32, scalar: f32};
  32. Raw_Quaternion256_Vector_Scalar :: struct {vector: [3]f64, scalar: f64};
  33. make_any :: inline proc(data: rawptr, id: typeid) -> any {
  34. return transmute(any)Raw_Any{data, id};
  35. }
  36. raw_string_data :: inline proc(s: $T/string) -> ^byte {
  37. return (transmute(Raw_String)s).data;
  38. }
  39. raw_slice_data :: inline proc(a: $T/[]$E) -> ^E {
  40. return cast(^E)(transmute(Raw_Slice)a).data;
  41. }
  42. raw_dynamic_array_data :: inline proc(a: $T/[dynamic]$E) -> ^E {
  43. return cast(^E)(transmute(Raw_Dynamic_Array)a).data;
  44. }
  45. raw_data :: proc{raw_string_data, raw_slice_data, raw_dynamic_array_data};