Previous Contents
19.33 Module Weak: arrays of weak pointers


type 'a t;;
The type of arrays of weak pointers (weak arrays). A weak pointer is a value that the garbage collector may erase at any time. A weak pointer is said to be full if it points to a value, empty if the value was erased by the GC.
val create : int -> 'a t;;
Weak.create n returns a new weak array of length n. All the pointers are initially empty. Raise Invalid_argument if n is negative or greater than Sys.max_array_length-1.
val length : 'a t -> int;;
Weak.length ar returns the length (number of elements) of ar.
val set : 'a t -> int -> 'a option -> unit;;
Weak.set ar n (Some el) sets the nth cell of ar to be a (full) pointer to el; Weak.set ar n None sets the nth cell of ar to empty. Raise Invalid_argument "Weak.set" if n is not in the range 0 to Weak.length a - 1.
val get : 'a t -> int -> 'a option;;
Weak.get ar n returns None if the nth cell of ar is empty, Some x (where x is the value) if it is full. Raise Invalid_argument "Weak.get" if n is not in the range 0 to Weak.length a - 1.
val get_copy : 'a t -> int -> 'a option;;
Weak.get_copy ar n returns None if the nth cell of ar is empty, Some x (where x is a (shallow) copy of the value) if it is full. In addition to pitfalls with mutable values, the interesting difference with get is that get_copy does not prevent the incremental GC from erasing the value in its current cycle (get may delay the erasure to the next GC cycle). Raise Invalid_argument "Weak.get" if n is not in the range 0 to Weak.length a - 1.
val check: 'a t -> int -> bool;;
Weak.check ar n returns true if the nth cell of ar is full, false if it is empty. Note that even if Weak.check ar n returns true, a subsequent Weak.get ar n can return None.
val fill: 'a t -> int -> int -> 'a option -> unit;;
Weak.fill ar ofs len el sets to el all pointers of ar from ofs to ofs + len - 1. Raise Invalid_argument "Weak.fill" if ofs and len do not designate a valid subarray of a.
val blit : 'a t -> int -> 'a t