PolyLexiconReader* PolyLexReader_init(PolyLexiconReader *self, VArray *readers, I32Array *offsets) { Schema *schema = NULL; for (uint32_t i = 0, max = VA_Get_Size(readers); i < max; i++) { LexiconReader *reader = (LexiconReader*)CERTIFY(VA_Fetch(readers, i), LEXICONREADER); if (!schema) { schema = LexReader_Get_Schema(reader); } } LexReader_init((LexiconReader*)self, schema, NULL, NULL, NULL, -1); PolyLexiconReaderIVARS *const ivars = PolyLexReader_IVARS(self); ivars->readers = (VArray*)INCREF(readers); ivars->offsets = (I32Array*)INCREF(offsets); return self; }
PolyLexiconReader* PolyLexReader_init(PolyLexiconReader *self, VArray *readers, I32Array *offsets) { u32_t i, max; Schema *schema = NULL; for (i = 0, max = VA_Get_Size(readers); i < max; i++) { LexiconReader *reader = (LexiconReader*)ASSERT_IS_A( VA_Fetch(readers, i), LEXICONREADER); if (!schema) { schema = LexReader_Get_Schema(reader); } } LexReader_init((LexiconReader*)self, schema, NULL, NULL, NULL, -1); self->readers = (VArray*)INCREF(readers); self->offsets = (I32Array*)INCREF(offsets); return self; }
DefaultLexiconReader* DefLexReader_init(DefaultLexiconReader *self, Schema *schema, Folder *folder, Snapshot *snapshot, VArray *segments, int32_t seg_tick) { // Init. LexReader_init((LexiconReader*)self, schema, folder, snapshot, segments, seg_tick); DefaultLexiconReaderIVARS *const ivars = DefLexReader_IVARS(self); Segment *segment = DefLexReader_Get_Segment(self); // Build an array of SegLexicon objects. ivars->lexicons = VA_new(Schema_Num_Fields(schema)); for (uint32_t i = 1, max = Schema_Num_Fields(schema) + 1; i < max; i++) { String *field = Seg_Field_Name(segment, i); if (field && S_has_data(schema, folder, segment, field)) { SegLexicon *lexicon = SegLex_new(schema, folder, segment, field); VA_Store(ivars->lexicons, i, (Obj*)lexicon); } } return self; }
DefaultLexiconReader* DefLexReader_init(DefaultLexiconReader *self, Schema *schema, Folder *folder, Snapshot *snapshot, VArray *segments, i32_t seg_tick) { Segment *segment; u32_t i, max; /* Init. */ LexReader_init((LexiconReader*)self, schema, folder, snapshot, segments, seg_tick); segment = DefLexReader_Get_Segment(self); /* Build an array of SegLexicon objects. */ self->lexicons = VA_new(Schema_Num_Fields(schema)); for (i = 1, max = Schema_Num_Fields(schema) + 1; i < max; i++) { CharBuf *field = Seg_Field_Name(segment, i); if (field && S_has_data(schema, folder, segment, field)) { SegLexicon *lexicon = SegLex_new(schema, folder, segment, field); VA_Store(self->lexicons, i, (Obj*)lexicon); } } return self; }