adix/topk

Source   Edit  

Types

Partn = enum
  last, ran
Source   Edit  
TopK[T] = object
A TopK accumulator; init; push; iterate Source   Edit  
TopKOrder = enum
  Descending, Ascending, Cheap
Source   Edit  

Procs

proc clear[T](t: var TopK[T])
Reset TopK accumulator Source   Edit  
proc initTopK[T](k = 10; partn = last): TopK[T]
Initialize a TopK-accumulator for top-k; Usage is simply:
var t = initTopK(); for e in 1..99: t.push e
for e in t: echo e
Source   Edit  
proc push[T](t: var TopK[T]; e: sink T)
Incorporate element e into t for eventual exact for e in t: ... Source   Edit  
proc saw[T](t: TopK[T]): int
push count since last init|clear Source   Edit  

Iterators

iterator ascending[T](t: var TopK[T]): lent T
iterate over t yielding top items in ASCENDING order. Source   Edit  
iterator descending[T](t: var TopK[T]): lent T
iterate over t yielding top items in DESCENDING order. Source   Edit  
iterator items[T](t: var TopK[T]): lent T
iterate over t yielding top items in cheapest/system order. Source   Edit  
iterator maybeOrdered[T](t: var TopK[T]; order = topk.Cheap): lent T
iterate over t yielding top items in various orders. Source   Edit