From b388d242bba2df2f9078f199bd952c14bc6fca86 Mon Sep 17 00:00:00 2001 From: Jaremy Creechley Date: Wed, 20 Sep 2023 19:48:31 -0700 Subject: [PATCH] openArray compare --- datastore/threads/databuffer.nim | 8 +++++++- tests/datastore/testdatabuffer.nim | 10 ++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/datastore/threads/databuffer.nim b/datastore/threads/databuffer.nim index a7b0f3f..3fcad0e 100644 --- a/datastore/threads/databuffer.nim +++ b/datastore/threads/databuffer.nim @@ -42,6 +42,11 @@ proc `==`*(a, b: DataBuffer): bool = elif a[].buf == b[].buf: return true else: a.hash() == b.hash() +template `==`*[T: char | byte](a: DataBuffer, b: openArray[T]): bool = + if a.isNil: false + elif a[].size != b.len: false + else: a.hash() == b.hash() + proc new*(tp: type DataBuffer, capacity: int = 0): DataBuffer = ## allocate new buffer with given capacity ## @@ -65,11 +70,12 @@ proc new*[T: byte | char](tp: type DataBuffer, data: openArray[T], opts: set[Dat proc clear*(db: DataBuffer) = zeroMem(db[].buf, db[].cap) + db[].size = 0 proc setData*[T: byte | char](db: DataBuffer, data: openArray[T]) = ## allocate new buffer and copies indata from openArray ## - if data.len() > db.len(): + if data.len() > db[].cap: raise newException(IndexDefect, "data too large for buffer") db.clear() # this is expensive, but we can optimize later copyMem(db[].buf, baseAddr data, data.len()) diff --git a/tests/datastore/testdatabuffer.nim b/tests/datastore/testdatabuffer.nim index 58d1e82..0c6fa46 100644 --- a/tests/datastore/testdatabuffer.nim +++ b/tests/datastore/testdatabuffer.nim @@ -109,6 +109,16 @@ suite "Share buffer test": check cstr.capacity() == 5 check "test" == cstr.toString() + test "basic clear test": + let test = DataBuffer.new("test", {dbNullTerminate}) + test.clear() + check "" == test.toString() + test.setData("hi") + check "hi" == test.toString() + + test "check openArray compare": + assert a == toOpenArray(@"/a/b", 0, 3) + test "basic openArray test": proc letters(val: openArray[char]): int = val.len()