The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
/* 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.
 */

parcel Lucy;

/** Multi-segment Lexicon.
 *
 * Interleaves the output of multiple SegLexicons.
 */

class Lucy::Index::PolyLexicon cnick PolyLex
    inherits Lucy::Index::Lexicon {

    Obj            *term;
    SegLexQueue    *lex_q;
    VArray         *seg_lexicons;
    int32_t         size;

    inert incremented PolyLexicon*
    new(const CharBuf *field, VArray *sub_readers);

    inert PolyLexicon*
    init(PolyLexicon *self, const CharBuf *field, VArray *sub_readers);

    public void
    Seek(PolyLexicon *self, Obj *target = NULL);

    public bool_t
    Next(PolyLexicon *self);

    public void
    Reset(PolyLexicon *self);

    public nullable Obj*
    Get_Term(PolyLexicon *self);

    uint32_t
    Get_Num_Seg_Lexicons(PolyLexicon *self);

    public void
    Destroy(PolyLexicon *self);
}

class Lucy::Index::SegLexQueue cnick SegLexQ
    inherits Lucy::Util::PriorityQueue {

    inert incremented SegLexQueue*
    new(uint32_t max_size);

    bool_t
    Less_Than(SegLexQueue *self, Obj *a, Obj *b);
}