Class: Igo::KeyStream
- Inherits:
-
Object
- Object
- Igo::KeyStream
- Defined in:
- lib/igo/trie.rb
Overview
文字列を文字のストリームとして扱うためのクラス
-
readメソッドで個々の文字を順に読み込み、文字列の終端に達した場合にはNode::Chck::TERMINATE_CODEが返される。
Instance Method Summary collapse
- #compare_to(ks) ⇒ Object
- #eos? ⇒ Boolean
-
#initialize(key, start = 0) ⇒ KeyStream
constructor
A new instance of KeyStream.
- #read ⇒ Object
- #rest ⇒ Object
-
#start_with(prefix, beg, len) ⇒ Object
このメソッドは動作的には、rest().starts_with?(prefix.substring(beg, len))と等価。 ほんの若干だが、パフォーマンスを改善するために導入。 簡潔性のためになくしても良いかもしれない。.
Constructor Details
#initialize(key, start = 0) ⇒ KeyStream
Returns a new instance of KeyStream.
56 57 58 59 60 |
# File 'lib/igo/trie.rb', line 56 def initialize(key, start = 0) @s = key @cur = start @len = key.unpack("U*").size end |
Instance Method Details
#compare_to(ks) ⇒ Object
62 63 64 |
# File 'lib/igo/trie.rb', line 62 def compare_to(ks) return rest.compare_to(ks.rest) end |
#eos? ⇒ Boolean
99 100 101 |
# File 'lib/igo/trie.rb', line 99 def eos? return (@cur == @len) ? true : false end |
#read ⇒ Object
87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/igo/trie.rb', line 87 def read if eos? return Node::Chck::TERMINATE_CODE else r = @s.unpack("U*")[@cur] result = [r].pack("U*") @cur += 1 return r end end |
#rest ⇒ Object
83 84 85 |
# File 'lib/igo/trie.rb', line 83 def rest return @s.slice(@cur, @s.length) end |
#start_with(prefix, beg, len) ⇒ Object
このメソッドは動作的には、rest().starts_with?(prefix.substring(beg, len))と等価。 ほんの若干だが、パフォーマンスを改善するために導入。 簡潔性のためになくしても良いかもしれない。
69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/igo/trie.rb', line 69 def start_with(prefix, beg, len) s = @s c = @cur if @len - c < len return false end word = s.unpack("U*")[c] if word.nil? return (prefix.slice(beg, len-beg) == nil) else [word].pack("U*").starts_with?(prefix.slice(beg, len-beg)) end end |