Add the implicit scope constructor
This commit is contained in:
parent
b69c11697b
commit
d461aa3300
1 changed files with 19 additions and 6 deletions
|
|
@ -22,11 +22,6 @@
|
|||
ResourceScope
|
||||
SegmentAllocator)))
|
||||
|
||||
(defn alloc
|
||||
"Allocates `size` bytes."
|
||||
([size] (alloc size (ResourceScope/newImplicitScope)))
|
||||
([size scope] (MemorySegment/allocateNative ^long size ^ResourceScope scope)))
|
||||
|
||||
(defn stack-scope
|
||||
"Constructs a new scope for use only in this thread.
|
||||
|
||||
|
|
@ -43,6 +38,24 @@
|
|||
[]
|
||||
(ResourceScope/newSharedScope))
|
||||
|
||||
(defn connected-scope
|
||||
"Constructs a new scope to reclaim all connected resources at once.
|
||||
|
||||
The scope may be shared across threads, and all resources created with it will
|
||||
be cleaned up at the same time, when all references have been collected.
|
||||
|
||||
This type of scope cannot be closed, and therefore should not be created in
|
||||
a [[with-open]] clause."
|
||||
[]
|
||||
(ResourceScope/newImplicitScope))
|
||||
|
||||
(defn alloc
|
||||
"Allocates `size` bytes.
|
||||
|
||||
If a `scope` is provided, the allocation will be reclaimed when it is closed."
|
||||
([size] (alloc size (connected-scope)))
|
||||
([size scope] (MemorySegment/allocateNative ^long size ^ResourceScope scope)))
|
||||
|
||||
(defmacro with-acquired
|
||||
"Acquires a `scope` to ensure it will not be released until the `body` completes.
|
||||
|
||||
|
|
@ -202,7 +215,7 @@
|
|||
|
||||
(defn alloc-instance
|
||||
"Allocates a memory segment for the given `type`."
|
||||
([type] (alloc-instance type (ResourceScope/newImplicitScope)))
|
||||
([type] (alloc-instance type (connected-scope)))
|
||||
([type scope] (MemorySegment/allocateNative ^long (size-of type) ^ResourceScope scope)))
|
||||
|
||||
(defmulti serialize*
|
||||
|
|
|
|||
Loading…
Reference in a new issue