X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=sequencedb.cpp;h=e798ee14ac70837e795a7be3191a14f68788c234;hb=a0f1fca79d2ddfa7ad36b4485039c68b5704fe8d;hp=657573e8b3d24ee40d5f7ac10270f72a792f69e0;hpb=3117b1c3109121dff476997d3c5db5b47a77729b;p=mothur.git diff --git a/sequencedb.cpp b/sequencedb.cpp index 657573e..e798ee1 100644 --- a/sequencedb.cpp +++ b/sequencedb.cpp @@ -15,17 +15,100 @@ /***********************************************************************/ -SequenceDB::SequenceDB() {} +SequenceDB::SequenceDB() { m = MothurOut::getInstance(); length = 0; samelength = true; } +/***********************************************************************/ +//the clear function free's the memory +SequenceDB::~SequenceDB() { clear(); } /***********************************************************************/ SequenceDB::SequenceDB(int newSize) { - data.resize(newSize); + data.resize(newSize, Sequence()); + length = 0; samelength = true; } /***********************************************************************/ -SequenceDB::SequenceDB(ifstream&) {} +SequenceDB::SequenceDB(ifstream& filehandle) { + try{ + length = 0; samelength = true; + + //read through file + while (!filehandle.eof()) { + //input sequence info into sequencedb + Sequence newSequence(filehandle); + + if (newSequence.getName() != "") { + if (length == 0) { length = newSequence.getAligned().length(); } + if (length != newSequence.getAligned().length()) { samelength = false; } + 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; } + } + + if (length == 0) { length = sequence.length(); } + if (length != sequence.length()) { samelength = false; } + + return sequence; + } + catch(exception& e) { + m->errorOut(e, "SequenceDB", "readSequence"); + exit(1); + } +} /***********************************************************************/ @@ -36,14 +119,31 @@ int SequenceDB::getNumSeqs() { /***********************************************************************/ void SequenceDB::set(int index, string newUnaligned) { - Sequence newSeq(data[index].getName(), newUnaligned); - data[index] = newSeq; + try { + if (length == 0) { length = newUnaligned.length(); } + if (length != newUnaligned.length()) { samelength = false; } + + 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 { + if (length == 0) { length = newSeq.getAligned().length(); } + if (length != newSeq.getAligned().length()) { samelength = false; } + + data[index] = newSeq; + } + catch(exception& e) { + m->errorOut(e, "SequenceDB", "set"); + exit(1); + } } /***********************************************************************/ @@ -54,14 +154,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 +184,32 @@ 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 { + if (length == 0) { length = newSequence.getAligned().length(); } + if (length != newSequence.getAligned().length()) { samelength = false; } + 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 +} + +/***********************************************************************/ +