TermVector* DocVec_Term_Vector_IMP(DocVector *self, String *field, String *term_text) { DocVectorIVARS *const ivars = DocVec_IVARS(self); Hash *field_vector = (Hash*)Hash_Fetch(ivars->field_vectors, (Obj*)field); // If no cache hit, try to fill cache. if (field_vector == NULL) { ByteBuf *field_buf = (ByteBuf*)Hash_Fetch(ivars->field_bufs, (Obj*)field); // Bail if there's no content or the field isn't highlightable. if (field_buf == NULL) { return NULL; } field_vector = S_extract_tv_cache(field_buf); Hash_Store(ivars->field_vectors, (Obj*)field, (Obj*)field_vector); } // Get a buf for the term text or bail. ByteBuf *tv_buf = (ByteBuf*)Hash_Fetch(field_vector, (Obj*)term_text); if (tv_buf == NULL) { return NULL; } return S_extract_tv_from_tv_buf(field, term_text, tv_buf); }
TermVector* DocVec_term_vector(DocVector *self, const CharBuf *field, const CharBuf *term_text) { Hash *field_vector = (Hash*)Hash_Fetch(self->field_vectors, (Obj*)field); // If no cache hit, try to fill cache. if (field_vector == NULL) { ByteBuf *field_buf = (ByteBuf*)Hash_Fetch(self->field_bufs, (Obj*)field); // Bail if there's no content or the field isn't highlightable. if (field_buf == NULL) { return NULL; } field_vector = S_extract_tv_cache(field_buf); Hash_Store(self->field_vectors, (Obj*)field, (Obj*)field_vector); } // Get a buf for the term text or bail. ByteBuf *tv_buf = (ByteBuf*)Hash_Fetch(field_vector, (Obj*)term_text); if (tv_buf == NULL) { return NULL; } return S_extract_tv_from_tv_buf(field, term_text, tv_buf); }