raw.odin 867 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  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. make_any :: inline proc(data: rawptr, id: typeid) -> any {
  28. return transmute(any)Raw_Any{data, id};
  29. }
  30. raw_string_data :: inline proc(s: $T/string) -> ^byte {
  31. return (^Raw_String)(&s).data;
  32. }
  33. raw_slice_data :: inline proc(a: $T/[]$E) -> ^E {
  34. return cast(^E)(^Raw_Slice)(&a).data;
  35. }
  36. raw_dynamic_array_data :: inline proc(a: $T/[dynamic]$E) -> ^E {
  37. return cast(^E)(^Raw_Dynamic_Array)(&a).data;
  38. }
  39. raw_data :: proc[raw_string_data, raw_slice_data, raw_dynamic_array_data];