mirror of
https://github.com/MillironX/XAM.jl.git
synced 2024-11-15 06:43:10 +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)
|
seek(reader.stream, reader.start_offset)
|
||||||
end
|
end
|
||||||
|
|
||||||
function Base.iterate(reader::Reader, rec=Record())
|
function Base.iterate(reader::Reader, nextone = Record())
|
||||||
if eof(reader)
|
if BioGenerics.IO.tryread!(reader, nextone) === nothing
|
||||||
return nothing
|
return nothing
|
||||||
end
|
end
|
||||||
read!(reader, rec)
|
return copy(nextone), empty!(nextone)
|
||||||
return copy(rec), rec
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# Initialize a BAM reader by reading the header section.
|
# Initialize a BAM reader by reading the header section.
|
||||||
|
|
|
@ -76,6 +76,22 @@ function Base.copy(record::Record)
|
||||||
return copy
|
return copy
|
||||||
end
|
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)
|
function Base.show(io::IO, record::Record)
|
||||||
print(io, summary(record), ':')
|
print(io, summary(record), ':')
|
||||||
if isfilled(record)
|
if isfilled(record)
|
||||||
|
|
|
@ -81,9 +81,20 @@ function index!(record::Record)
|
||||||
return record
|
return record
|
||||||
end
|
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))
|
cs, ln, f = readrecord!(rdr.state.stream, rec, (rdr.state.state, rdr.state.linenum))
|
||||||
|
|
||||||
|
|
|
@ -571,7 +571,7 @@ end
|
||||||
# Helper Functions
|
# Helper Functions
|
||||||
# ----------------
|
# ----------------
|
||||||
|
|
||||||
function initialize!(record::Record)
|
function Base.empty!(record::Record)
|
||||||
record.filled = 1:0
|
record.filled = 1:0
|
||||||
record.qname = 1:0
|
record.qname = 1:0
|
||||||
record.flag = 1:0
|
record.flag = 1:0
|
||||||
|
@ -588,6 +588,10 @@ function initialize!(record::Record)
|
||||||
return record
|
return record
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function initialize!(record::Record) #TODO: deprecate.
|
||||||
|
return empty!(record)
|
||||||
|
end
|
||||||
|
|
||||||
function checkfilled(record::Record)
|
function checkfilled(record::Record)
|
||||||
if !isfilled(record)
|
if !isfilled(record)
|
||||||
throw(ArgumentError("unfilled SAM record"))
|
throw(ArgumentError("unfilled SAM record"))
|
||||||
|
|
Loading…
Reference in a new issue