data/mempools

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

Funcs

func low[T](self: MemPool[T]): int
func high[T](self: MemPool[T]): int

Iterators

iterator items[T](self: MemPool[T]): T {...}{.inline.}
iterator mitems[T](self: MemPool[T]): var T {...}{.inline.}

Templates

template with[T](self: PoolContainer[T]; varname, body: untyped): untyped
template withvar[T](self: PoolContainer[T]; varname, body: untyped): untyped