Class: Kleene::NaiveOnlineRegex

Inherits:
Object
  • Object
show all
Defined in:
lib/kleene/naive_online_regex.rb

Instance Method Summary collapse

Constructor Details

#initialize(regexen, window_size = 100) ⇒ NaiveOnlineRegex

Returns a new instance of NaiveOnlineRegex.



7
8
9
10
11
12
# File 'lib/kleene/naive_online_regex.rb', line 7

def initialize(regexen, window_size = 100)
  @regexen = regexen
  @window_size = window_size

  reset
end

Instance Method Details

#ingest(input, debug = false) ⇒ Object

#ingest(input) is the online-style matching interface



20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/kleene/naive_online_regex.rb', line 20

def ingest(input, debug = false) # : Set(OnlineMatch)
  @buffer << input
  new_online_matches = Set.new
  @regexen.each do |regex|
    existing_matches_for_regex = (@matches_per_regex[regex] ||= Set.new)
    scan_matches = @buffer.scan_matches(regex).to_set
    new_matches = scan_matches - existing_matches_for_regex   # new_matches : Set(MatchData)
    existing_matches_for_regex.merge(new_matches)
    new_online_matches.merge(new_matches.map {|match_data| OnlineMatch.new(regex, match_data) })
  end
  resize_buffer!
  new_online_matches
end

#matchesObject

Hash(Regexp, Set(MatchData))



34
35
36
# File 'lib/kleene/naive_online_regex.rb', line 34

def matches # Hash(Regexp, Set(MatchData))
  @matches_per_regex
end

#matches_for(regex) ⇒ Object

Set(MatchData) | Nil



38
39
40
# File 'lib/kleene/naive_online_regex.rb', line 38

def matches_for(regex) # Set(MatchData) | Nil
  @matches_per_regex[regex]
end

#resetObject



14
15
16
17
# File 'lib/kleene/naive_online_regex.rb', line 14

def reset
  @buffer = ""
  @matches_per_regex = Hash.new   # Hash(Regexp, Set(MatchData))
end

#resize_buffer!Object



42
43
44
45
46
# File 'lib/kleene/naive_online_regex.rb', line 42

def resize_buffer!
  if @buffer.size > @window_size
    @buffer = @buffer[-@window_size..-1]
  end
end