From fd79f37c8d39f60d5f11d3b0fb07b987b685da02 Mon Sep 17 00:00:00 2001 From: matthieugomez Date: Sat, 17 Aug 2019 13:13:54 -0400 Subject: [PATCH] Update qgram.jl --- src/distances/qgram.jl | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/distances/qgram.jl b/src/distances/qgram.jl index b468005..3ebffe4 100755 --- a/src/distances/qgram.jl +++ b/src/distances/qgram.jl @@ -11,6 +11,18 @@ struct QGramIterator{S <: AbstractString} N::Int # Length of Qgram end +function Base.iterate(qgram::QGramIterator, + state = (1, qgram.l < qgram.N ? ncodeunits(qgram.s) + 1 : nextind(qgram.s, 0, qgram.N))) + istart, iend = state + iend > ncodeunits(qgram.s) && return nothing + element = qgram.s[istart:iend] + nextstate = nextind(qgram.s, istart), nextind(qgram.s, iend) + element, nextstate +end +Base.length(qgram::QGramIterator) = max(qgram.l - qgram.N + 1, 0) +Base.eltype(qgram::QGramIterator{SubString{S}}) where {S} = S +Base.eltype(qgram::QGramIterator{S}) where {S} = S + """ Return an iterator that iterates on the QGram of the string @@ -28,18 +40,6 @@ end """ qgram_iterator(s::AbstractString, n::Int) = QGramIterator{typeof(s)}(s, length(s), n) -function Base.iterate(qgram::QGramIterator, - state = (1, qgram.l < qgram.N ? ncodeunits(qgram.s) + 1 : nextind(qgram.s, 0, qgram.N))) - istart, iend = state - iend > ncodeunits(qgram.s) && return nothing - element = qgram.s[istart:iend] - nextstate = nextind(qgram.s, istart), nextind(qgram.s, iend) - element, nextstate -end -Base.length(qgram::QGramIterator) = max(qgram.l - qgram.N + 1, 0) -Base.eltype(qgram::QGramIterator{SubString{S}}) where {S} = S -Base.eltype(qgram::QGramIterator{S}) where {S} = S - ############################################################################## ## ## For two iterators x1 x2, count_map(x1, x2) returns an iterator