文字列の代わりにファイルを mmap(2) した領域に対して StringScanner のようなことをするものです。
$ cd ext
$ ruby ./extconf.rb
$ make
$ sudo make install
$ gem install mmapscanner
- ファイルを mmap(2) した領域から正規表現に適合した部分データを返します。
- 返されるデータも MmapScanner オブジェクトで、最初にファイルから mmap(2) した領域を共有しています。
- mmap(2) を使用しているので大量データでもメモリを消費しません。to_s することではじめて String オブジェクトを生成します。
-
MmapScanner.new でファイルを mmap(2) します。mmap(2) できないファイルやパラメータを渡すとエラーになります。
# ファイル全体を mmap ms = MmapScanner.new(File.open("filename")) # ファイルの先頭 4096 バイト以降を mmap ms = MmapScanner.new(File.open("filename"), 4096) # ファイルの先頭 4096 バイト以降の 1234 バイト分を mmap ms = MmapScanner.new(File.open("filename"), 4096, 1234)
-
MmapScanner.new は文字列も受け付けます。文字列が途中で変更された時の動作は不定です。
-
size, length は mmap(2) したサイズを返します。
-
to_s は mmap(2) した領域を String で返します。Encoding は常に ASCII-8BIT です。
-
slice は mmap(2) した領域の一部を新たな MmapScanner オブジェクトで返します。
-
scan はポインタ位置で正規表現との一致を試みます。一致した部分を返し、ポインタを進めます。一致しない場合は nil を返します。
-
scan_until は scan と同じですが、現在のポインタの位置以降で一致を試みます。
-
check は scan と同じですが、ポインタを進めません。
-
check_until は check と同じですが、現在のポインタの位置以降で一致を試みます。
-
skip は scan と同じですが、一致したバイト数を返します。
-
skip_until は skip と同じですが、現在のポインタの位置以降で一致を試みます。
-
match? は check と同じですが、一致したバイト数を返します。
-
exist? は match? と同じですが、現在のポインタの位置以降で一致を試みます。
-
scan_full(re, s, f) はポインタの位置でスキャンします。
- scan_full(re, true, true) は scan(re) と同じです。
- scan_full(re, true, false) は skip(re) と同じです。
- scan_full(re, false, true) は check(re) と同じです。
- scan_full(re, false, false) は match?(re) と同じです。
-
search_full(re, s, f) はポインタの位置以降でスキャンします。
- search_full(re, true, true) は scan_until(re) と同じです。
- search_full(re, true, false) は skip_until(re) と同じです。
- search_full(re, false, true) は check_until(re) と同じです。
- search_full(re, false, false) は exist?(re) と同じです。
-
peek は指定したバイト数分のデータを返します。ポインタは進みません。
-
eos? はポインタが末尾に達していると true を返します。
-
rest はポインタ以降のデータを返します。
-
matched は正規表現に一致した部分を MmapScanner オブジェクトで返します。
-
matched(n) は正規表現の n番目の括弧に一致した部分を MmapScanner オブジェクトで返します。
-
matched_str は matched と同じですが、文字列を返します。
-
pos は現在のポインタの位置を返します。
-
pos= でポインタ位置を変更することができます。
-
terminate はポインタを末尾に移動します。
- Author
- TOMITA Masahiro
- Copyrigh
- Copyright (c) 2011 TOMITA Masahiro
- License
- Ruby's