TermVector* TV_deserialize(TermVector *self, InStream *instream) { u32_t i; CharBuf *field = (CharBuf*)CB_deserialize(NULL, instream); CharBuf *text = (CharBuf*)CB_deserialize(NULL, instream); u32_t num_pos = InStream_Read_C32(instream); i32_t *posits, *starts, *ends; I32Array *positions, *start_offsets, *end_offsets; /* Read positional data. */ posits = MALLOCATE(num_pos, i32_t); starts = MALLOCATE(num_pos, i32_t); ends = MALLOCATE(num_pos, i32_t); for (i = 0; i < num_pos; i++) { posits[i] = InStream_Read_C32(instream); starts[i] = InStream_Read_C32(instream); ends[i] = InStream_Read_C32(instream); } positions = I32Arr_new_steal(posits, num_pos); start_offsets = I32Arr_new_steal(starts, num_pos); end_offsets = I32Arr_new_steal(ends, num_pos); self = self ? self : (TermVector*)VTable_Make_Obj(&TERMVECTOR); self = TV_init(self, field, text, positions, start_offsets, end_offsets); DECREF(positions); DECREF(start_offsets); DECREF(end_offsets); DECREF(text); DECREF(field); return self; }
TermVector* TV_new(const CharBuf *field, const CharBuf *text, I32Array *positions, I32Array *start_offsets, I32Array *end_offsets) { TermVector *self = (TermVector*)VTable_Make_Obj(&TERMVECTOR); return TV_init(self, field, text, positions, start_offsets, end_offsets); }
TermVector* TV_Deserialize_IMP(TermVector *self, InStream *instream) { String *field = Freezer_read_string(instream); String *text = Freezer_read_string(instream); size_t num_pos = InStream_Read_C64(instream); // Read positional data. int32_t *posits = (int32_t*)MALLOCATE(num_pos * sizeof(int32_t)); int32_t *starts = (int32_t*)MALLOCATE(num_pos * sizeof(int32_t)); int32_t *ends = (int32_t*)MALLOCATE(num_pos * sizeof(int32_t)); for (size_t i = 0; i < num_pos; i++) { posits[i] = InStream_Read_C32(instream); starts[i] = InStream_Read_C32(instream); ends[i] = InStream_Read_C32(instream); } I32Array *positions = I32Arr_new_steal(posits, num_pos); I32Array *start_offsets = I32Arr_new_steal(starts, num_pos); I32Array *end_offsets = I32Arr_new_steal(ends, num_pos); TV_init(self, field, text, positions, start_offsets, end_offsets); DECREF(positions); DECREF(start_offsets); DECREF(end_offsets); DECREF(text); DECREF(field); return self; }
TermVector* TV_new(String *field, String *text, I32Array *positions, I32Array *start_offsets, I32Array *end_offsets) { TermVector *self = (TermVector*)Class_Make_Obj(TERMVECTOR); return TV_init(self, field, text, positions, start_offsets, end_offsets); }