- p_->n += m;
- p_->numberOfTexts ++;
-
-#ifdef TCB_TEST_BWT
- p_->dynFMI->addText(text, m);
-#endif
-
- p_->sa->insertSequence((char*)text, m-1, 0);
- assert(p_->sa->isOk());
- }
- else
- {
- // FIXME indexing empty texts
- std::cerr << "TextCollectionBuilder::InsertText() error: can not index empty texts!" << std::endl;
- exit(1);
- }
-}
-
-
-TextCollection * TextCollectionBuilder::InitTextCollection()
-{
- uchar * bwt = 0;
- CSA::usint length = 0;
- if (p_->numberOfTexts == 0)
- {
- p_->numberOfTexts ++; // Add one empty text
- bwt = new uchar[2];
- bwt[0] = '\0';
- bwt[1] = '\0';
- length = 1;
- p_->maxTextLength = 1;
- }
- else
- {
- bwt = (uchar *)p_->sa->getBWT(length);
- delete p_->sa;
- p_->sa = 0;
-
- assert(length == p_->n);
-
-#ifdef TCB_TEST_BWT
- {
- uchar *bwtTest = p_->dynFMI->getBWT();
- printf("123456789012345678901234567890123456789\n");
- for (ulong i = 0; i < p_->n && i < 100; i ++)
- if (bwt[i] < 50)
- printf("%d", (int)bwt[i]);
- else
- printf("%c", bwt[i]);
- printf("\n");
- for (ulong i = 0; i < p_->n && i < 100; i ++)
- if (bwtTest[i] < 50)
- printf("%d", (int)bwtTest[i]);
- else
- printf("%c", bwtTest[i]);
- printf("\n");
-
- // Sanity check
- assert(p_->numberOfTexts == p_->dynFMI->getCollectionSize());
-
- delete p_->dynFMI;
- p_->dynFMI = 0;
- for (ulong i = 0; i < p_->n; ++i)
- if (bwt[i] != bwtTest[i])
- {
- std::cout << "i = " << i << ", bwt = " << (unsigned)bwt[i] << ", " << (unsigned)bwtTest[i] << std::endl;
- assert(0);
- }
- delete [] bwtTest;
- }
-#endif // TCB_TEST_BWT
+ case index_type_default:
+ return new FMIndexBuilder(samplerate, estimatedInputLength);
+ break;
+ case index_type_swcsa:
+ return new SWCSABuilder(samplerate);
+ break;
+ case index_type_rlcsa:
+ return new RLCSABuilder(samplerate, estimatedInputLength);
+ break;