Obj* TextSortCache_Value_IMP(TextSortCache *self, int32_t ord) { TextSortCacheIVARS *const ivars = TextSortCache_IVARS(self); if (ord == ivars->null_ord) { return NULL; } InStream_Seek(ivars->ix_in, ord * sizeof(int64_t)); int64_t offset = InStream_Read_I64(ivars->ix_in); if (offset == NULL_SENTINEL) { return NULL; } else { uint32_t next_ord = ord + 1; int64_t next_offset; while (1) { InStream_Seek(ivars->ix_in, next_ord * sizeof(int64_t)); next_offset = InStream_Read_I64(ivars->ix_in); if (next_offset != NULL_SENTINEL) { break; } next_ord++; } // Read character data into String. size_t len = (size_t)(next_offset - offset); char *ptr = (char*)MALLOCATE(len + 1); InStream_Seek(ivars->dat_in, offset); InStream_Read_Bytes(ivars->dat_in, ptr, len); ptr[len] = '\0'; return (Obj*)Str_new_steal_utf8(ptr, len); } }
Obj* TextSortCache_value(TextSortCache *self, int32_t ord, Obj *blank) { if (ord == self->null_ord) { return NULL; } InStream_Seek(self->ix_in, ord * sizeof(int64_t)); int64_t offset = InStream_Read_I64(self->ix_in); if (offset == NULL_SENTINEL) { return NULL; } else { uint32_t next_ord = ord + 1; int64_t next_offset; while (1) { InStream_Seek(self->ix_in, next_ord * sizeof(int64_t)); next_offset = InStream_Read_I64(self->ix_in); if (next_offset != NULL_SENTINEL) { break; } next_ord++; } // Read character data into CharBuf. CERTIFY(blank, CHARBUF); int64_t len = next_offset - offset; char *ptr = CB_Grow((CharBuf*)blank, (size_t)len); InStream_Seek(self->dat_in, offset); InStream_Read_Bytes(self->dat_in, ptr, (size_t)len); ptr[len] = '\0'; CB_Set_Size((CharBuf*)blank, (size_t)len); } return blank; }
void DefDocReader_Read_Record_IMP(DefaultDocReader *self, ByteBuf *buffer, int32_t doc_id) { DefaultDocReaderIVARS *const ivars = DefDocReader_IVARS(self); // Find start and length of variable length record. InStream_Seek(ivars->ix_in, (int64_t)doc_id * 8); int64_t start = InStream_Read_I64(ivars->ix_in); int64_t end = InStream_Read_I64(ivars->ix_in); size_t size = (size_t)(end - start); // Read in the record. char *buf = BB_Grow(buffer, size); InStream_Seek(ivars->dat_in, start); InStream_Read_Bytes(ivars->dat_in, buf, size); BB_Set_Size(buffer, size); }
void DefHLReader_read_record(DefaultHighlightReader *self, int32_t doc_id, ByteBuf *target) { InStream *dat_in = self->dat_in; InStream *ix_in = self->ix_in; InStream_Seek(ix_in, doc_id * 8); // Copy the whole record. int64_t filepos = InStream_Read_I64(ix_in); int64_t end = InStream_Read_I64(ix_in); size_t size = (size_t)(end - filepos); char *buf = BB_Grow(target, size); InStream_Seek(dat_in, filepos); InStream_Read_Bytes(dat_in, buf, size); BB_Set_Size(target, size); }
Obj* I64SortCache_value(Int64SortCache *self, int32_t ord, Obj *blank) { if (ord == self->null_ord) { return NULL; } else if (ord < 0) { THROW(ERR, "Ordinal less than 0 for %o: %i32", self->field, ord); } else { Integer64 *int_blank = (Integer64*)CERTIFY(blank, INTEGER64); InStream_Seek(self->dat_in, ord * sizeof(int64_t)); Int64_Set_Value(int_blank, InStream_Read_I64(self->dat_in)); } return blank; }
DocVector* DefHLReader_fetch_doc_vec(DefaultHighlightReader *self, int32_t doc_id) { DocVector *doc_vec = DocVec_new(); int64_t file_pos; uint32_t num_fields; InStream_Seek(self->ix_in, doc_id * 8); file_pos = InStream_Read_I64(self->ix_in); InStream_Seek(self->dat_in, file_pos); num_fields = InStream_Read_C32(self->dat_in); while (num_fields--) { CharBuf *field = CB_deserialize(NULL, self->dat_in); ByteBuf *field_buf = BB_deserialize(NULL, self->dat_in); DocVec_Add_Field_Buf(doc_vec, field, field_buf); DECREF(field_buf); DECREF(field); } return doc_vec; }
DocVector* DefHLReader_Fetch_Doc_Vec_IMP(DefaultHighlightReader *self, int32_t doc_id) { DefaultHighlightReaderIVARS *const ivars = DefHLReader_IVARS(self); InStream *const ix_in = ivars->ix_in; InStream *const dat_in = ivars->dat_in; DocVector *doc_vec = DocVec_new(); InStream_Seek(ix_in, doc_id * 8); int64_t file_pos = InStream_Read_I64(ix_in); InStream_Seek(dat_in, file_pos); uint32_t num_fields = InStream_Read_CU32(dat_in); while (num_fields--) { String *field = Freezer_read_string(dat_in); Blob *field_buf = Freezer_read_blob(dat_in); DocVec_Add_Field_Buf(doc_vec, field, field_buf); DECREF(field_buf); DECREF(field); } return doc_vec; }
DocVector* DefHLReader_fetch_doc_vec(DefaultHighlightReader *self, int32_t doc_id) { InStream *const ix_in = self->ix_in; InStream *const dat_in = self->dat_in; DocVector *doc_vec = DocVec_new(); InStream_Seek(ix_in, doc_id * 8); int64_t file_pos = InStream_Read_I64(ix_in); InStream_Seek(dat_in, file_pos); uint32_t num_fields = InStream_Read_C32(dat_in); while (num_fields--) { CharBuf *field = CB_Deserialize((CharBuf*)VTable_Make_Obj(CHARBUF), dat_in); ByteBuf *field_buf = BB_Deserialize((ByteBuf*)VTable_Make_Obj(BYTEBUF), dat_in); DocVec_Add_Field_Buf(doc_vec, field, field_buf); DECREF(field_buf); DECREF(field); } return doc_vec; }