void GenerateInvertedIndexFile() { FILE *mergedIndex = fopen(Tempmergedindex, "r"); RawPost_item posting; char invertedWord[MAX_WORD_LENGTH]; uint32_t invertedDocID; uint32_t invertedPost; InvertedTable invertedTable; lex_table lextable; string lastWord = ""; uint32_t lastCounter = 0; uint32_t count = 0; while(fscanf(mergedIndex, "%d %s %d\n", &invertedDocID, invertedWord, &invertedPost) != EOF) { posting.docID = invertedDocID; posting.word=invertedWord; posting.pos = invertedPost; // first time if(lastWord == "") { lastWord = posting.word; lex_item *lexiconitem = new lex_item; lexiconitem->word = posting.word; lexiconitem->invertedPointer = 0; lextable.push_back(lexiconitem); } uint32_t count = invertedTable.Insert_table(&posting); if(count > 0) { // count > 0 means meet new word and there is data written lex_item *lexiconitem = lextable.back(); lexiconitem->fileID = invertedTable.GetFileID(); lexiconitem->num = invertedTable.GetDocNumLastWord(); if(count < lastCounter) lexiconitem->invertedPointer = 0; lexiconitem->size = count - lexiconitem->invertedPointer; lexiconitem = new lex_item; lexiconitem->word = posting.word; lastWord = posting.word; lexiconitem->invertedPointer = count; lextable.push_back(lexiconitem); lastCounter = count; } } count = invertedTable.WriteOutstanding(); lextable.back()->fileID = invertedTable.GetFileID(); lextable.back()->num = invertedTable.GetDocNumLastWord(); if(count > 0 && count < lastCounter) lextable.back()->invertedPointer = 0; lextable.back()->size = count - lextable.back()->invertedPointer; Writelextable(&lextable, CURRENT_FILEMODE); }