/////////////////////////////////////////////////////// /// /// Read a string from a stream. The string is following /// by its size /// inline string ReadStringFromStream(CNcbiIstream& is) { string str; if (!is.good() || is.eof()) return str; size_t size; is >> size; if (!is.good() || is.eof()) return str; vector<char> buf(size+1, 0); is.read(&*buf.begin(), size+1); size_t count = is.gcount(); if (count > 0) str.append((&*buf.begin())+1, count-1); return str; }
/** **\brief Object constructor. ** **\param newInputStream input stream to read data from. **\param is_nucl true if the input is DNA, false if it is protein **\param parse_seqids false to disable parsing of deflines ** **/ CMaskFastaReader( CNcbiIstream & newInputStream, bool is_nucl = true, bool parse_seqids = false ) : CMaskReader( newInputStream ), is_nucleotide_(is_nucl), parse_seqids_(parse_seqids), fasta_reader_( newInputStream, CONST_FLAGS | (is_nucl ? objects::CFastaReader::fAssumeNuc : objects::CFastaReader::fAssumeProt) | (parse_seqids ? 0 : objects::CFastaReader::fNoParseID) ) { if( !newInputStream && !newInputStream.eof() ) { NCBI_THROW( Exception, eBadStream, "bad stream state at fasta mask reader initialization" ); } }
// Helper function for loading alignments. Returns number of alignments loaded // into the container. The expected format is: // <int-number-of-alignments> // <Seq-align>+ size_t LoadAligns(CNcbiIstream& in, CAlnContainer& aligns, size_t limit = 0) { size_t num_aligns = 0; while ( !in.eof() ) { try { CRef<CSeq_align> align(new CSeq_align); in >> MSerial_AsnText >> *align; align->Validate(true); aligns.insert(*align); num_aligns++; if (limit > 0 && num_aligns >= limit) break; } catch (CIOException e) { break; } } return num_aligns; }
// ---------------------------------------------------------------------------- void CMultiReaderApp::xProcessNewick( const CArgs& args, CNcbiIstream& istr, CNcbiOstream& ostr) // ---------------------------------------------------------------------------- { string strTree; char c = istr.get(); while (!istr.eof()) { strTree += c; if (c == ';') { CNcbiIstrstream istrstr(strTree.c_str()); auto_ptr<TPhyTreeNode> pTree(ReadNewickTree(istrstr) ); CRef<CBioTreeContainer> btc = MakeBioTreeContainer(pTree.get()); xWriteObject(*btc, ostr); strTree.clear(); } c = istr.get(); } }