Buffer

このページは最後に更新されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

last mod. 2009-09-10 (木) 16:25:32

Chapter 20 標準ライブラリ

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 sub: t -> int -> int -> string

Buffer.sub b off len は b バッファのオフセット off から n バイトのバッファを切り出します。バッファを超えて切り出そうとした場合は、例外 Invalid_argument が発生します。

val nth: t -> int -> char

バッファの n 文字目を返します。nがバッファサイズを超えた場合は、例外Invalid_argument が発生します。

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_substitude : t -> (string -> strign) -> string -> unit

add_substitude b f s は文字列パターン s をバッファ 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 に書き出します。

新規 編集 添付