Module Weak


module Weak: sig  end
ウィークポインタの配列とウィークポインタのハッシュテーブルです。



Low-level functions



type 'a t
ウィークポインタの配列の型です (ウィーク配列) 。ウィークポインタとはガベージコレクタにいつでも消されうる値のことです。。ウィークポインタは値を示しているとき full であるといい、その値が GC に消されていたら empty であるといいます。

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 arar の長さ (要素数) を返します。
val set : 'a t -> int -> 'a option -> unit
Weak.set ar n (Some el)arn 番目のセルに el へのポインタをいれて full にします。Weak.set ar n Nonearn 番目のセルを empty にします。 n が 0 から Weak.length a - 1 までの範囲外だったら例外 Invalid_argument "Weak.set" を発生します。
val get : 'a t -> int -> 'a option
Weak.get ar narn 番目のセルが 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 narn 番目のセルが 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 narn 番目のセルが full だったら true を、empty だったら false を返します。ただし Weak.check ar ntrue を返した直後に Weak.get をしても None が返るかもしれないことに注意してください。
val fill : 'a t -> int -> int -> 'a option -> unit
Weak.fill ar ofs len elarofs 番目から ofs + len - 1 番目までのセルを el で埋めます。ofslena の部分配列を示すものとして不正であった場合は例外 Invalid_argument "Weak.fill" を発生します。
val blit : 'a t -> int -> 'a t -> int -> int -> unit
Weak.blit ar1 off1 ar2 off2 lenar1off1 番目から len 個のウィークポインタを ar2off2 番目から len 個までにコピーします。 ar1ar2 が同一のものであっても正常に動作します。 off1lenar1 の部分配列を示すものとして不正であった場合、または off2lenar2 の部分配列を示すものとして不正であった場合は例外 Invalid_argument "Weak.fill" を発生します。


Weak hash tables



ウィークハッシュテーブルはハッシュ化された値の集合です。それぞれの値は、プログラムの他でいっさい使われなくなったとき、集合から消えてしまう可能性があります。これは普通メモリリークを起こさない共有データ構造として使われます。 ウィークハッシュテーブルは Hashtbl.HashedType モジュールの値に従って定義されます。つまりこのモジュールの equal 関数と hash 関数を利用します。equal x vtrue のとき x のインスタンスが v であるといいます。

equal 関数は値の物理的コピーに対しても正常に動作し、元の値を与えたときと同じ結果を返さなければなりません。

module type S = sig  end
functor Weak.Make の出力 signature です。
module Make: functor (H : Hashtbl.HashedType) -> sig  end
ウィークハッシュテーブル構造の実装を束縛する functor です。