default_allocators_windows.odin 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. //+build windows
  2. package runtime
  3. when ODIN_DEFAULT_TO_NIL_ALLOCATOR {
  4. // mem.nil_allocator reimplementation
  5. default_allocator_proc :: nil_allocator_proc
  6. default_allocator :: nil_allocator
  7. } else {
  8. default_allocator_proc :: proc(allocator_data: rawptr, mode: Allocator_Mode,
  9. size, alignment: int,
  10. old_memory: rawptr, old_size: int, loc := #caller_location) -> (data: []byte, err: Allocator_Error) {
  11. switch mode {
  12. case .Alloc, .Alloc_Non_Zeroed:
  13. data, err = _windows_default_alloc(size, alignment, mode == .Alloc)
  14. case .Free:
  15. _windows_default_free(old_memory)
  16. case .Free_All:
  17. return nil, .Mode_Not_Implemented
  18. case .Resize:
  19. data, err = _windows_default_resize(old_memory, old_size, size, alignment)
  20. case .Query_Features:
  21. set := (^Allocator_Mode_Set)(old_memory)
  22. if set != nil {
  23. set^ = {.Alloc, .Alloc_Non_Zeroed, .Free, .Resize, .Query_Features}
  24. }
  25. case .Query_Info:
  26. return nil, .Mode_Not_Implemented
  27. }
  28. return
  29. }
  30. default_allocator :: proc() -> Allocator {
  31. return Allocator{
  32. procedure = default_allocator_proc,
  33. data = nil,
  34. }
  35. }
  36. }