mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-29 17:34:43 +00:00
41 lines
1.0 KiB
Nim
41 lines
1.0 KiB
Nim
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
## Useful Constants
|
|
const NULL* = 0
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
## Memory Utility Functions
|
|
|
|
proc newHeap*[T](): ptr T =
|
|
result = cast[ptr T](alloc0(sizeof(T)))
|
|
|
|
proc copyNew*[T](x: var T): ptr T =
|
|
var
|
|
size = sizeof(T)
|
|
mem = alloc(size)
|
|
copyMem(mem, x.addr, size)
|
|
return cast[ptr T](mem)
|
|
|
|
proc copyTo*[T](val: var T, dest: int) =
|
|
copyMem(pointer(dest), val.addr, sizeof(T))
|
|
|
|
proc allocType*[T](): pointer = alloc(sizeof(T))
|
|
|
|
proc newShared*[T](): ptr T =
|
|
result = cast[ptr T](allocShared0(sizeof(T)))
|
|
|
|
proc copyShared*[T](x: var T): ptr T =
|
|
var
|
|
size = sizeof(T)
|
|
mem = allocShared(size)
|
|
copyMem(mem, x.addr, size)
|
|
return cast[ptr T](mem)
|
|
|
|
#------------------------------------------------------------------------------
|
|
## Pointer arithmetic
|
|
|
|
proc `+`*(p: pointer, i: int): pointer {.inline.} =
|
|
cast[pointer](cast[int](p) + i) |