module Weak: sig end
Low-level functions
|
type 'a
t
val create : int -> 'a t
Weak.create n
は長さ n
のウィーク配列を新しく作って返します。
ポインタはすべて初期値 empty です。n
が負だったり Sys.max_array_length
-1
より大きかったりした場合は例外 Invalid_argument
を発生します。val length : 'a t -> int
Weak.length ar
は ar
の長さ (要素数) を返します。val set : 'a t -> int -> 'a option -> unit
Weak.set ar n (Some el)
は ar
の n
番目のセルに el
へのポインタをいれて full にします。Weak.set ar n None
は ar
の n
番目のセルを empty にします。
n
が 0 から Weak.length
a - 1
までの範囲外だったら例外 Invalid_argument "Weak.set"
を発生します。val get : 'a t -> int -> 'a option
Weak.get ar n
は ar
の n
番目のセルが empty だったら None を、full だったら Some x
(x
はその値) を返します。
n
が 0 から Weak.length
a - 1
までの範囲外だったら例外 Invalid_argument "Weak.set"
を発生します。val get_copy : 'a t -> int -> 'a option
Weak.get ar n
は ar
の n
番目のセルが empty だったら None を、full だったら Some x
(x
はその値の物理的なコピー) を返します。
書き換え可能な値の落とし穴がありますが、get
と異なる面白い点は、get_copy
は incremental GC が現在のサイクルで値を消去する妨げにならないということです (get
は消去を次の GC サイクルに遅延させる可能性があります) 。
n
が 0 から Weak.length
a - 1
までの範囲外だったら例外 Invalid_argument "Weak.set"
を発生します。val check : 'a t -> int -> bool
Weak.check ar n
は ar
の n
番目のセルが full だったら true
を、empty だったら false
を返します。ただし Weak.check ar n
が true
を返した直後に Weak.get
をしても None
が返るかもしれないことに注意してください。val fill : 'a t -> int -> int -> 'a option -> unit
Weak.fill ar ofs len el
は ar
の ofs
番目から ofs + len - 1
番目までのセルを el
で埋めます。ofs
と len
が a
の部分配列を示すものとして不正であった場合は例外 Invalid_argument "Weak.fill"
を発生します。val blit : 'a t -> int -> 'a t -> int -> int -> unit
Weak.blit ar1 off1 ar2 off2 len
は ar1
の off1
番目から len
個のウィークポインタを ar2
の off2
番目から len
個までにコピーします。
ar1
と ar2
が同一のものであっても正常に動作します。
off1
と len
が ar1
の部分配列を示すものとして不正であった場合、または off2
と len
が ar2
の部分配列を示すものとして不正であった場合は例外 Invalid_argument "Weak.fill"
を発生します。
Weak hash tables
|
Hashtbl.HashedType
モジュールの値に従って定義されます。つまりこのモジュールの equal
関数と hash
関数を利用します。equal x v
が true
のとき x
のインスタンスが v
であるといいます。
equal
関数は値の物理的コピーに対しても正常に動作し、元の値を与えたときと同じ結果を返さなければなりません。
module type S = sig end
Weak.Make
の出力 signature です。
module Make: functor (H : Hashtbl.HashedType) -> sig end