nim-datastore/datastore/memoryds.nim

79 lines
1.5 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-19 20:44:06 -07:00
import ./threads/sharedptr
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
2023-09-19 20:44:06 -07:00
export key, query, datastore2
2023-08-28 18:22:53 -07:00
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 20:59:20 -07:00
store*: SimpleTable[100]
2023-08-28 18:22:53 -07:00
2023-09-19 20:44:06 -07:00
proc has(self: SharedPtr[MemoryDatastore], key: KeyBuffer): ?!bool =
2023-08-28 18:22:53 -07:00
2023-09-19 20:44:06 -07:00
withLock(self[].lock):
let res: bool = self[].store.hasKey(key)
2023-09-19 19:50:55 -07:00
return success res
2023-08-28 18:22:53 -07:00
2023-09-19 20:44:06 -07:00
proc delete(
self: SharedPtr[MemoryDatastore],
2023-09-19 19:50:55 -07:00
key: KeyBuffer
): ?!void =
2023-08-28 18:22:53 -07:00
2023-08-28 18:37:14 -07:00
var val: ValueBuffer
2023-09-19 20:44:06 -07:00
withLock(self[].lock):
discard self[].store.pop(key, val)
2023-08-28 18:22:53 -07:00
return success()
2023-09-19 20:44:06 -07:00
proc get(
self: SharedPtr[MemoryDatastore],
2023-09-19 19:50:55 -07:00
key: KeyBuffer
): ?!ValueBuffer =
2023-08-28 18:37:14 -07:00
2023-09-19 19:50:55 -07:00
let dk = key
2023-09-19 20:44:06 -07:00
withLock(self[].lock):
let res = self[].store[dk].catch
2023-09-19 19:50:55 -07:00
return res
2023-09-19 20:44:06 -07:00
proc put(
self: SharedPtr[MemoryDatastore],
2023-09-19 19:50:55 -07:00
key: KeyBuffer,
data: ValueBuffer
2023-09-19 20:16:27 -07:00
): ?!void =
2023-08-28 18:22:53 -07:00
2023-09-19 20:44:06 -07:00
withLock(self[].lock):
self[].store[key] = data
2023-08-28 18:22:53 -07:00
return success()
2023-09-19 20:44:06 -07:00
proc close(self: SharedPtr[MemoryDatastore]): ?!void =
self[].store.clear()
2023-08-28 18:22:53 -07:00
return success()
2023-09-19 20:44:06 -07:00
proc initMemoryDatastore*(): Datastore2[MemoryDatastore] =
2023-09-19 20:16:27 -07:00
var self = Datastore2[MemoryDatastore]()
2023-09-19 20:44:06 -07:00
self.ids = newSharedPtr(MemoryDatastore)
self.ids[].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