1
0
Fork 0
mirror of https://github.com/MillironX/XAM.jl.git synced 2024-11-14 22:33:14 +00:00

Quick fix for BioCore.RecordHelper: unsafe_parse_decimal

This commit is contained in:
Ciarán O'Mara 2020-02-02 22:51:19 +11:00
parent c4f3c4b0df
commit 2cad552f63

View file

@ -9,12 +9,43 @@ import Automa
import Automa.RegExp: @re_str import Automa.RegExp: @re_str
import BioAlignments import BioAlignments
import BioGenerics.Exceptions: missingerror import BioGenerics.Exceptions: missingerror
import BioGenerics.RecordHelper: unsafe_parse_decimal
import BioGenerics: isfilled, header import BioGenerics: isfilled, header
import BioSequences import BioSequences
import BufferedStreams import BufferedStreams
using Printf: @sprintf using Printf: @sprintf
#TODO: update import BioCore.RecordHelper: unsafe_parse_decimal
# r"[0-9]+" must match `data[range]`.
function unsafe_parse_decimal(::Type{T}, data::Vector{UInt8}, range::UnitRange{Int}) where {T<:Unsigned}
x = zero(T)
@inbounds for i in range
x = Base.Checked.checked_mul(x, 10 % T)
x = Base.Checked.checked_add(x, (data[i] - UInt8('0')) % T)
end
return x
end
# r"[-+]?[0-9]+" must match `data[range]`.
function unsafe_parse_decimal(::Type{T}, data::Vector{UInt8}, range::UnitRange{Int}) where {T<:Signed}
lo = first(range)
if data[lo] == UInt8('-')
sign = T(-1)
lo += 1
elseif data[lo] == UInt8('+')
sign = T(+1)
lo += 1
else
sign = T(+1)
end
x = zero(T)
@inbounds for i in lo:last(range)
x = Base.Checked.checked_mul(x, 10 % T)
x = Base.Checked.checked_add(x, (data[i] - UInt8('0')) % T)
end
return sign * x
end
include("flags.jl") include("flags.jl")
include("metainfo.jl") include("metainfo.jl")
include("record.jl") include("record.jl")