From a7f6794f7efeb90d3ae321fadebf64e44e9e6dae Mon Sep 17 00:00:00 2001 From: Jaremy Creechley Date: Mon, 28 Aug 2023 19:41:37 -0700 Subject: [PATCH] add memory (test) ds --- datastore/databuffer.nim | 13 +++++++++++++ datastore/memoryds.nim | 6 ++++++ 2 files changed, 19 insertions(+) diff --git a/datastore/databuffer.nim b/datastore/databuffer.nim index 2bafb95..44fe2d3 100644 --- a/datastore/databuffer.nim +++ b/datastore/databuffer.nim @@ -1,5 +1,8 @@ # import std/atomics import threading/smartptrs +import std/hashes + +export hashes type DataBufferHolder* = object @@ -29,6 +32,16 @@ proc len*(a: DataBuffer): int = a[].size proc isNil*(a: DataBuffer): bool = smartptrs.isNil(a) +proc hash*(a: DataBuffer): Hash = + a[].buf.toOpenArray(0, a[].size-1).hash() + +proc `==`*(a, b: DataBuffer): bool = + if a.isNil and b.isNil: return true + elif a.isNil or b.isNil: return false + elif a[].size != b[].size: return false + elif a[].buf == b[].buf: return true + else: a.hash() == b.hash() + proc new*(tp: typedesc[DataBuffer], size: int = 0): DataBuffer = ## allocate new buffer with given size newSharedPtr(DataBufferHolder( diff --git a/datastore/memoryds.nim b/datastore/memoryds.nim index e300fee..dbc6421 100644 --- a/datastore/memoryds.nim +++ b/datastore/memoryds.nim @@ -49,12 +49,18 @@ method delete*( return success() +import pretty + method get*( self: MemoryDatastore, key: Key ): Future[?!seq[byte]] {.async.} = let dk = KeyBuffer.new(key) + echo "getting: ", key + for k, v in self.store.pairs(): + print "get: ", k.toString() + if self.store.hasKey(dk): let res = self.store[dk] return success res.toSeq(byte)