Module AtomicReferenceArray

module AtomicReferenceArray: sig .. end
Atomic containers for arrays of values.

type 'a t 
The type of atomic containers for arrays values.

WARNING: physical comparison is used by the container.

CONSEQUENCE 1: should be used with caution to store int32, int64, nativeint, or double values as they are wrapped into blocks. Hence, comparisons are done on block addresses rather than on wrapped values.

CONSEQUENCE 2: as OCaml-Java uses boxed values for int values, the container should not be used to store int values.

Any other type can be safely stored (caching of some int values ensure that sum types are correctly handled).

type index = int32 
The type of array indices.
val make : int32 -> 'a -> 'a t
Returns a new container holding an array of passed length.

Raises Invalid_argument if passed length is negative.

val compare_and_set : 'a t -> index -> 'a -> 'a -> bool
compare_and_set a i e u atomically sets the value of a at index i to u if the current value is e. Returns whether the value of a at index i was equal to e.

Raises Invalid_argument if passed index is invalid.

val get : 'a t -> index -> 'a
Returns the value at passed index.

Raises Invalid_argument if passed index is invalid.

val get_and_set : 'a t -> index -> 'a -> 'a
get_and_set a i x atomically sets the value of a at index i to x, and returns the previous value.

Raises Invalid_argument if passed index is invalid.

val lazy_set : 'a t -> index -> 'a -> unit
lazy_set a i x eventually sets the value of a at index i to x.

Raises Invalid_argument if passed index is invalid.

val length : 'a t -> int32
Returns the length of the array.
val set : 'a t -> index -> 'a -> unit
set a i x sets the value of a at index i to x.

Raises Invalid_argument if passed index is invalid.

val weak_compare_and_set : 'a t -> index -> 'a -> 'a -> bool
Similar to compare_and_set, with a weak semantics: may be faster on some platforms, but does not provide ordering guarantees.

Raises Invalid_argument if passed index is invalid.