mirror of
https://github.com/logos-storage/swarmsim.git
synced 2026-01-30 03:23:11 +00:00
29 lines
594 B
Nim
29 lines
594 B
Nim
import std/tables
|
|
|
|
type MultiTable[K, V] = Table[K, seq[V]]
|
|
|
|
proc new*[K, V](T: type MultiTable[K, V]): MultiTable[K, V] =
|
|
initTable[K, seq[V]]()
|
|
|
|
proc add*[K, V](self: var MultiTable[K, V], key: K, value: V) =
|
|
discard self.hasKeyOrPut(key, @[])
|
|
self[key].add(value)
|
|
|
|
proc remove*[K, V](self: var MultiTable[K, V], key: K, value: V) =
|
|
if not self.hasKey(key):
|
|
return
|
|
|
|
var values = self[key]
|
|
let index = values.find(value)
|
|
if index <= 0:
|
|
return
|
|
|
|
values.delete(index)
|
|
if values.len == 0:
|
|
self.del(key)
|
|
else:
|
|
self[key] = values
|
|
|
|
export MultiTable
|
|
export tables
|