mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-29 01:14:41 +00:00
49 lines
1.5 KiB
Nim
49 lines
1.5 KiB
Nim
#
|
|
#
|
|
# Nim's Runtime Library
|
|
# (c) Copyright 2017 Nim contributors
|
|
#
|
|
# See the file "copying.txt", included in this
|
|
# distribution, for details about the copyright.
|
|
#
|
|
|
|
type
|
|
AllocatorFlag* {.pure.} = enum ## flags describing the properties of the allocator
|
|
ThreadLocal ## the allocator is thread local only.
|
|
ZerosMem ## the allocator always zeros the memory on an allocation
|
|
Allocator* = ptr object {.inheritable.}
|
|
alloc*: proc (a: Allocator; size: int; alignment: int = 8): pointer {.nimcall.}
|
|
dealloc*: proc (a: Allocator; p: pointer; size: int) {.nimcall.}
|
|
realloc*: proc (a: Allocator; p: pointer; oldSize, newSize: int): pointer {.nimcall.}
|
|
deallocAll*: proc (a: Allocator) {.nimcall.}
|
|
flags*: set[AllocatorFlag]
|
|
|
|
var
|
|
localAllocator {.threadvar.}: Allocator
|
|
sharedAllocator: Allocator
|
|
|
|
proc getLocalAllocator*(): Allocator =
|
|
result = localAllocator
|
|
|
|
proc setLocalAllocator*(a: Allocator) =
|
|
localAllocator = a
|
|
|
|
proc getSharedAllocator*(): Allocator =
|
|
result = sharedAllocator
|
|
|
|
proc setSharedAllocator*(a: Allocator) =
|
|
sharedAllocator = a
|
|
|
|
when false:
|
|
proc alloc*(size: int; alignment: int = 8): pointer =
|
|
let a = getCurrentAllocator()
|
|
result = a.alloc(a, size, alignment)
|
|
|
|
proc dealloc*(p: pointer; size: int) =
|
|
let a = getCurrentAllocator()
|
|
a.dealloc(a, p, size)
|
|
|
|
proc realloc*(p: pointer; oldSize, newSize: int): pointer =
|
|
let a = getCurrentAllocator()
|
|
result = a.realloc(a, p, oldSize, newSize)
|