mirror of
https://github.com/MillironX/XAM.jl.git
synced 2024-11-14 22:33:14 +00:00
Empty records during iteration
This commit is contained in:
parent
300158dbef
commit
f00547177f
4 changed files with 37 additions and 7 deletions
|
@ -72,12 +72,11 @@ function Base.seekstart(reader::Reader)
|
|||
seek(reader.stream, reader.start_offset)
|
||||
end
|
||||
|
||||
function Base.iterate(reader::Reader, rec=Record())
|
||||
if eof(reader)
|
||||
function Base.iterate(reader::Reader, nextone = Record())
|
||||
if BioGenerics.IO.tryread!(reader, nextone) === nothing
|
||||
return nothing
|
||||
end
|
||||
read!(reader, rec)
|
||||
return copy(rec), rec
|
||||
return copy(nextone), empty!(nextone)
|
||||
end
|
||||
|
||||
# Initialize a BAM reader by reading the header section.
|
||||
|
|
|
@ -76,6 +76,22 @@ function Base.copy(record::Record)
|
|||
return copy
|
||||
end
|
||||
|
||||
function Base.empty!(record::Record)
|
||||
record.block_size = 0
|
||||
record.refid = 0
|
||||
record.pos = 0
|
||||
record.bin_mq_nl = 0
|
||||
record.flag_nc = 0
|
||||
record.l_seq = 0
|
||||
record.next_refid = 0
|
||||
record.next_pos = 0
|
||||
record.tlen = 0
|
||||
|
||||
#Note: data will be overwritten and indexed using data_size.
|
||||
|
||||
return record
|
||||
end
|
||||
|
||||
function Base.show(io::IO, record::Record)
|
||||
print(io, summary(record), ':')
|
||||
if isfilled(record)
|
||||
|
|
|
@ -81,9 +81,20 @@ function index!(record::Record)
|
|||
return record
|
||||
end
|
||||
|
||||
function Base.read!(rdr::Reader, rec::Record)
|
||||
function Base.iterate(reader::Reader, nextone::Record = Record())
|
||||
if BioGenerics.IO.tryread!(reader, nextone) === nothing
|
||||
return nothing
|
||||
end
|
||||
return copy(nextone), empty!(nextone)
|
||||
end
|
||||
|
||||
empty!(rec.fields) #Note: data is pushed to the fields field, and other field data is overwritten. #TODO: distinguish for inplace reading pattern.
|
||||
"""
|
||||
read!(rdr::Reader, rec::Record)
|
||||
|
||||
Read a `Record` into `rec`; overwriting or adding to existing field values.
|
||||
It is assumed that `rec` is already initialized or empty.
|
||||
"""
|
||||
function Base.read!(rdr::Reader, rec::Record)
|
||||
|
||||
cs, ln, f = readrecord!(rdr.state.stream, rec, (rdr.state.state, rdr.state.linenum))
|
||||
|
||||
|
|
|
@ -571,7 +571,7 @@ end
|
|||
# Helper Functions
|
||||
# ----------------
|
||||
|
||||
function initialize!(record::Record)
|
||||
function Base.empty!(record::Record)
|
||||
record.filled = 1:0
|
||||
record.qname = 1:0
|
||||
record.flag = 1:0
|
||||
|
@ -588,6 +588,10 @@ function initialize!(record::Record)
|
|||
return record
|
||||
end
|
||||
|
||||
function initialize!(record::Record) #TODO: deprecate.
|
||||
return empty!(record)
|
||||
end
|
||||
|
||||
function checkfilled(record::Record)
|
||||
if !isfilled(record)
|
||||
throw(ArgumentError("unfilled SAM record"))
|
||||
|
|
Loading…
Reference in a new issue