--- /dev/null
+#include "Query.h"
+#include <cstring>
+
+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