/*********************************************** !!!! DO NOT EDIT THIS FILE !!!! This file was auto-generated by Build.PL from lib/KinoSearch/Index/DelDocs.pm See KinoSearch::Docs::DevGuide for details. ***********************************************/ #line 144 "lib/KinoSearch/Index/DelDocs.pm" #include "KinoSearchIndexDelDocs.h" SV* Kino_DelDocs_generate_doc_map(BitVector *deldocs, I32 max, I32 offset) { SV *doc_map_sv; I32 *doc_map; I32 new_doc_num; int i; /* allocate space for the doc map */ doc_map_sv = newSV(max * sizeof(I32) + 1); SvCUR_set(doc_map_sv, max * sizeof(I32)); SvPOK_on(doc_map_sv); doc_map = (I32*)SvPVX(doc_map_sv); /* -1 for a deleted doc, a new number otherwise */ new_doc_num = 0; for (i = 0; i < max; i++) { if (Kino_BitVec_get(deldocs, i)) *doc_map++ = -1; else *doc_map++ = offset + new_doc_num++; } return doc_map_sv; } I32 Kino_DelDocs_delete_by_term_docs(BitVector* deldocs, TermDocs* term_docs) { I32 doc; I32 num_deleted = 0; /* iterate through term docs, marking each doc returned as deleted */ while (term_docs->next(term_docs)) { doc = term_docs->get_doc(term_docs); if (Kino_BitVec_get(deldocs, doc)) continue; Kino_BitVec_set(deldocs, doc); num_deleted++; } return num_deleted; }