> > | 06/11/10
Finally finished converting almost all the NGSA library classes to c-strings, except the local aligners. I'm going to forgo the aligners for now because I'm planning on doing some more optimization on them later, so I'll have to change the code there anyway. I'm still not sure whether all my changes work, though, because I still can't seem to compile! It seems there's a problem with my common header, where I store all the constants and typedefs. For some reason, when it gets to linking all the libraries, it keeps giving me errors in whatever headers single_end_aligner.cc includes that also use my typedefs, saying that it can't find the definitions. I spent a long time on Google looking up forward declaring headers and typedefs, etc., but I still can't find a solution...maybe I'll have to ask Chris on Monday or Tuesday.
I also did a few benchmarks on a bunch of string vs char array functions, and I've developed the following guidelines for any future compatability issues or conversions:
- Converting a string to char array using
std::string::c_str() or std::string::data() are negligibly fast, so don't worry about doing it!
- There's no difference as far as I can see between
std::string::data() and std::string::c_str() in terms of speed.
- Converting a char array to string (using
std::string(const char *) or std::string::operator=(const char *) ) is very slow (O(n)), avoid as much as possible.
- Using
strncpy with some pointer math and appending a NULL is much faster than string::substr (something like 4-5x faster).
-
std::string::operator[] is a bit slower than char array's [] operators as well, probably because the string does bounds checking (not sure on this). Even doing std::string::c_str() , then using the [] operator is faster (though not by much)
- Also, be wary of the string's
operator=(const char *) assignment, which sometimes masks a char array --> string conversion. Try being as explicit as possible when setting a string equal to a char array (by using the constructor), to avoid confusion
Finally, I think I might take Chris up on his offer for taking a break to study for my MCAT. I'll see how far I get on the weekend, but I might take Monday off for an extra study day. I guess we'll see after the weekend.
To do:
- Finish the conversion by getting stuff to compile! (I really hope saligner ends up being faster).
|