default_allocators_nil.odin 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package runtime
  2. nil_allocator_proc :: proc(allocator_data: rawptr, mode: Allocator_Mode,
  3. size, alignment: int,
  4. old_memory: rawptr, old_size: int, loc := #caller_location) -> ([]byte, Allocator_Error) {
  5. switch mode {
  6. case .Alloc, .Alloc_Non_Zeroed:
  7. return nil, .Out_Of_Memory
  8. case .Free:
  9. return nil, .None
  10. case .Free_All:
  11. return nil, .Mode_Not_Implemented
  12. case .Resize, .Resize_Non_Zeroed:
  13. if size == 0 {
  14. return nil, .None
  15. }
  16. return nil, .Out_Of_Memory
  17. case .Query_Features:
  18. return nil, .Mode_Not_Implemented
  19. case .Query_Info:
  20. return nil, .Mode_Not_Implemented
  21. }
  22. return nil, .None
  23. }
  24. nil_allocator :: proc() -> Allocator {
  25. return Allocator{
  26. procedure = nil_allocator_proc,
  27. data = nil,
  28. }
  29. }
  30. panic_allocator_proc :: proc(allocator_data: rawptr, mode: Allocator_Mode,
  31. size, alignment: int,
  32. old_memory: rawptr, old_size: int, loc := #caller_location) -> ([]byte, Allocator_Error) {
  33. switch mode {
  34. case .Alloc:
  35. if size > 0 {
  36. panic("panic allocator, .Alloc called", loc=loc)
  37. }
  38. case .Alloc_Non_Zeroed:
  39. if size > 0 {
  40. panic("panic allocator, .Alloc_Non_Zeroed called", loc=loc)
  41. }
  42. case .Resize:
  43. if size > 0 {
  44. panic("panic allocator, .Resize called", loc=loc)
  45. }
  46. case .Resize_Non_Zeroed:
  47. if size > 0 {
  48. panic("panic allocator, .Alloc_Non_Zeroed called", loc=loc)
  49. }
  50. case .Free:
  51. if old_memory != nil {
  52. panic("panic allocator, .Free called", loc=loc)
  53. }
  54. case .Free_All:
  55. panic("panic allocator, .Free_All called", loc=loc)
  56. case .Query_Features:
  57. set := (^Allocator_Mode_Set)(old_memory)
  58. if set != nil {
  59. set^ = {.Query_Features}
  60. }
  61. return nil, nil
  62. case .Query_Info:
  63. panic("panic allocator, .Query_Info called", loc=loc)
  64. }
  65. return nil, nil
  66. }
  67. panic_allocator :: proc() -> Allocator {
  68. return Allocator{
  69. procedure = panic_allocator_proc,
  70. data = nil,
  71. }
  72. }