void modelCacheIan :: processAutomaton ( const DLVertex& cur ) { const RAStateTransitions& RST = cur.getRole()->getAutomaton()[cur.getState()]; // for every transition starting from a given state, // add the role that is accepted by a transition for ( RAStateTransitions::const_iterator i = RST.begin(), i_end = RST.end(); i < i_end; ++i ) for ( RATransition::const_iterator r = (*i)->begin(), r_end = (*i)->end(); r < r_end; ++r ) forallRoles.insert((*r)->index()); }
void modelCacheIan :: processConcept ( const DLVertex& cur, bool pos, bool det ) { switch ( cur.Type() ) { case dtTop: // sanity checks case dtDataType: // data entries can not be cached case dtDataValue: case dtDataExpr: fpp_unreachable(); break; case dtNConcept: // add concepts to Concepts case dtPConcept: case dtNSingleton: case dtPSingleton: (det ? getDConcepts(pos) : getNConcepts(pos)).insert(static_cast<const ClassifiableEntry*>(cur.getConcept())->index()); break; case dtIrr: // for \neg \ER.Self: add R to AR-set case dtForall: // add AR.C roles to forallRoles case dtLE: // for <= n R: add R to forallRoles if ( unlikely ( cur.getRole()->isTop() ) ) // force clash to every other edge (pos ? forallRoles : existsRoles).completeSet(); else if ( pos ) // no need to deal with existentials here: they would be created through edges { if ( cur.getRole()->isSimple() ) forallRoles.insert(cur.getRole()->index()); else processAutomaton(cur); } break; default: // all other -- nothing to do break; } }