Example #1
0
//  ----------------------------------------------------------------------------                
CRef<CSeq_annot>
CWiggleReader::ReadSeqAnnot(
    ILineReader& lr,
    IErrorContainer* pErrorContainer ) 
//  ----------------------------------------------------------------------------                
{
    m_ChromId.clear();
    m_Values.clear();
    if (lr.AtEOF()) {
        return CRef<CSeq_annot>();
    }
    while ( xGetLine(lr) ) {
        CTempString s = xGetWord(pErrorContainer);
        if ( s == "browser" ) {
            xReadBrowser();
        }
        else if ( s == "track" ) {
            xReadTrack(pErrorContainer);
        }
        else if ( s == "fixedStep" ) {
            SFixedStepInfo fixedStepInfo;
            xGetFixedStepInfo(fixedStepInfo, pErrorContainer);
            if (!m_ChromId.empty() && fixedStepInfo.mChrom != m_ChromId) {
                cerr << fixedStepInfo.mChrom << endl;
                lr.UngetLine();
                return xGetAnnot();
            }
            xReadFixedStepData(fixedStepInfo, lr, pErrorContainer);
        }
        else if ( s == "variableStep" ) {
            SVarStepInfo varStepInfo;
            xGetVarStepInfo(varStepInfo, pErrorContainer);
            if (!m_ChromId.empty() && varStepInfo.mChrom != m_ChromId) {
                lr.UngetLine();
                return xGetAnnot();
            }
            xReadVariableStepData(varStepInfo, lr, pErrorContainer);
        }
        else {
            xReadBedLine(s, pErrorContainer);
        }
    }
    return xGetAnnot();
}