Types
PoolContainer[T] = ref object id: int data*: T available: bool
MemPool[T] = ref object when false: name entities: seq[PoolContainer[T]] start: int
Procs
proc new_MemPool[T](startlen: int): MemPool[T]
- Initialize a new memory pool with startlen entities
proc new_MemPool[T](startlen: int; initializer: proc (): T): MemPool[T]
- Initialize a new memory pool with startlen entities and invoke initializer on all entities
proc next[T](self: var MemPool[T]): PoolContainer[T]
- Returns the next available entity
proc delete[T](self: var MemPool[T]; ent: var PoolContainer[T])
- This marks the given entity as being free and sets start to it's id
proc release[T](self: var MemPool[T]; deinitializer: proc (self: var T))
- You only need to call this if your pooled items need to be deinitialized in a special way - normally you can just let things fall out of scope.
proc `[]`[T](self: MemPool[T]; idx: int): T
proc `[]`[T](self: var MemPool[T]; idx: int): var T
Templates
template with[T](self: PoolContainer[T]; varname, body: untyped): untyped
template withvar[T](self: PoolContainer[T]; varname, body: untyped): untyped