mirror of
https://github.com/logos-storage/nim-datastore.git
synced 2026-01-04 14:43:12 +00:00
setting up thread backend
This commit is contained in:
parent
edc9321658
commit
d39c0965ff
@ -16,6 +16,7 @@ type
|
||||
|
||||
KeyBuffer* = DataBuffer
|
||||
ValueBuffer* = DataBuffer
|
||||
StringBuffer* = DataBuffer
|
||||
|
||||
proc `$`*(data: DataBuffer): string =
|
||||
if data.buf.isNil:
|
||||
@ -62,10 +63,6 @@ proc unsafeGetAtomicCount*(a: DataBuffer): int =
|
||||
|
||||
proc len*(a: DataBuffer): int = a.size
|
||||
|
||||
proc toSeq*[T: byte | char](a: DataBuffer, tp: typedesc[T]): seq[T] =
|
||||
result = newSeq[T](a.len)
|
||||
copyMem(addr result[0], unsafeAddr a.buf[0], a.len)
|
||||
|
||||
proc new*(tp: typedesc[DataBuffer], size: int = 0): DataBuffer =
|
||||
let cnt = cast[ptr int](allocShared0(sizeof(result.cnt)))
|
||||
cnt[] = 1
|
||||
@ -81,3 +78,12 @@ proc new*[T: byte | char](tp: typedesc[DataBuffer], data: openArray[T]): DataBuf
|
||||
result = DataBuffer.new(data.len)
|
||||
if data.len() > 0:
|
||||
copyMem(result.buf, unsafeAddr data[0], data.len)
|
||||
|
||||
proc toSeq*[T: byte | char](a: DataBuffer, tp: typedesc[T]): seq[T] =
|
||||
result = newSeq[T](a.len)
|
||||
copyMem(addr result[0], unsafeAddr a.buf[0], a.len)
|
||||
|
||||
proc toString*(data: StringBuffer): string =
|
||||
result = newString(data.len())
|
||||
if data.len() > 0:
|
||||
copyMem(addr result[0], unsafeAddr data.buf[0], data.len)
|
||||
|
||||
@ -5,40 +5,51 @@ import pkg/questionable
|
||||
import pkg/questionable/results
|
||||
import pkg/upraises
|
||||
import pkg/taskpools
|
||||
import pkg/patty
|
||||
|
||||
import ./key
|
||||
import ./query
|
||||
import ./datastore
|
||||
import ./databuffer
|
||||
|
||||
import fsds
|
||||
|
||||
export key, query
|
||||
|
||||
push: {.upraises: [].}
|
||||
|
||||
variant Shape:
|
||||
Circle(r: float)
|
||||
Rectangle(w: float, h: float)
|
||||
|
||||
type
|
||||
DatastoreBackend* {.pure.} = enum
|
||||
FileSystem
|
||||
SQlite
|
||||
ThreadBackendKind* {.pure.} = enum
|
||||
FSBackend
|
||||
SQliteBackend
|
||||
|
||||
ThreadBackend* = object
|
||||
case kind*: ThreadBackendKind
|
||||
of FSBackend:
|
||||
root: StringBuffer
|
||||
depth: int
|
||||
caseSensitive: bool
|
||||
ignoreProtected: bool
|
||||
of SQliteBackend:
|
||||
discard
|
||||
|
||||
ThreadDatastore* = ref object of Datastore
|
||||
tp: Taskpool
|
||||
|
||||
var backendDatastore {.threadvar.}: ref Datastore
|
||||
|
||||
proc startupDatastore(backend: DatastoreBackend): bool =
|
||||
|
||||
case backend:
|
||||
of FileSystem:
|
||||
backendDatastore = FSDatastore.new(
|
||||
root: string,
|
||||
depth = 2,
|
||||
caseSensitive = true,
|
||||
ignoreProtected = false
|
||||
proc startupDatastore(backend: ThreadBackend): bool =
|
||||
## starts up a FS instance on a give thread
|
||||
case backend.kind:
|
||||
of FSBackend:
|
||||
let res = FSDatastore.new(
|
||||
root = backend.root.toString(),
|
||||
depth = backend.depth,
|
||||
caseSensitive = backend.caseSensitive,
|
||||
ignoreProtected = backend.ignoreProtected)
|
||||
if res.isOk:
|
||||
backendDatastore = res.get()
|
||||
else:
|
||||
discard
|
||||
|
||||
proc has*(
|
||||
self: ThreadDatastore,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user