summary refs log tree commit diff stats
path: root/lib/pure/collections/baseutils.nim
diff options
context:
space:
mode:
Diffstat (limited to 'lib/pure/collections/baseutils.nim')
-rw-r--r--lib/pure/collections/baseutils.nim41
1 files changed, 41 insertions, 0 deletions
diff --git a/lib/pure/collections/baseutils.nim b/lib/pure/collections/baseutils.nim
new file mode 100644
index 000000000..565a89ccb
--- /dev/null
+++ b/lib/pure/collections/baseutils.nim
@@ -0,0 +1,41 @@
+
+
+
+#------------------------------------------------------------------------------
+## 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)
\ No newline at end of file