| /* Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #define C_LUCY_ARCHITECTURE |
| #include "Lucy/Util/ToolSet.h" |
| |
| #include "Lucy/Plan/Architecture.h" |
| #include "Lucy/Index/DeletionsReader.h" |
| #include "Lucy/Index/DeletionsWriter.h" |
| #include "Lucy/Index/DocReader.h" |
| #include "Lucy/Index/DocWriter.h" |
| #include "Lucy/Index/HighlightReader.h" |
| #include "Lucy/Index/HighlightWriter.h" |
| #include "Lucy/Index/LexiconReader.h" |
| #include "Lucy/Index/LexiconWriter.h" |
| #include "Lucy/Index/PolyReader.h" |
| #include "Lucy/Index/PostingListReader.h" |
| #include "Lucy/Index/PostingListWriter.h" |
| #include "Lucy/Index/Segment.h" |
| #include "Lucy/Index/SegReader.h" |
| #include "Lucy/Index/SegWriter.h" |
| #include "Lucy/Index/Similarity.h" |
| #include "Lucy/Index/Snapshot.h" |
| #include "Lucy/Index/SortReader.h" |
| #include "Lucy/Index/SortWriter.h" |
| #include "Lucy/Plan/Schema.h" |
| #include "Lucy/Store/Folder.h" |
| |
| Architecture* |
| Arch_new() { |
| Architecture *self = (Architecture*)VTable_Make_Obj(ARCHITECTURE); |
| return Arch_init(self); |
| } |
| |
| Architecture* |
| Arch_init(Architecture *self) { |
| return self; |
| } |
| |
| bool_t |
| Arch_equals(Architecture *self, Obj *other) { |
| Architecture *twin = (Architecture*)other; |
| if (twin == self) { return true; } |
| if (!Obj_Is_A(other, ARCHITECTURE)) { return false; } |
| return true; |
| } |
| |
| void |
| Arch_init_seg_writer(Architecture *self, SegWriter *writer) { |
| Arch_Register_Lexicon_Writer(self, writer); |
| Arch_Register_Posting_List_Writer(self, writer); |
| Arch_Register_Sort_Writer(self, writer); |
| Arch_Register_Doc_Writer(self, writer); |
| Arch_Register_Highlight_Writer(self, writer); |
| Arch_Register_Deletions_Writer(self, writer); |
| } |
| |
| void |
| Arch_register_lexicon_writer(Architecture *self, SegWriter *writer) { |
| Schema *schema = SegWriter_Get_Schema(writer); |
| Snapshot *snapshot = SegWriter_Get_Snapshot(writer); |
| Segment *segment = SegWriter_Get_Segment(writer); |
| PolyReader *polyreader = SegWriter_Get_PolyReader(writer); |
| LexiconWriter *lex_writer |
| = LexWriter_new(schema, snapshot, segment, polyreader); |
| UNUSED_VAR(self); |
| SegWriter_Register(writer, VTable_Get_Name(LEXICONWRITER), |
| (DataWriter*)lex_writer); |
| } |
| |
| void |
| Arch_register_posting_list_writer(Architecture *self, SegWriter *writer) { |
| Schema *schema = SegWriter_Get_Schema(writer); |
| Snapshot *snapshot = SegWriter_Get_Snapshot(writer); |
| Segment *segment = SegWriter_Get_Segment(writer); |
| PolyReader *polyreader = SegWriter_Get_PolyReader(writer); |
| LexiconWriter *lex_writer = (LexiconWriter*)SegWriter_Fetch( |
| writer, VTable_Get_Name(LEXICONWRITER)); |
| UNUSED_VAR(self); |
| if (!lex_writer) { |
| THROW(ERR, "Can't fetch a LexiconWriter"); |
| } |
| else { |
| PostingListWriter *plist_writer |
| = PListWriter_new(schema, snapshot, segment, polyreader, |
| lex_writer); |
| SegWriter_Register(writer, VTable_Get_Name(POSTINGLISTWRITER), |
| (DataWriter*)plist_writer); |
| SegWriter_Add_Writer(writer, (DataWriter*)INCREF(plist_writer)); |
| } |
| } |
| |
| void |
| Arch_register_doc_writer(Architecture *self, SegWriter *writer) { |
| Schema *schema = SegWriter_Get_Schema(writer); |
| Snapshot *snapshot = SegWriter_Get_Snapshot(writer); |
| Segment *segment = SegWriter_Get_Segment(writer); |
| PolyReader *polyreader = SegWriter_Get_PolyReader(writer); |
| DocWriter *doc_writer |
| = DocWriter_new(schema, snapshot, segment, polyreader); |
| UNUSED_VAR(self); |
| SegWriter_Register(writer, VTable_Get_Name(DOCWRITER), |
| (DataWriter*)doc_writer); |
| SegWriter_Add_Writer(writer, (DataWriter*)INCREF(doc_writer)); |
| } |
| |
| void |
| Arch_register_sort_writer(Architecture *self, SegWriter *writer) { |
| Schema *schema = SegWriter_Get_Schema(writer); |
| Snapshot *snapshot = SegWriter_Get_Snapshot(writer); |
| Segment *segment = SegWriter_Get_Segment(writer); |
| PolyReader *polyreader = SegWriter_Get_PolyReader(writer); |
| SortWriter *sort_writer |
| = SortWriter_new(schema, snapshot, segment, polyreader); |
| UNUSED_VAR(self); |
| SegWriter_Register(writer, VTable_Get_Name(SORTWRITER), |
| (DataWriter*)sort_writer); |
| SegWriter_Add_Writer(writer, (DataWriter*)INCREF(sort_writer)); |
| } |
| |
| void |
| Arch_register_highlight_writer(Architecture *self, SegWriter *writer) { |
| Schema *schema = SegWriter_Get_Schema(writer); |
| Snapshot *snapshot = SegWriter_Get_Snapshot(writer); |
| Segment *segment = SegWriter_Get_Segment(writer); |
| PolyReader *polyreader = SegWriter_Get_PolyReader(writer); |
| HighlightWriter *hl_writer |
| = HLWriter_new(schema, snapshot, segment, polyreader); |
| UNUSED_VAR(self); |
| SegWriter_Register(writer, VTable_Get_Name(HIGHLIGHTWRITER), |
| (DataWriter*)hl_writer); |
| SegWriter_Add_Writer(writer, (DataWriter*)INCREF(hl_writer)); |
| } |
| |
| void |
| Arch_register_deletions_writer(Architecture *self, SegWriter *writer) { |
| Schema *schema = SegWriter_Get_Schema(writer); |
| Snapshot *snapshot = SegWriter_Get_Snapshot(writer); |
| Segment *segment = SegWriter_Get_Segment(writer); |
| PolyReader *polyreader = SegWriter_Get_PolyReader(writer); |
| DefaultDeletionsWriter *del_writer |
| = DefDelWriter_new(schema, snapshot, segment, polyreader); |
| UNUSED_VAR(self); |
| SegWriter_Register(writer, VTable_Get_Name(DELETIONSWRITER), |
| (DataWriter*)del_writer); |
| SegWriter_Set_Del_Writer(writer, (DeletionsWriter*)del_writer); |
| } |
| |
| void |
| Arch_init_seg_reader(Architecture *self, SegReader *reader) { |
| Arch_Register_Doc_Reader(self, reader); |
| Arch_Register_Lexicon_Reader(self, reader); |
| Arch_Register_Posting_List_Reader(self, reader); |
| Arch_Register_Sort_Reader(self, reader); |
| Arch_Register_Highlight_Reader(self, reader); |
| Arch_Register_Deletions_Reader(self, reader); |
| } |
| |
| void |
| Arch_register_doc_reader(Architecture *self, SegReader *reader) { |
| Schema *schema = SegReader_Get_Schema(reader); |
| Folder *folder = SegReader_Get_Folder(reader); |
| VArray *segments = SegReader_Get_Segments(reader); |
| Snapshot *snapshot = SegReader_Get_Snapshot(reader); |
| int32_t seg_tick = SegReader_Get_Seg_Tick(reader); |
| DefaultDocReader *doc_reader |
| = DefDocReader_new(schema, folder, snapshot, segments, seg_tick); |
| UNUSED_VAR(self); |
| SegReader_Register(reader, VTable_Get_Name(DOCREADER), |
| (DataReader*)doc_reader); |
| } |
| |
| void |
| Arch_register_posting_list_reader(Architecture *self, SegReader *reader) { |
| Schema *schema = SegReader_Get_Schema(reader); |
| Folder *folder = SegReader_Get_Folder(reader); |
| VArray *segments = SegReader_Get_Segments(reader); |
| Snapshot *snapshot = SegReader_Get_Snapshot(reader); |
| int32_t seg_tick = SegReader_Get_Seg_Tick(reader); |
| LexiconReader *lex_reader = (LexiconReader*)SegReader_Obtain( |
| reader, VTable_Get_Name(LEXICONREADER)); |
| DefaultPostingListReader *plist_reader |
| = DefPListReader_new(schema, folder, snapshot, segments, seg_tick, |
| lex_reader); |
| UNUSED_VAR(self); |
| SegReader_Register(reader, VTable_Get_Name(POSTINGLISTREADER), |
| (DataReader*)plist_reader); |
| } |
| |
| void |
| Arch_register_lexicon_reader(Architecture *self, SegReader *reader) { |
| Schema *schema = SegReader_Get_Schema(reader); |
| Folder *folder = SegReader_Get_Folder(reader); |
| VArray *segments = SegReader_Get_Segments(reader); |
| Snapshot *snapshot = SegReader_Get_Snapshot(reader); |
| int32_t seg_tick = SegReader_Get_Seg_Tick(reader); |
| DefaultLexiconReader *lex_reader |
| = DefLexReader_new(schema, folder, snapshot, segments, seg_tick); |
| UNUSED_VAR(self); |
| SegReader_Register(reader, VTable_Get_Name(LEXICONREADER), |
| (DataReader*)lex_reader); |
| } |
| |
| void |
| Arch_register_sort_reader(Architecture *self, SegReader *reader) { |
| Schema *schema = SegReader_Get_Schema(reader); |
| Folder *folder = SegReader_Get_Folder(reader); |
| VArray *segments = SegReader_Get_Segments(reader); |
| Snapshot *snapshot = SegReader_Get_Snapshot(reader); |
| int32_t seg_tick = SegReader_Get_Seg_Tick(reader); |
| DefaultSortReader *sort_reader |
| = DefSortReader_new(schema, folder, snapshot, segments, seg_tick); |
| UNUSED_VAR(self); |
| SegReader_Register(reader, VTable_Get_Name(SORTREADER), |
| (DataReader*)sort_reader); |
| } |
| |
| void |
| Arch_register_highlight_reader(Architecture *self, SegReader *reader) { |
| Schema *schema = SegReader_Get_Schema(reader); |
| Folder *folder = SegReader_Get_Folder(reader); |
| VArray *segments = SegReader_Get_Segments(reader); |
| Snapshot *snapshot = SegReader_Get_Snapshot(reader); |
| int32_t seg_tick = SegReader_Get_Seg_Tick(reader); |
| DefaultHighlightReader* hl_reader |
| = DefHLReader_new(schema, folder, snapshot, segments, seg_tick); |
| UNUSED_VAR(self); |
| SegReader_Register(reader, VTable_Get_Name(HIGHLIGHTREADER), |
| (DataReader*)hl_reader); |
| } |
| |
| void |
| Arch_register_deletions_reader(Architecture *self, SegReader *reader) { |
| Schema *schema = SegReader_Get_Schema(reader); |
| Folder *folder = SegReader_Get_Folder(reader); |
| VArray *segments = SegReader_Get_Segments(reader); |
| Snapshot *snapshot = SegReader_Get_Snapshot(reader); |
| int32_t seg_tick = SegReader_Get_Seg_Tick(reader); |
| DefaultDeletionsReader* del_reader |
| = DefDelReader_new(schema, folder, snapshot, segments, seg_tick); |
| UNUSED_VAR(self); |
| SegReader_Register(reader, VTable_Get_Name(DELETIONSREADER), |
| (DataReader*)del_reader); |
| } |
| |
| Similarity* |
| Arch_make_similarity(Architecture *self) { |
| UNUSED_VAR(self); |
| return Sim_new(); |
| } |
| |
| int32_t |
| Arch_index_interval(Architecture *self) { |
| UNUSED_VAR(self); |
| return 128; |
| } |
| |
| int32_t |
| Arch_skip_interval(Architecture *self) { |
| UNUSED_VAR(self); |
| return 16; |
| } |
| |
| |