X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=Query.cpp;fp=Query.cpp;h=29b0bb1e574884468b649408c898045689bd27f4;hb=4ea6ddc07bb8223bb8f56008121b519fa6c75438;hp=0000000000000000000000000000000000000000;hpb=7a26478258c9cd07d8c77296ac6672e03581f799;p=SXSI%2FTextCollection.git diff --git a/Query.cpp b/Query.cpp new file mode 100644 index 0000000..29b0bb1 --- /dev/null +++ b/Query.cpp @@ -0,0 +1,83 @@ +#include "Query.h" +#include + +namespace SXSI +{ + +const char Query::ALPHABET_DNA[] = {'A', 'C', 'G', 'T', 'N'}; + + +Query::Query(TextCollection const *tc_) + : pat(0), patlen(0), tc(tc_), debug(false), klimit(0), + textlen(tc->getLength()), ALPHABET(ALPHABET_DNA) +{ } + + +/*void reverse() +{ + uchar c; + for (int i = 0; i < patlen / 2; ++i) { + c = pat[i]; + pat[i] = pat[patlen - i - 1]; + pat[patlen - i - 1] = c; + } +} + +void revcmp() +{ + reverse(); + for (int i = 0; i < patlen; ++i) + switch (pat[i]) + { + case('A'): pat[i] = 'T'; break; + case('C'): pat[i] = 'G'; break; + case('G'): pat[i] = 'C'; break; + case('T'): pat[i] = 'A'; break; + case('a'): pat[i] = 't'; break; + case('c'): pat[i] = 'g'; break; + case('g'): pat[i] = 'c'; break; + case('a'): pat[i] = 't'; break; + case('N'): pat[i] = 'N'; break; + case('n'): pat[i] = 'n'; break; + default: + std::cerr << "Query::align(): invalid alphabet ("<< pat[i] << ") given!" << std::endl; + std::exit(1); + break; + } + }*/ + +TextCollection::document_result Query::align(uchar const *p, unsigned k) +{ + result.clear(); + this->pat = p; + this->patlen = std::strlen((char const *)p); + this->klimit = k; + + while (!smin.empty()) smin.pop(); + while (!smax.empty()) smax.pop(); + smin.push(0); + smax.push(textlen-1); + match.clear(); + + firstStep(); + + // Search reverse complemented? +/* { + revcmp(); + this->pat = p->c_str(); + while (!smin.empty()) smin.pop(); + while (!smax.empty()) smax.pop(); + smin.push(0); + smax.push(textlen-1); + match.clear(); + + firstStep(); + + revcmp(); // Restore orig string + }*/ + + TextCollection::document_result dr(result.begin(), result.end()); + return dr; +} + +} // namespace