Module Buffer


module Buffer: sig .. end
伸張可能な文字列バッファ

このモジュールは必要に応じて自動的に伸張する文字列バッファを実装します。 このバッファにより、文字列の累積的な連結が準線型時間で実現できます (これに対して、複数の文字列をふたつずつ順に連結すると O(n2) オーダーの時間がかかります)。


type t 
バッファを表す抽象型
val create : int -> t
create n は初期状態として空の新しいバッファを返します。 引数 n はバッファの内容を格納する文字列の初期サイズです。 この文字列はバッファに n 文字を越える文字を格納しようとすると自動的に再割り当てされ、 reset が呼び出されると n 文字に切り詰められます。 性能を最大化するためには、 n はバッファに格納される文字数と同じ桁数にしておくのがよいでしょう(例えば、出力用の行バッファであれば 80)。 ただし、 n を越えてバッファが伸張しても何の問題もありません。 適切な値が不確かな場合には、例えば 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 番目から len バイト分の長さの部分文字列(のコピー)を返します。 引数が範囲外であった場合には Invalid_argument 例外が発生します。 バッファ自体は何の影響も受けません。
val blit : t -> int -> string -> int -> int -> unit
Buffer.blit src srcoff dst dstoff len はバッファ src の現在の内容の srcoff 番目の位置から len 文字を、 dstdstoff 番目にコピーします。

srcofflen がバッファ src の適切な部分文字列を表さないか、 dstofflendst の適切な部分文字列を表さない場合には Invalid_argument 例外が発生します。
Since 3.11.2

val nth : t -> int -> char
バッファの 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 は文字列 sofs 文字目から len 文字の文字列を取り出し、それをバッファ b の末尾に追加します。
val add_substitute : t -> (string -> string) -> string -> unit
add_substitute b f s は文字列パターン s に置換処理をほどこしてバッファ b の末尾に追加します。 置換処理では、パターン中から変数を探し出し、各変数名を f に適用して得られた値で置き換えます。 文字列パターン中で、変数はエスケープされていない $ で始まる以下のいずれかです。

バックスラッシュに後続する $ をエスケープされた $ とします。 これは $ そのものを表します。 変数名を囲む括弧の閉じ括弧が見つからない場合には Not_found 例外が発生します。
val add_buffer : t -> t -> unit
add_buffer b1 b2 は バッファ b2 の現在の内容を b1 の末尾に追加します。 b2 は変更されません。
val add_channel : t -> in_channel -> int -> unit
add_channel b ic n は入力チャネル ic からちょうど n 文字読み込み、それをバッファ b の末尾に格納します。 チャネルが n 文字以下しか格納していなかった場合には End_of_file 例外が発生します。
val output_buffer : out_channel -> t -> unit
output_buffer oc b はバッファ b の現在の内容を出力チャネル oc に書き込みます。