return res
end
+ # Is `self` in `s`?
protected fun is_in(s: Text): Bool do return search_index_in(s, 0) != -1
end
end
end
- # Compile a new motif
- init(motif: String)
+ init
do
- _motif = motif
_length = _motif.length
_gs = new Array[Int].with_capacity(_length)
- _bc_table = new ArrayMap[Char, Int]
compute_gs
compute_bc
end
private var motif: String
# length of the motif
- private var length: Int
+ private var length: Int is noinit
private fun bc(e: Char): Int
do
end
# good shifts
- private var gs: Array[Int]
+ private var gs: Array[Int] is noinit
# bad characters
- private var bc_table: Map[Char, Int]
+ private var bc_table = new ArrayMap[Char, Int]
private fun compute_bc
do
private fun compute_gs
do
- var x = _motif
var m = _length
var suff = suffixes
var i = 0
# The contents of the matching part
redef fun to_s do return string.substring(from,length)
- # Matches `len` characters of `s` from `f`.
- init(s: String, f: Int, len: Int)
+ init
do
- assert positive_length: len >= 0
- assert valid_from: f >= 0
- assert valid_after: f + len <= s.length
- string = s
- from = f
- length = len
+ assert positive_length: length >= 0
+ assert valid_from: from >= 0
+ assert valid_after: from + length <= string.length
end
end
# Search the last occurence of the text `t`.
#
# assert "bob".search_last("b").from == 2
+ # assert "bob".search_last("bo").from == 0
+ # assert "bob".search_last("ob").from == 1
+ # assert "bobob".search_last("ob").from == 3
+ # assert "bobbob".search_last("bb").from == 2
+ # assert "bobbob".search_last("bob").from == 3
+ # assert "bob".search_last("z") == null
+ # assert "".search_last("b") == null
fun search_last(t: Text): nullable Match do
return search_last_up_to(t, length)
end