Class: KeyStream
- Inherits:
-
Object
- Object
- 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.
47 48 49 50 51 |
# File 'lib/igo/trie.rb', line 47 def initialize(key, start = 0) @s = key @cur = start @len = key.unpack("U*").size end |
Instance Method Details
#compare_to(ks) ⇒ Object
53 54 55 |
# File 'lib/igo/trie.rb', line 53 def compare_to(ks) return rest.compare_to(ks.rest) end |
#eos? ⇒ Boolean
90 91 92 |
# File 'lib/igo/trie.rb', line 90 def eos? return (@cur == @len) ? true : false end |
#read ⇒ Object
78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/igo/trie.rb', line 78 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
74 75 76 |
# File 'lib/igo/trie.rb', line 74 def rest return @s.slice(@cur, @s.length) end |
#start_with(prefix, beg, len) ⇒ Object
このメソッドは動作的には、rest().starts_with?(prefix.substring(beg, len))と等価。 ほんの若干だが、パフォーマンスを改善するために導入。 簡潔性のためになくしても良いかもしれない。
60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/igo/trie.rb', line 60 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 |