Exemplo n.º 1
0
  // 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);
        }
      }
    }
  }