Module Ephemeron.K1
Contents
Instructions: Use this module in your project
In the IDE (CLion, Visual Studio Code, Xcode, etc.) you use for your DkSDK project:
Add the following to your project's
dependencies/CMakeLists.txt
:DkSDKProject_DeclareAvailable(ocaml CONSTRAINT "= 4.14.0" FINDLIBS str unix runtime_events threads dynlink) DkSDKProject_MakeAvailable(ocaml)
Add the
Findlib::ocaml
library to any desired targets insrc/*/CMakeLists.txt
:target_link_libraries(YourPackage_YourLibraryName # ... existing libraries, if any ... Findlib::ocaml)
Click your IDE's
Build
button
Not using DkSDK?
FIRST, do one or all of the following:
Run:
opam install ocaml.4.14.0
Edit your
dune-project
and add:(package (name YourExistingPackage) (depends ; ... existing dependenices ... (ocaml (>= 4.14.0))))
Then run:
dune build *.opam # if this fails, run: dune build
Edit your
<package>.opam
file and add:depends: [ # ... existing dependencies ... "ocaml" {>= "4.14.0"} ]
Then run:
opam install . --deps-only
FINALLY, add the library to any desired
(library)
and/or (executable)
targets in your **/dune
files:
(library
(name YourLibrary)
; ... existing library options ...
(libraries
; ... existing libraries ...
))
(executable
(name YourExecutable)
; ... existing executable options ...
(libraries
; ... existing libraries ...
))
type
``('k, 'd) t
an ephemeron with one key
val
create : ``unit
->
``(
'k
,
'd
)``
t
Ephemeron.K1.create ()
creates an ephemeron with one key. The data and
the key are empty
- alert old_ephemeron_api This function won't be available in 5.0
val
get_key : ``(
'k
,
'd
)``
t
->
'k
option
Ephemeron.K1.get_key eph
returns None
if the key of eph
is empty,
Some x
(where x
is the key) if it is full.
- alert old_ephemeron_api This function won't be available in 5.0
val
get_key_copy : ``(
'k
,
'd
)``
t
->
'k
option
Ephemeron.K1.get_key_copy eph
returns None
if the key of eph
is
empty, Some x
(where x
is a (shallow) copy of the key) if it is
full. This function has the same GC friendliness as
Weak.get_copy
If the element is a custom block it is not copied.
- alert old_ephemeron_api This function won't be available in 5.0
val
set_key : ``(
'k
,
'd
)``
t
->
'k
->
unit
Ephemeron.K1.set_key eph el
sets the key of eph
to be a (full) key
to el
- alert old_ephemeron_api This function won't be available in 5.0
val
unset_key : ``(
'k
,
'd
)``
t
->
unit
Ephemeron.K1.unset_key eph el
sets the key of eph
to be an empty
key. Since there is only one key, the ephemeron starts behaving like a
reference on the data.
- alert old_ephemeron_api This function won't be available in 5.0
val
check_key : ``(
'k
,
'd
)``
t
->
bool
Ephemeron.K1.check_key eph
returns true
if the key of the eph
is
full, false
if it is empty. Note that even if
Ephemeron.K1.check_key eph
returns true
, a subsequent
Ephemeron.K1.get_key
eph
can return None
.
- alert old_ephemeron_api This function won't be available in 5.0
Ephemeron.K1.blit_key eph1 eph2
sets the key of eph2
with the key of
eph1
. Contrary to using Ephemeron.K1.get_key
followed by Ephemeron.K1.set_key
or
Ephemeron.K1.unset_key
this function does not
prevent the incremental GC from erasing the value in its current cycle.
- alert old_ephemeron_api This function won't be available in 5.0
val
get_data : ``(
'k
,
'd
)``
t
->
'd
option
Ephemeron.K1.get_data eph
returns None
if the data of eph
is
empty, Some x
(where x
is the data) if it is full.
- alert old_ephemeron_api This function won't be available in 5.0
val
get_data_copy : ``(
'k
,
'd
)``
t
->
'd
option
Ephemeron.K1.get_data_copy eph
returns None
if the data of eph
is
empty, Some x
(where x
is a (shallow) copy of the data) if it is
full. This function has the same GC friendliness as
Weak.get_copy
If the element is a custom block it is not copied.
- alert old_ephemeron_api This function won't be available in 5.0
val
set_data : ``(
'k
,
'd
)``
t
->
'd
->
unit
Ephemeron.K1.set_data eph el
sets the data of eph
to be a (full)
data to el
- alert old_ephemeron_api This function won't be available in 5.0
val
unset_data : ``(
'k
,
'd
)``
t
->
unit
Ephemeron.K1.unset_data eph el
sets the key of eph
to be an empty
key. The ephemeron starts behaving like a weak pointer.
- alert old_ephemeron_api This function won't be available in 5.0
val
check_data : ``(
'k
,
'd
)``
t
->
bool
Ephemeron.K1.check_data eph
returns true
if the data of the eph
is
full, false
if it is empty. Note that even if
Ephemeron.K1.check_data eph
returns true
, a subsequent
Ephemeron.K1.get_data
eph
can return None
.
- alert old_ephemeron_api This function won't be available in 5.0
Ephemeron.K1.blit_data eph1 eph2
sets the data of eph2
with the data
of eph1
. Contrary to using Ephemeron.K1.get_data
followed by Ephemeron.K1.set_data
or
Ephemeron.K1.unset_data
this function does not
prevent the incremental GC from erasing the value in its current cycle.
- alert old_ephemeron_api This function won't be available in 5.0
val
make :
'k
->
'd
->
``(
'k
,
'd
)``
t
Ephemeron.K1.make k d
creates an ephemeron with key k
and data d
.
val
query : ``(
'k
,
'd
)``
t
->
'k
->
'd
option
Ephemeron.K1.query eph key
returns Some x
(where x
is the
ephemeron's data) if key
is physically equal to eph
's key, and
None
if eph
is empty or key
is not equal to eph
's key.
Functor building an implementation of a weak hash table
module
MakeSeeded
(
H
:
Hashtbl.SeededHashedType
) :
SeededS
with
type
key
=
H.t
Functor building an implementation of a weak hash table. The seed is
similar to the one of
Hashtbl.MakeSeeded
.
module
Bucket
:
sig
...
end