raw.odin 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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 :: proc(data: rawptr, id: typeid) -> any {
  34. return transmute(any)Raw_Any{data, id};
  35. }
  36. raw_array_data :: proc(a: $P/^($T/[$N]$E)) -> ^E {
  37. return (^E)(a);
  38. }
  39. raw_string_data :: proc(s: $T/string) -> ^byte {
  40. return (transmute(Raw_String)s).data;
  41. }
  42. raw_slice_data :: proc(a: $T/[]$E) -> ^E {
  43. return cast(^E)(transmute(Raw_Slice)a).data;
  44. }
  45. raw_dynamic_array_data :: proc(a: $T/[dynamic]$E) -> ^E {
  46. return cast(^E)(transmute(Raw_Dynamic_Array)a).data;
  47. }
  48. raw_data :: proc{raw_array_data, raw_string_data, raw_slice_data, raw_dynamic_array_data};
  49. Poly_Raw_Map_Entry :: struct($Key, $Value: typeid) {
  50. hash: uintptr,
  51. next: int,
  52. key: Key,
  53. value: Value,
  54. }
  55. Poly_Raw_Map :: struct($Key, $Value: typeid) {
  56. hashes: []int,
  57. entries: [dynamic]Poly_Raw_Map_Entry(Key, Value),
  58. }