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