mirror of
https://github.com/logos-storage/nim-datastore.git
synced 2026-01-09 00:53:08 +00:00
cleanup
This commit is contained in:
parent
aa0392486f
commit
a27102675e
@ -1,16 +1,17 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
# import std/atomics
|
# import std/atomics
|
||||||
import threading/smartptrs
|
import threading/smartptrs
|
||||||
|
|
||||||
|
|
||||||
type
|
type
|
||||||
DataBufferHolder* = object
|
DataBufferHolder* = object
|
||||||
buf: ptr UncheckedArray[byte]
|
buf: ptr UncheckedArray[byte]
|
||||||
size: int
|
size: int
|
||||||
|
|
||||||
DataBuffer* = SharedPtr[DataBufferHolder]
|
DataBuffer* = SharedPtr[DataBufferHolder] ##\
|
||||||
|
## A fixed length data buffer using a SharedPtr.
|
||||||
|
## It is thread safe even with `refc` since
|
||||||
|
## it doesn't use string or seq types internally.
|
||||||
|
##
|
||||||
|
|
||||||
KeyBuffer* = DataBuffer
|
KeyBuffer* = DataBuffer
|
||||||
ValueBuffer* = DataBuffer
|
ValueBuffer* = DataBuffer
|
||||||
StringBuffer* = DataBuffer
|
StringBuffer* = DataBuffer
|
||||||
@ -27,6 +28,7 @@ proc `=destroy`*(x: var DataBufferHolder) =
|
|||||||
proc len*(a: DataBuffer): int = a[].size
|
proc len*(a: DataBuffer): int = a[].size
|
||||||
|
|
||||||
proc new*(tp: typedesc[DataBuffer], size: int = 0): DataBuffer =
|
proc new*(tp: typedesc[DataBuffer], size: int = 0): DataBuffer =
|
||||||
|
## allocate new buffer with given size
|
||||||
newSharedPtr(DataBufferHolder(
|
newSharedPtr(DataBufferHolder(
|
||||||
buf: cast[typeof(result[].buf)](allocShared0(size)),
|
buf: cast[typeof(result[].buf)](allocShared0(size)),
|
||||||
size: size,
|
size: size,
|
||||||
@ -40,18 +42,22 @@ proc new*[T: byte | char](tp: typedesc[DataBuffer], data: openArray[T]): DataBuf
|
|||||||
copyMem(result[].buf, unsafeAddr data[0], data.len)
|
copyMem(result[].buf, unsafeAddr data[0], data.len)
|
||||||
|
|
||||||
proc toSeq*[T: byte | char](a: DataBuffer, tp: typedesc[T]): seq[T] =
|
proc toSeq*[T: byte | char](a: DataBuffer, tp: typedesc[T]): seq[T] =
|
||||||
|
## convert buffer to a seq type using copy and either a byte or char
|
||||||
result = newSeq[T](a.len)
|
result = newSeq[T](a.len)
|
||||||
copyMem(addr result[0], unsafeAddr a[].buf[0], a.len)
|
copyMem(addr result[0], unsafeAddr a[].buf[0], a.len)
|
||||||
|
|
||||||
proc toString*(data: DataBuffer): string =
|
proc toString*(data: DataBuffer): string =
|
||||||
|
## convert buffer to string type using copy
|
||||||
result = newString(data.len())
|
result = newString(data.len())
|
||||||
if data.len() > 0:
|
if data.len() > 0:
|
||||||
copyMem(addr result[0], unsafeAddr data[].buf[0], data.len)
|
copyMem(addr result[0], unsafeAddr data[].buf[0], data.len)
|
||||||
|
|
||||||
proc toCatchable*(data: CatchableErrorBuffer): ref CatchableError =
|
proc toCatchable*(err: CatchableErrorBuffer): ref CatchableError =
|
||||||
result = (ref CatchableError)(msg: data.msg.toString())
|
## convert back to a ref CatchableError
|
||||||
|
result = (ref CatchableError)(msg: err.msg.toString())
|
||||||
|
|
||||||
proc toBuffer*(err: ref Exception): CatchableErrorBuffer =
|
proc toBuffer*(err: ref Exception): CatchableErrorBuffer =
|
||||||
|
## convert exception to an object with StringBuffer
|
||||||
return CatchableErrorBuffer(
|
return CatchableErrorBuffer(
|
||||||
msg: StringBuffer.new(err.msg)
|
msg: StringBuffer.new(err.msg)
|
||||||
)
|
)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user