summary refs log blame commit diff stats
path: root/lib/pure/collections/baseutils.nim
blob: 565a89ccbfa3be7d9961671f39d9a49937a23688 (plain) (tree)








































                                                                               
#------------------------------------------------------------------------------
## 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)