X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=CSA.cpp;h=04ace79dd25e8b21f737198b0b7c892af887db1a;hb=368c3edc500ee74859732705e46b7c346e8a6d65;hp=bdf97ef03ce785140bb3a356ca77af059ee75a3c;hpb=580705e1bb680eba3cc20075f39365d10cc20012;p=SXSI%2FTextCollection.git diff --git a/CSA.cpp b/CSA.cpp index bdf97ef..04ace79 100644 --- a/CSA.cpp +++ b/CSA.cpp @@ -40,7 +40,7 @@ const uchar CSA::versionFlag = 2; //////////////////////////////////////////////////////////////////////////// // Class CSA::THuffAlphabetRank - +// FIXME Unused code CSA::THuffAlphabetRank::THuffAlphabetRank(uchar *s, TextPosition n, TCodeEntry *codetable, unsigned level) { left = NULL; right = NULL; @@ -122,26 +122,8 @@ CSA::THuffAlphabetRank::~THuffAlphabetRank() { delete bitrank; } -/** - * Saving data fields: - BitRank *bitrank; - bool leaf; - uchar ch; - left child; - right child; -*/ -void CSA::THuffAlphabetRank::Save(FILE *file) -{ -} - -CSA::THuffAlphabetRank::THuffAlphabetRank(FILE *file) -{ - - -} - -/////////////////////////////////////////////f/////////////////////////////// +//////////////////////////////////////////////////////////////////////////// // Class CSA /** @@ -408,6 +390,17 @@ bool CSA::IsLessThan(uchar const*) const /****************************************************************** * Counting queries */ +ulong CSA::Count(uchar const * pattern) const +{ + TextPosition m = strlen((char *)pattern); + if (m == 0) + return 0; + + TextPosition sp = 0, ep = 0; + unsigned count = (unsigned) Search(pattern, m, &sp, &ep); + return count; +} + unsigned CSA::CountPrefix(uchar const * pattern) const { TextPosition m = strlen((char *)pattern); @@ -745,12 +738,12 @@ void CSA::Save(FILE *file) const if (std::fwrite(&(this->bwtEndPos), sizeof(TextPosition), 1, file) != 1) throw std::runtime_error("CSA::Save(): file write error (bwt end position)."); - + alphabetrank->save(file); sampled->Save(file); suffixes->Save(file); suffixDocId->Save(file); - + if (std::fwrite(&(this->numberOfTexts), sizeof(unsigned), 1, file) != 1) throw std::runtime_error("CSA::Save(): file write error (numberOfTexts)."); if (std::fwrite(&(this->numberOfAllTexts), sizeof(unsigned), 1, file) != 1) @@ -760,6 +753,7 @@ void CSA::Save(FILE *file) const endmarkerDocId->Save(file); emptyTextRank->Save(file); + fflush(file); }