Module Base__.Obj_array

type t
val sexp_of_t : t -> Base.Sexp.t
include Base.Blit.S with type t := t
type t
val blit : (tt) Base__.Blit_intf.blit
val blito : (tt) Base__.Blit_intf.blito
val unsafe_blit : (tt) Base__.Blit_intf.blit
val sub : (tt) Base__.Blit_intf.sub
val subo : (tt) Base__.Blit_intf.subo
include Base.Invariant.S with type t := t
type t
val invariant : t Base__.Invariant_intf.inv
val create : len:int -> Base__.Import.Caml.Obj.t -> t

create ~len x returns an obj-array of length len, all of whose indices have value x.

val create_zero : len:int -> t

create_zero ~len returns an obj-array of length len, all of whose indices have value Caml.Obj.repr 0.

val copy : t -> t

copy t returns a new array with the same elements as t.

val singleton : Base__.Import.Caml.Obj.t -> t
val empty : t
val length : t -> int
val get : t -> int -> Base__.Import.Caml.Obj.t

get t i and unsafe_get t i return the object at index i. set t i o and unsafe_set t i o set index i to o. In no case is the object copied. The unsafe_* variants omit the bounds check of i.

val unsafe_get : t -> int -> Base__.Import.Caml.Obj.t
val set : t -> int -> Base__.Import.Caml.Obj.t -> unit
val unsafe_set : t -> int -> Base__.Import.Caml.Obj.t -> unit
val swap : t -> int -> int -> unit
val unsafe_set_assuming_currently_int : t -> int -> Base__.Import.Caml.Obj.t -> unit

unsafe_set_assuming_currently_int t i obj sets index i of t to obj, but only works correctly if Caml.Obj.is_int (get t i). This precondition saves a dynamic check.

unsafe_set_int_assuming_currently_int is similar, except the value being set is an int.

unsafe_set_int is similar but does not assume anything about the target.

val unsafe_set_int_assuming_currently_int : t -> int -> int -> unit
val unsafe_set_int : t -> int -> int -> unit
val unsafe_set_omit_phys_equal_check : t -> int -> Base__.Import.Caml.Obj.t -> unit

unsafe_set_omit_phys_equal_check is like unsafe_set, except it doesn't do a phys_equal check to try to skip caml_modify. It is safe to call this even if the values are phys_equal.

val unsafe_clear_if_pointer : t -> int -> unit

unsafe_clear_if_pointer t i prevents t.(i) from pointing to anything to prevent space leaks. It does this by setting t.(i) to Caml.Obj.repr 0. As a performance hack, it only does this when not (Caml.Obj.is_int t.(i)).

val truncate : t -> len:int -> unit

truncate t ~len shortens t's length to len. It is an error if len <= 0 or len > length t.