//----------------------------------------------------------------------------- // // 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); } } } }
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); } }