DocReader* DocReader_init(DocReader *self, Schema *schema, Folder *folder, Snapshot *snapshot, VArray *segments, i32_t seg_tick) { return (DocReader*)DataReader_init((DataReader*)self, schema, folder, snapshot, segments, seg_tick); }
LexiconReader* LexReader_init(LexiconReader *self, Schema *schema, Folder *folder, Snapshot *snapshot, VArray *segments, int32_t seg_tick) { DataReader_init((DataReader*)self, schema, folder, snapshot, segments, seg_tick); ABSTRACT_CLASS_CHECK(self, LEXICONREADER); return self; }
HighlightReader* HLReader_init(HighlightReader *self, Schema *schema, Folder *folder, Snapshot *snapshot, VArray *segments, int32_t seg_tick) { DataReader_init((DataReader*)self, schema, folder, snapshot, segments, seg_tick); ABSTRACT_CLASS_CHECK(self, HIGHLIGHTREADER); return self; }
DefaultSortReader* DefSortReader_init(DefaultSortReader *self, Schema *schema, Folder *folder, Snapshot *snapshot, VArray *segments, int32_t seg_tick) { DataReader_init((DataReader*)self, schema, folder, snapshot, segments, seg_tick); DefaultSortReaderIVARS *const ivars = DefSortReader_IVARS(self); Segment *segment = DefSortReader_Get_Segment(self); Hash *metadata = (Hash*)Seg_Fetch_Metadata_Utf8(segment, "sort", 4); // Check format. ivars->format = 0; if (metadata) { Obj *format = Hash_Fetch_Utf8(metadata, "format", 6); if (!format) { THROW(ERR, "Missing 'format' var"); } else { ivars->format = (int32_t)Obj_To_I64(format); if (ivars->format < 2 || ivars->format > 3) { THROW(ERR, "Unsupported sort cache format: %i32", ivars->format); } } } // Init. ivars->caches = Hash_new(0); // Either extract or fake up the "counts", "null_ords", and "ord_widths" // hashes. if (metadata) { ivars->counts = (Hash*)INCREF(CERTIFY(Hash_Fetch_Utf8(metadata, "counts", 6), HASH)); ivars->null_ords = (Hash*)Hash_Fetch_Utf8(metadata, "null_ords", 9); if (ivars->null_ords) { ivars->null_ords = (Hash*)INCREF(CERTIFY(ivars->null_ords, HASH)); } else { ivars->null_ords = Hash_new(0); } ivars->ord_widths = (Hash*)Hash_Fetch_Utf8(metadata, "ord_widths", 10); if (ivars->ord_widths) { ivars->ord_widths = (Hash*)INCREF(CERTIFY(ivars->ord_widths, HASH)); } else { ivars->ord_widths = Hash_new(0); } } else { ivars->counts = Hash_new(0); ivars->null_ords = Hash_new(0); ivars->ord_widths = Hash_new(0); } return self; }