2019-07-07 11:38:00 +02:00
|
|
|
import std/tables, ../objects
|
2019-03-12 04:32:08 +02:00
|
|
|
|
|
|
|
template init*[A, B](T: type Table[A, B]): auto = initTable[A, B]()
|
2019-08-02 15:26:08 +03:00
|
|
|
template init*[A, B](T: type TableRef[A, B]): auto = newTable[A, B]()
|
|
|
|
|
|
|
|
template init*[A, B](T: type OrderedTable[A, B]): auto = initOrderedTable[A, B]()
|
|
|
|
template init*[A, B](T: type OrderedTableRef[A, B]): auto = newOrderedTable[A, B]()
|
|
|
|
|
|
|
|
template init*[A](T: type CountTable[A]): auto = initCountTable[A]()
|
|
|
|
template init*[A](T: type CountTableRef[A]): auto = newCountTable[A]()
|
2019-03-12 04:32:08 +02:00
|
|
|
|
2020-08-07 21:39:46 +03:00
|
|
|
template mgetOrPutLazy*[A, B](t: Table[A, B], key: A, val: B): var B =
|
|
|
|
type R = B
|
|
|
|
|
|
|
|
proc setter(loc: var R): var R =
|
|
|
|
if loc == default(R):
|
|
|
|
loc = val
|
|
|
|
loc
|
|
|
|
|
|
|
|
setter(mgetOrPut(t, key, default(R)))
|
|
|
|
|
2019-03-12 04:32:08 +02:00
|
|
|
export tables, objects
|
2020-08-07 21:39:46 +03:00
|
|
|
|