Package com.cburch.logisim.analyze.model

Examples of com.cburch.logisim.analyze.model.Expression


     
      VariableList outputs = model.getOutputs();
      boolean enableNands = true;
      for (int i = 0; i < outputs.size(); i++) {
        String output = outputs.get(i);
        Expression expr = model.getOutputExpressions().getExpression(output);
        if (expr != null && expr.containsXor()) { enableNands = false; break; }
      }
      nands.setEnabled(enableNands);
     
      GridBagLayout gb = new GridBagLayout();
      GridBagConstraints gc = new GridBagConstraints();
View Full Code Here


    for (Map.Entry<Instance, String> entry : pinNames.entrySet()) {
      Instance pin = entry.getKey();
      String label = entry.getValue();
      if (Pin.FACTORY.isInputPin(pin)) {
        expressionMap.currentCause = Instance.getComponentFor(pin);
        Expression e = Expressions.variable(label);
        expressionMap.put(pin.getLocation(), e);
        inputNames.add(label);
      } else {
        outputPins.add(pin);
        outputNames.add(label);
      }
    }
   
    propagateComponents(expressionMap, circuit.getNonWires());
   
    for (int iterations = 0; !expressionMap.dirtyPoints.isEmpty(); iterations++) {
      if (iterations > MAX_ITERATIONS) {
        throw new AnalyzeException.Circular();
      }
     
      propagateWires(expressionMap, new HashSet<Location>(expressionMap.dirtyPoints));

      HashSet<Component> dirtyComponents = getDirtyComponents(circuit, expressionMap.dirtyPoints);
      expressionMap.dirtyPoints.clear();
      propagateComponents(expressionMap, dirtyComponents);
     
      Expression expr = checkForCircularExpressions(expressionMap);
      if (expr != null) throw new AnalyzeException.Circular();
    }
   
    model.setVariables(inputNames, outputNames);
    for (int i = 0; i < outputPins.size(); i++) {
View Full Code Here

  // propagates expressions down wires
  private static void propagateWires(ExpressionMap expressionMap,
      HashSet<Location> pointsToProcess) throws AnalyzeException {
    expressionMap.currentCause = null;
    for (Location p : pointsToProcess) {
      Expression e = expressionMap.get(p);
      expressionMap.currentCause = expressionMap.causes.get(p);
      WireBundle bundle = expressionMap.circuit.wires.getWireBundle(p);
      if (e != null && bundle != null && bundle.points != null) {
        for (Location p2 : bundle.points) {
          if (p2.equals(p)) continue;
          Expression old = expressionMap.get(p2);
          if (old != null) {
            Component eCause = expressionMap.currentCause;
            Component oldCause = expressionMap.causes.get(p2);
            if (eCause != oldCause && !old.equals(e)) {
              throw new AnalyzeException.Conflict();
            }
          }
          expressionMap.put(p2, e);
        }
View Full Code Here

  /** Checks whether any of the recently placed expressions in the
   * expression map are self-referential; if so, return it. */
  private static Expression checkForCircularExpressions(ExpressionMap expressionMap)
      throws AnalyzeException {
    for (Location point : expressionMap.dirtyPoints) {
      Expression expr = expressionMap.get(point);
      if (expr.isCircular()) return expr;
    }
    return null;
  }
View Full Code Here

      this.circuit = circuit;
    }
   
    @Override
    public Expression put(Location point, Expression expression) {
      Expression ret = super.put(point, expression);
      if (currentCause != null) causes.put(point, currentCause);
      if (ret == null ? expression != null : !ret.equals(expression)) {
        dirtyPoints.add(point);
      }
      return ret;
    }
View Full Code Here

    return ret;
  }

  @Override
  protected Expression computeExpression(Expression[] inputs, int numInputs) {
    Expression ret = inputs[0];
    for (int i = 1; i < numInputs; i++) {
      ret = Expressions.or(ret, inputs[i]);
    }
    return ret;
  }
View Full Code Here

   
    Layout[] layouts = new Layout[model.getOutputs().size()];
    int maxWidth = 0;
    for (int i = 0; i < layouts.length; i++) {
      String output = model.getOutputs().get(i);
      Expression expr = model.getOutputExpressions().getExpression(output);
      CircuitDetermination det = CircuitDetermination.create(expr);
      if (det != null) {
        if (twoInputs) det.convertToTwoInputs();
        if (useNands) det.convertToNands();
        det.repair();
View Full Code Here

        return GateFunctions.computeAnd(inputs, numInputs).not();
    }

    @Override
    protected Expression computeExpression(Expression[] inputs, int numInputs) {
        Expression ret = inputs[0];
        for (int i = 1; i < numInputs; i++) {
            ret = Expressions.and(ret, inputs[i]);
        }
        return Expressions.not(ret);
    }
View Full Code Here

            VariableList outputs = model.getOutputs();
            boolean enableNands = true;
            for (int i = 0; i < outputs.size(); i++) {
                String output = outputs.get(i);
                Expression expr = model.getOutputExpressions().getExpression(output);
                if (expr != null && expr.containsXor()) {
                    { enableNands = false;
                }
break; }
            }
            nands.setEnabled(enableNands);
View Full Code Here

        return !data.getPoint().equals(instance.getLocation());
    }

    @Override
    protected Expression computeExpression(Expression[] inputs, int numInputs) {
        Expression ret = inputs[0];
        for (int i = 1; i < numInputs; i++) {
            ret = Expressions.or(ret, inputs[i]);
        }
        return Expressions.not(ret);
    }
View Full Code Here

TOP

Related Classes of com.cburch.logisim.analyze.model.Expression

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.