Lexicon* DefLexReader_Lexicon_IMP(DefaultLexiconReader *self, String *field, Obj *term) { DefaultLexiconReaderIVARS *const ivars = DefLexReader_IVARS(self); int32_t field_num = Seg_Field_Num(ivars->segment, field); SegLexicon *orig = (SegLexicon*)VA_Fetch(ivars->lexicons, field_num); SegLexicon *lexicon = NULL; if (orig) { // i.e. has data lexicon = SegLex_new(ivars->schema, ivars->folder, ivars->segment, field); SegLex_Seek(lexicon, term); } return (Lexicon*)lexicon; }
Lexicon* DefLexReader_lexicon(DefaultLexiconReader *self, const CharBuf *field, Obj *term) { i32_t field_num = Seg_Field_Num(self->segment, field); SegLexicon *orig = (SegLexicon*)VA_Fetch(self->lexicons, field_num); SegLexicon *lexicon = NULL; if (orig) { /* i.e. has data */ lexicon = SegLex_new(self->schema, self->folder, self->segment, field); SegLex_Seek(lexicon, term); } return (Lexicon*)lexicon; }
static void S_refresh_lex_q(SegLexQueue *lex_q, Vector *seg_lexicons, Obj *target) { // Empty out the queue. while (1) { SegLexicon *seg_lex = (SegLexicon*)SegLexQ_Pop(lex_q); if (seg_lex == NULL) { break; } DECREF(seg_lex); } // Refill the queue. for (uint32_t i = 0, max = Vec_Get_Size(seg_lexicons); i < max; i++) { SegLexicon *const seg_lexicon = (SegLexicon*)Vec_Fetch(seg_lexicons, i); SegLex_Seek(seg_lexicon, target); if (SegLex_Get_Term(seg_lexicon) != NULL) { SegLexQ_Insert(lex_q, INCREF(seg_lexicon)); } } }
static TermInfo* S_find_tinfo(DefaultLexiconReader *self, String *field, Obj *target) { DefaultLexiconReaderIVARS *const ivars = DefLexReader_IVARS(self); if (field != NULL && target != NULL) { int32_t field_num = Seg_Field_Num(ivars->segment, field); SegLexicon *lexicon = (SegLexicon*)VA_Fetch(ivars->lexicons, field_num); if (lexicon) { // Iterate until the result is ge the term. SegLex_Seek(lexicon, target); //if found matches target, return info; otherwise NULL Obj *found = SegLex_Get_Term(lexicon); if (found && Obj_Equals(target, found)) { return SegLex_Get_Term_Info(lexicon); } } } return NULL; }
TermInfo* DefLexReader_fetch_term_info(DefaultLexiconReader *self, const CharBuf *field, Obj *target) { if (field != NULL && target != NULL) { i32_t field_num = Seg_Field_Num(self->segment, field); SegLexicon *lexicon = (SegLexicon*)VA_Fetch(self->lexicons, field_num); if (lexicon) { /* Iterate until the result is ge the term. */ SegLex_Seek(lexicon, target); /*if found matches target, return info; otherwise NULL */ { Obj *found = SegLex_Get_Term(lexicon); if (found && Obj_Equals(target, found)) { return SegLex_Get_Term_Info(lexicon); } } } } return NULL; }