void operator()(std::string::const_iterator,
std::string::const_iterator) const
{
+ std::string::iterator seq_i = seq.begin();
+ std::string::iterator seq_end = seq.end();
+
+ // this if block is a hack, for some reason spirit was
+ // duplicating the last character if the file didn't end
+ // with a new line.
+ // this checks for the trailing newline, and if it is missing
+ // removes the last character ( which should be the duplicated character.
+ // check test_sequence.cpp:sequence_no_trailing_newline for test case
+ // also see ticket:265 for more information
+ if (seq.size() > 0) {
+ std::string::value_type c = seq[seq.size()-1];
+ if (not (c == '\015' or c == '\012')) {
+ // doesn't end with a new line character
+ seq_end--;
+ }
+ }
+ // end hack
+
// filter out newlines from our sequence
std::string new_seq;
- for(std::string::const_iterator seq_i = seq.begin();
- seq_i != seq.end();
- ++seq_i)
+ for(; seq_i != seq_end; ++seq_i)
{
if (*seq_i != '\015' && *seq_i != '\012') new_seq += *seq_i;
}
//std::cout << "adding seq: " << name << " " << new_seq << std::endl;
-
Sequence s(new_seq);
s.set_fasta_header(name);
seq_list.push_back(s);
SeqSpanRefList::iterator annots_i;
AnnotationsRef metadata;
- // not sure why, or if i'm doing something wrong, but can't seem to pass
- // file pointers down to this method from the mussa control class
- // so each call to save a sequence appends to the file started by mussa_class
- //save_file.open(save_file_path.c_str(), std::ios::app);
-
save_file << "<Sequence>" << std::endl;
save_file << *this << std::endl;
save_file << "</Sequence>" << std::endl;