mirror of
https://github.com/logos-storage/nim-datastore.git
synced 2026-05-20 16:49:31 +00:00
openArray compare
This commit is contained in:
parent
1627e4d286
commit
b388d242bb
@ -42,6 +42,11 @@ proc `==`*(a, b: DataBuffer): bool =
|
|||||||
elif a[].buf == b[].buf: return true
|
elif a[].buf == b[].buf: return true
|
||||||
else: a.hash() == b.hash()
|
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 =
|
proc new*(tp: type DataBuffer, capacity: int = 0): DataBuffer =
|
||||||
## allocate new buffer with given capacity
|
## 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) =
|
proc clear*(db: DataBuffer) =
|
||||||
zeroMem(db[].buf, db[].cap)
|
zeroMem(db[].buf, db[].cap)
|
||||||
|
db[].size = 0
|
||||||
|
|
||||||
proc setData*[T: byte | char](db: DataBuffer, data: openArray[T]) =
|
proc setData*[T: byte | char](db: DataBuffer, data: openArray[T]) =
|
||||||
## allocate new buffer and copies indata from openArray
|
## 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")
|
raise newException(IndexDefect, "data too large for buffer")
|
||||||
db.clear() # this is expensive, but we can optimize later
|
db.clear() # this is expensive, but we can optimize later
|
||||||
copyMem(db[].buf, baseAddr data, data.len())
|
copyMem(db[].buf, baseAddr data, data.len())
|
||||||
|
|||||||
@ -109,6 +109,16 @@ suite "Share buffer test":
|
|||||||
check cstr.capacity() == 5
|
check cstr.capacity() == 5
|
||||||
check "test" == cstr.toString()
|
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":
|
test "basic openArray test":
|
||||||
proc letters(val: openArray[char]): int =
|
proc letters(val: openArray[char]): int =
|
||||||
val.len()
|
val.len()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user