module K1: sig .. endEphemerons with one key.
type t('k, 'd);
an ephemeron with one key
let create: unit => t('k, 'd);
Ephemeron.K1.create () creates an ephemeron with one key. The
data and the key are empty
let get_key: t('k, 'd) => option('k);
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.
let get_key_copy: t('k, 'd) => option('k);
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.
let set_key: (t('k, 'd), 'k) => unit;
Ephemeron.K1.set_key eph el sets the key of eph to be a
(full) key to el
let unset_key: t('k, 'd) => 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.
let check_key: t('k, 'd) => 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_keyeph can return None.
let blit_key: (t('k, 'a), t('k, 'b)) => unit;
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.
let get_data: t('k, 'd) => option('d);
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.
let get_data_copy: t('k, 'd) => option('d);
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.
let set_data: (t('k, 'd), 'd) => unit;
Ephemeron.K1.set_data eph el sets the data of eph to be a
(full) data to el
let unset_data: t('k, 'd) => 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.
let check_data: t('k, 'd) => 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_dataeph can return None.
let blit_data: (t('a, 'd), t('b, 'd)) => unit;
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.
module Make: (H: Hashtbl.HashedType) => Ephemeron.S with type key = H.t;
Functor building an implementation of a weak hash table
module MakeSeeded:
(H: Hashtbl.SeededHashedType) => Ephemeron.SeededS with type key = H.t;
Functor building an implementation of a weak hash table.