+ std::cout << "maptext: ";
+ for (ulong i = 0; i <= n; ++i)
+ std::cout << maptexts[i] << ", ";
+ std::cout << std::endl;*/
+
+ // Mark endmarker positions into bitvector
+ ulong * endmarkers = new ulong[n/W+1];
+ for (ulong i = 0; i < n/W+1; ++i)
+ endmarkers[i] = 0;
+ for (ulong i = 0; i < n; ++i)
+ if (texts[i] == 0)
+ Tools::SetField(endmarkers, 1, i, 1);
+ BitRank* br = new BitRank(endmarkers, n, true);
+ assert(numberOfTexts == br->rank(n-1));
+
+ // Build iterators, FIXME clean up iterator construction.
+ StringIterator itBegin((uchar const *)texts.c_str(), (uchar const *)texts.c_str(), n, numberOfTexts, br);
+ StringIterator itEnd((uchar const *)texts.c_str() + n,(uchar const *)texts.c_str(), n, numberOfTexts, br);
+
+ bwtEndPos = (ulong)compute_bwt(itBegin, itEnd, //&maptexts[0], &maptexts[n],
+ &bwt[0], numberOfTexts);