memretainers.nim
1 import std/tables 2 3 import ./types 4 export types 5 6 type 7 Retainer* = ref object of RootObj 8 9 SeqRetainer*[T] = ref object of Retainer 10 data*: seq[T] 11 12 StrRetainer* = ref object of Retainer 13 data*: string 14 15 var memoryRetainerTable = newTable[uint, seq[Retainer]]() 16 17 proc retainMemory*(id: JobId, mem: Retainer) {.gcsafe, raises: [].} = 18 {.cast(gcsafe).}: 19 memoryRetainerTable[].withValue(id, value): 20 value[].add(mem) 21 do: 22 memoryRetainerTable[id] = @[mem] 23 24 proc releaseMemory*(id: JobId) {.gcsafe, raises: [].} = 25 {.cast(gcsafe).}: 26 memoryRetainerTable.del(id) 27 28 proc retainedMemoryCount*(): int {.gcsafe, raises: [].} = 29 {.cast(gcsafe).}: 30 memoryRetainerTable.len()