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; }
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; }