default_allocators_nil.odin 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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:
  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. when ODIN_OS == .Freestanding {
  31. default_allocator_proc :: nil_allocator_proc
  32. default_allocator :: nil_allocator
  33. }
  34. panic_allocator_proc :: proc(allocator_data: rawptr, mode: Allocator_Mode,
  35. size, alignment: int,
  36. old_memory: rawptr, old_size: int, loc := #caller_location) -> ([]byte, Allocator_Error) {
  37. switch mode {
  38. case .Alloc:
  39. if size > 0 {
  40. panic("panic allocator, .Alloc called", loc=loc)
  41. }
  42. case .Alloc_Non_Zeroed:
  43. if size > 0 {
  44. panic("panic allocator, .Alloc_Non_Zeroed called", loc=loc)
  45. }
  46. case .Resize:
  47. if size > 0 {
  48. panic("panic allocator, .Resize 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. }