コード例 #1
0
    const RowMatchNode* TermMatchTreeConverter::BuildMatchTree(const TermMatchNode::Phrase& node)
    {
        RowMatchNode::Builder builder(RowMatchNode::AndMatch, m_allocator);
        RingBuffer<Term, Term::c_log2MaxGramSize + 1> termBuffer;

        StringVector const & stringVector = node.GetGrams();
        for (unsigned i = 0; i < stringVector.GetSize(); ++i)
        {
            *termBuffer.PushBack() = GetUnigramTerm(stringVector[i],
                                                    node.GetStreamId());

            if (termBuffer.GetCount() == Term::c_maxGramSize)
            {
                ProcessNGramBuffer(builder, termBuffer);
            }
        }

        while (!termBuffer.IsEmpty())
        {
            ProcessNGramBuffer(builder, termBuffer);
        }

        return builder.Complete();
    }