module Buffer: sig end
このモジュールでは、必要に応じて自動的に大きくなる文字列バッファを提供します。ペアでの連結では 2 次元オーダの時間がかかるところを、このモジュールでは準線形時間での文字列累積連結が可能です。
type t
val create : int -> t
create n
は、空の新しいバッファを返します。パラメータ n
はバッファの内容を保持する内部文字列の初期サイズを指定します。バッファに n
以上の文字がストアされた場合、内部文字列は自動的に再割り当てされます。また、reset
が呼ばれた場合、内部文字列は n
文字に縮められます。n
にはバッファに入れる文字列の長さと同じオーダの数を指定するといいです (例えば、一行の出力を保持するバッファなら 80 を指定するといいです) 。制限を超えても問題は発生しませんが (疑うようなら n = 16
のような例を試してみてください) 。もし n
が 1 から Sys.max_string_length
までの間でなかった場合、この範囲にクリッピングされます。val contents : t -> string
val length : t -> int
val clear : t -> unit
val reset : t -> unit
Buffer.create
n
で指定された n
の長さの文字列を確保し、これを内部文字列とします。バッファは長く使っているうちに肥大化してしまうことがあります。reset
によって、バッファが使用しているスペースを高速に回収できるようになります。val add_char : t -> char -> unit
add_char b c
は、バッファ b
の終端に文字 c
を追加します。val add_string : t -> string -> unit
add_string b s
は、バッファ b
の終端に文字列 s
を追加します。val add_substring : t -> string -> int -> int -> unit
add_substring b s ofs len
は、文字列 s
の部分文字列 (位置 ofs
から長さ len
の文字列) を、バッファ b
の終端に追加します。val add_buffer : t -> t -> unit
add_buffer b1 b2
は、バッファ b2
の内容を、バッファ b1
の終端に追加します。バッファ b2
は変更されません。val add_channel : t -> Pervasives.in_channel -> int -> unit
add_channel b ic n
は、入力チャンネル ic
から n
文字読み取り、それをバッファ b
の終端に追加します。チャンネルから n
文字分の内容を読みとれなかった場合は例外 End_of_file
を発生します。val output_buffer : Pervasives.out_channel -> t -> unit
output_buffer oc b
は、バッファ b
の内容を、出力チャンネル oc
に書き出します。