Class SamRecordTrackingBuffer<T extends SamRecordWithOrdinal>


  • public class SamRecordTrackingBuffer<T extends SamRecordWithOrdinal>
    extends Object
    This class stores SAMRecords for return. The purpose of this class is to buffer records that need to be modified or processed in some fashion, and only return (or emit) them when they have been recorded as being fully examined. If we have too many records in RAM, we can spill over to disk. The order in which they are given (via SamRecordWithOrdinal) determines their order of being returned. It is the responsibility of the user of this class to make sure all records have unique index and are added in order. When a record is examined, we also store a result state. This is currently a boolean to reduce on memory and disk footprint. We store groups of records in blocks and the size of these blocks can be controlled. If we have too many records in RAM, we start spilling blocks to disk. Users should check isEmpty() to see if any records are still being tracked. If so, they should check canEmit() to see if the next record can be returned. If so, they can call next() to get that record. When users are done with this structure, call close().
    • Constructor Detail

      • SamRecordTrackingBuffer

        public SamRecordTrackingBuffer​(int maxRecordsInRam,
                                       int blockSize,
                                       List<File> tmpDirs,
                                       SAMFileHeader header,
                                       Class<T> clazz)
        Parameters:
        maxRecordsInRam - how many records to buffer before spilling to disk
        blockSize - the number of records in a given block
        tmpDirs - the temporary directories to use when spilling to disk
        header - the header
        clazz - the class that extends SamRecordWithOrdinal
    • Method Detail

      • isEmpty

        public boolean isEmpty()
        Returns true if we are tracking no records, false otherwise
      • canEmit

        public boolean canEmit()
        Returns true if we can return the next record (it has been examined).
      • add

        public void add​(SamRecordWithOrdinal samRecordWithOrdinal)
        Add the given SAMRecordIndex to the buffer. The records must be added in order.
        Parameters:
        samRecordWithOrdinal - The samRecordWithOrdinal to be added
      • remove

        public void remove()
        Removes the next record from this buffer
      • size

        public long size()
        Return the total number of elements in the queue, both in memory and on disk
      • contains

        public boolean contains​(SamRecordWithOrdinal samRecordWithOrdinal)
        Returns true if this buffer contains the record at the given index, false otherwise
      • setResultState

        public void setResultState​(SamRecordWithOrdinal samRecordWithOrdinal,
                                   boolean resultState)
        Mark the current samRecordWithOrdinal as having been examined.
        Parameters:
        samRecordWithOrdinal - The samRecordWithOrdinal to be marked
        resultState - Boolean flag indicating the result of the examination of this record.
        Throws:
        SAMException - if the provided recordIndex is not found within the SamRecordTrackingBuffer
      • close

        public void close()
        Close IO resources associated with each underlying BufferBlock