예제 #1
0
//-----------------------------------------------------------------------------
//
//    flagTaggedStates
//
//-----------------------------------------------------------------------------
void     RBBITableBuilder::flagTaggedStates() {
    if (U_FAILURE(*fStatus)) {
        return;
    }
    UVector     tagNodes(*fStatus);
    RBBINode    *tagNode;
    int32_t     i;
    int32_t     n;

    if (U_FAILURE(*fStatus)) {
        return;
    }
    fTree->findNodes(&tagNodes, RBBINode::tag, *fStatus);
    if (U_FAILURE(*fStatus)) {
        return;
    }
    for (i=0; i<tagNodes.size(); i++) {                   // For each tag node t (all of 'em)
        tagNode = (RBBINode *)tagNodes.elementAt(i);

        for (n=0; n<fDStates->size(); n++) {              //    For each state  s (row in the state table)
            RBBIStateDescriptor *sd = (RBBIStateDescriptor *)fDStates->elementAt(n);
            if (sd->fPositions->indexOf(tagNode) >= 0) {  //       if  s include the tag node t
                sortedAdd(&sd->fTagVals, tagNode->fVal);
            }
        }
    }
}
예제 #2
0
void sortedAdd(List & list, ListEl * currentElement, int inNumber)
{
    if (currentElement != nullptr)
    {
        if (inNumber < currentElement -> number)
        {
            ListEl * tmp = new ListEl;
            tmp -> number = currentElement -> number;
            currentElement -> number = inNumber;
            tmp -> next = currentElement -> next;
            currentElement -> next = tmp;
        }
        else
        {
            sortedAdd(list, currentElement -> next, inNumber);
        }
    }
    else
    {
        add(list, inNumber);
    }
}