DocVector* PolyHLReader_fetch_doc_vec(PolyHighlightReader *self, int32_t doc_id) { uint32_t seg_tick = PolyReader_sub_tick(self->offsets, doc_id); int32_t offset = I32Arr_Get(self->offsets, seg_tick); HighlightReader *sub_reader = (HighlightReader*)VA_Fetch(self->readers, seg_tick); if (!sub_reader) { THROW(ERR, "Invalid doc_id: %i32", doc_id); } return HLReader_Fetch_Doc_Vec(sub_reader, doc_id - offset); }
DocVector* PolySearcher_Fetch_Doc_Vec_IMP(PolySearcher *self, int32_t doc_id) { PolySearcherIVARS *const ivars = PolySearcher_IVARS(self); uint32_t tick = PolyReader_sub_tick(ivars->starts, doc_id); Searcher *searcher = (Searcher*)VA_Fetch(ivars->searchers, tick); int32_t start = I32Arr_Get(ivars->starts, tick); if (!searcher) { THROW(ERR, "Invalid doc id: %i32", doc_id); } return Searcher_Fetch_Doc_Vec(searcher, doc_id - start); }
DocVector* PolyHLReader_Fetch_Doc_Vec_IMP(PolyHighlightReader *self, int32_t doc_id) { PolyHighlightReaderIVARS *const ivars = PolyHLReader_IVARS(self); uint32_t seg_tick = PolyReader_sub_tick(ivars->offsets, doc_id); int32_t offset = I32Arr_Get(ivars->offsets, seg_tick); HighlightReader *sub_reader = (HighlightReader*)Vec_Fetch(ivars->readers, seg_tick); if (!sub_reader) { THROW(ERR, "Invalid doc_id: %i32", doc_id); } return HLReader_Fetch_Doc_Vec(sub_reader, doc_id - offset); }
HitDoc* PolySearcher_Fetch_Doc_IMP(PolySearcher *self, int32_t doc_id) { PolySearcherIVARS *const ivars = PolySearcher_IVARS(self); uint32_t tick = PolyReader_sub_tick(ivars->starts, doc_id); Searcher *searcher = (Searcher*)VA_Fetch(ivars->searchers, tick); int32_t offset = I32Arr_Get(ivars->starts, tick); if (!searcher) { THROW(ERR, "Invalid doc id: %i32", doc_id); } HitDoc *hit_doc = Searcher_Fetch_Doc(searcher, doc_id - offset); HitDoc_Set_Doc_ID(hit_doc, doc_id); return hit_doc; }
void DefDelWriter_Delete_By_Doc_ID_IMP(DefaultDeletionsWriter *self, int32_t doc_id) { DefaultDeletionsWriterIVARS *const ivars = DefDelWriter_IVARS(self); uint32_t sub_tick = PolyReader_sub_tick(ivars->seg_starts, doc_id); BitVector *bit_vec = (BitVector*)VA_Fetch(ivars->bit_vecs, sub_tick); uint32_t offset = I32Arr_Get(ivars->seg_starts, sub_tick); int32_t seg_doc_id = doc_id - offset; if (!BitVec_Get(bit_vec, seg_doc_id)) { ivars->updated[sub_tick] = true; BitVec_Set(bit_vec, seg_doc_id); } }
HitDoc* PolyDocReader_Fetch_Doc_IMP(PolyDocReader *self, int32_t doc_id) { PolyDocReaderIVARS *const ivars = PolyDocReader_IVARS(self); uint32_t seg_tick = PolyReader_sub_tick(ivars->offsets, doc_id); int32_t offset = I32Arr_Get(ivars->offsets, seg_tick); DocReader *doc_reader = (DocReader*)Vec_Fetch(ivars->readers, seg_tick); HitDoc *hit_doc = NULL; if (!doc_reader) { THROW(ERR, "Invalid doc_id: %i32", doc_id); } else { hit_doc = DocReader_Fetch_Doc(doc_reader, doc_id - offset); HitDoc_Set_Doc_ID(hit_doc, doc_id); } return hit_doc; }
Obj* PolyDocReader_fetch(PolyDocReader *self, i32_t doc_id, float score, i32_t offset) { u32_t seg_tick = PolyReader_sub_tick(self->offsets, doc_id); i32_t my_offset = I32Arr_Get(self->offsets, seg_tick); DocReader *doc_reader = (DocReader*)VA_Fetch(self->readers, seg_tick); Obj *hit = NULL; if (!doc_reader) { THROW("Invalid doc_id: %i32", doc_id); } else { hit = DocReader_Fetch(doc_reader, doc_id - my_offset, score, offset + my_offset); } return hit; }