nim-datastore/datastore/memoryds.nim

77 lines
1.4 KiB
Nim
Raw Normal View History

2023-08-28 18:22:53 -07:00
import std/tables
2023-08-28 19:22:16 -07:00
import std/sequtils
import std/strutils
2023-08-28 21:32:28 -07:00
import std/algorithm
2023-08-28 18:22:53 -07:00
import pkg/chronos
import pkg/questionable
import pkg/questionable/results
import pkg/upraises
import ./key
import ./query
2023-09-19 19:50:55 -07:00
import ./datastore2
2023-09-05 17:14:03 -07:00
import ./threads/databuffer
2023-09-19 19:50:55 -07:00
import ./threads/simpletable
import std/locks
2023-08-28 18:22:53 -07:00
export key, query
push: {.upraises: [].}
2023-09-19 19:24:56 -07:00
type
2023-09-19 20:16:27 -07:00
MemoryDatastore* = object
lock*: Lock
2023-09-19 19:24:56 -07:00
store*: SimpleTable[10_000]
2023-08-28 18:22:53 -07:00
2023-09-19 20:16:27 -07:00
proc has*(self: var MemoryDatastore, key: KeyBuffer): ?!bool =
2023-08-28 18:22:53 -07:00
withLock(self.lock):
2023-09-19 19:50:55 -07:00
let res: bool = self.store.hasKey(key)
return success res
2023-08-28 18:22:53 -07:00
2023-09-19 19:50:55 -07:00
proc delete*(
self: var MemoryDatastore,
key: KeyBuffer
): ?!void =
2023-08-28 18:22:53 -07:00
2023-08-28 18:37:14 -07:00
var val: ValueBuffer
withLock(self.lock):
2023-09-19 19:50:55 -07:00
discard self.store.pop(key, val)
2023-08-28 18:22:53 -07:00
return success()
2023-09-19 19:50:55 -07:00
proc get*(
self: var MemoryDatastore,
key: KeyBuffer
): ?!ValueBuffer =
2023-08-28 18:37:14 -07:00
2023-09-19 19:50:55 -07:00
let dk = key
withLock(self.lock):
2023-09-19 19:50:55 -07:00
let res = self.store[dk].catch
return res
proc put*(
self: var MemoryDatastore,
key: KeyBuffer,
data: ValueBuffer
2023-09-19 20:16:27 -07:00
): ?!void =
2023-08-28 18:22:53 -07:00
withLock(self.lock):
2023-09-19 19:50:55 -07:00
self.store[key] = data
2023-08-28 18:22:53 -07:00
return success()
2023-09-19 19:50:55 -07:00
proc close*(self: var MemoryDatastore): ?!void =
2023-08-28 18:40:33 -07:00
self.store.clear()
2023-08-28 18:22:53 -07:00
return success()
2023-09-19 20:16:27 -07:00
func initMemoryDatastore*(): Datastore2[MemoryDatastore] =
var self = Datastore2[MemoryDatastore]()
self.ds.lock.initLock()
2023-09-19 19:50:55 -07:00
self.has = has
self.delete = delete
self.get = get
self.put = put
self.close = close
2023-08-28 18:43:42 -07:00
return self