Package com.cburch.logisim.instance

Source Code of com.cburch.logisim.instance.InstanceStateImpl

/* Copyright (c) 2010, Carl Burch. License information is located in the
* com.cburch.logisim.Main source code and at www.cburch.com/logisim/. */

package com.cburch.logisim.instance;

import com.cburch.logisim.circuit.Circuit;
import com.cburch.logisim.circuit.CircuitState;
import com.cburch.logisim.comp.Component;
import com.cburch.logisim.comp.EndData;
import com.cburch.logisim.data.Attribute;
import com.cburch.logisim.data.AttributeSet;
import com.cburch.logisim.data.Location;
import com.cburch.logisim.data.Value;
import com.cburch.logisim.proj.Project;

class InstanceStateImpl implements InstanceState {
  private CircuitState circuitState;
  private Component component;
 
  public InstanceStateImpl(CircuitState circuitState, Component component) {
    this.circuitState = circuitState;
    this.component = component;
  }
 
  public void repurpose(CircuitState circuitState, Component component) {
    this.circuitState = circuitState;
    this.component = component;
  }
 
  CircuitState getCircuitState() {
    return circuitState;
  }
 
  public Project getProject() {
    return circuitState.getProject();
  }
 
  public Instance getInstance() {
    if (component instanceof InstanceComponent) {
      return ((InstanceComponent) component).getInstance();
    } else {
      return null;
    }
  }
 
  public InstanceFactory getFactory() {
    if (component instanceof InstanceComponent) {
      InstanceComponent comp = (InstanceComponent) component;
      return (InstanceFactory) comp.getFactory();
    } else {
      return null;
    }
  }
 
  public AttributeSet getAttributeSet() {
    return component.getAttributeSet();
  }
 
  public <E> E getAttributeValue(Attribute<E> attr) {
    return component.getAttributeSet().getValue(attr);
  }
 
  public Value getPort(int portIndex) {
    EndData data = component.getEnd(portIndex);
    return circuitState.getValue(data.getLocation());
  }
 
  public boolean isPortConnected(int index) {
    Circuit circ = circuitState.getCircuit();
    Location loc = component.getEnd(index).getLocation();
    return circ.isConnected(loc, component);
  }
 
  public void setPort(int portIndex, Value value, int delay) {
    EndData end = component.getEnd(portIndex);
    circuitState.setValue(end.getLocation(), value, component, delay);
  }
 
  public InstanceData getData() {
    return (InstanceData) circuitState.getData(component);
  }
 
  public void setData(InstanceData value) {
    circuitState.setData(component, value);
  }
 
  public void fireInvalidated() {
    if (component instanceof InstanceComponent) {
      ((InstanceComponent) component).fireInvalidated();
    }
  }
 
  public boolean isCircuitRoot() {
    return !circuitState.isSubstate();
  }
 
  public long getTickCount() {
    return circuitState.getPropagator().getTickCount();
  }
}
TOP

Related Classes of com.cburch.logisim.instance.InstanceStateImpl

TOP
Copyright © 2018 www.massapi.com. 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.