X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=sequencedb.cpp;h=585b3b3d8347272cb7b47afc9a923fb0af28eaa9;hb=260ae19c36cb11a53ddc5a75b5e507f8dd8b31d6;hp=657573e8b3d24ee40d5f7ac10270f72a792f69e0;hpb=3117b1c3109121dff476997d3c5db5b47a77729b;p=mothur.git diff --git a/sequencedb.cpp b/sequencedb.cpp index 657573e..585b3b3 100644 --- a/sequencedb.cpp +++ b/sequencedb.cpp @@ -15,17 +15,91 @@ /***********************************************************************/ -SequenceDB::SequenceDB() {} +SequenceDB::SequenceDB() { m = MothurOut::getInstance(); } +/***********************************************************************/ +//the clear function free's the memory +SequenceDB::~SequenceDB() { clear(); } /***********************************************************************/ SequenceDB::SequenceDB(int newSize) { - data.resize(newSize); + data.resize(newSize, Sequence()); } /***********************************************************************/ -SequenceDB::SequenceDB(ifstream&) {} +SequenceDB::SequenceDB(ifstream& filehandle) { + try{ + + //read through file + while (!filehandle.eof()) { + //input sequence info into sequencedb + Sequence newSequence(filehandle); + + if (newSequence.getName() != "") { data.push_back(newSequence); } + + //takes care of white space + m->gobble(filehandle); + } + + filehandle.close(); + + } + catch(exception& e) { + m->errorOut(e, "SequenceDB", "SequenceDB"); + exit(1); + } +} +/*******************************************************************************/ +string SequenceDB::readName(ifstream& in) { + try{ + string name = ""; + int c; + string temp; + + while ((c = in.get()) != EOF) { + //if c is not a line return + if (c != 10) { + name += c; + }else { break; } + } + + return name; + } + catch(exception& e) { + m->errorOut(e, "SequenceDB", "readName"); + exit(1); + } +} + +/*******************************************************************************/ +string SequenceDB::readSequence(ifstream& in) { + try{ + string sequence = ""; + string line; + int pos, c; + + while (!in.eof()) { + //save position in file in case next line is a new name. + pos = in.tellg(); + line = ""; + in >> line; + //if you are at a new name + if (line[0] == '>') { + //put file pointer back since you are now at a new name + in.seekg(pos, ios::beg); + c = in.get(); //because you put it back to a newline char + break; + }else { sequence += line; } + } + + return sequence; + } + catch(exception& e) { + m->errorOut(e, "SequenceDB", "readSequence"); + exit(1); + } +} /***********************************************************************/ @@ -36,14 +110,25 @@ int SequenceDB::getNumSeqs() { /***********************************************************************/ void SequenceDB::set(int index, string newUnaligned) { - Sequence newSeq(data[index].getName(), newUnaligned); - data[index] = newSeq; + try { + data[index] = Sequence(data[index].getName(), newUnaligned); + } + catch(exception& e) { + m->errorOut(e, "SequenceDB", "set"); + exit(1); + } } /***********************************************************************/ void SequenceDB::set(int index, Sequence newSeq) { - data[index] = newSeq; + try { + data[index] = newSeq; + } + catch(exception& e) { + m->errorOut(e, "SequenceDB", "set"); + exit(1); + } } /***********************************************************************/ @@ -54,14 +139,26 @@ Sequence SequenceDB::get(int index) { /***********************************************************************/ -void SequenceDB::changeSize(int newSize) { - data.resize(newSize); +void SequenceDB::resize(int newSize) { + try { + data.resize(newSize); + } + catch(exception& e) { + m->errorOut(e, "SequenceDB", "resize"); + exit(1); + } } /***********************************************************************/ void SequenceDB::clear() { - data.clear(); + try { + data.clear(); + } + catch(exception& e) { + m->errorOut(e, "SequenceDB", "clear"); + exit(1); + } } /***********************************************************************/ @@ -72,23 +169,29 @@ int SequenceDB::size() { /***********************************************************************/ -void SequenceDB::print(ofstream& out) { - for(int i = 0; i < data.size(); i++) - data[i].printSequence(out); +void SequenceDB::print(ostream& out) { + try { + for(int i = 0; i < data.size(); i++) { + data[i].printSequence(out); + } + } + catch(exception& e) { + m->errorOut(e, "SequenceDB", "print"); + exit(1); + } } /***********************************************************************/ -void SequenceDB::add(Sequence newSequence) { +void SequenceDB::push_back(Sequence newSequence) { try { data.push_back(newSequence); } catch(exception& e) { - cout << "Standard Error: " << e.what() << " has occurred in the RAbundVector class Function push_back. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; + m->errorOut(e, "SequenceDB", "push_back"); exit(1); } - catch(...) { - cout << "An unknown error has occurred in the RAbundVector class function push_back. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; - exit(1); - } -} \ No newline at end of file +} + +/***********************************************************************/ +