// Updates indexes, storing informations about the last added clause private void register(ClauseInfo ci, boolean first) { // See FamilyClausesList.get(Term): same concept Term clause = ci.getHead(); if (clause instanceof Struct) { Struct g = (Struct) clause.getTerm(); if (g.getArity() == 0) { return; } Term t = g.getArg(0).getTerm(); if (t instanceof Var) { numCompClausesIndex.insertAsShared(ci, first); constantCompClausesIndex.insertAsShared(ci, first); structCompClausesIndex.insertAsShared(ci, first); if (first) { listCompClausesList.addFirst(ci); } else { listCompClausesList.addLast(ci); } } else if (t.isAtomic()) { if (t instanceof Number) { numCompClausesIndex.insert((Number) t, ci, first); } else if (t instanceof Struct) { constantCompClausesIndex.insert(((Struct) t).getName(), ci, first); } } else if (t instanceof Struct) { if (isAList((Struct) t)) { if (first) { listCompClausesList.addFirst(ci); } else { listCompClausesList.addLast(ci); } } else { structCompClausesIndex.insert(((Struct) t).getPredicateIndicator(), ci, first); } } } }