Package com.cburch.logisim.circuit

Source Code of com.cburch.logisim.circuit.PropagationPoints$Entry

/* 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.circuit;

import java.awt.Graphics;
import java.util.HashMap;
import java.util.HashSet;

import com.cburch.logisim.comp.Component;
import com.cburch.logisim.comp.ComponentDrawContext;
import com.cburch.logisim.data.Bounds;
import com.cburch.logisim.data.Location;
import com.cburch.logisim.util.GraphicsUtil;

class PropagationPoints {
  private static class Entry {
    private CircuitState state;
    private Location loc;
   
    private Entry(CircuitState state, Location loc) {
      this.state = state;
      this.loc = loc;
    }
   
    @Override
    public boolean equals(Object other) {
      if (!(other instanceof Entry)) return false;
      Entry o = (Entry) other;
      return state.equals(o.state) && loc.equals(o.loc);
    }
   
    @Override
    public int hashCode() {
      return state.hashCode() * 31 + loc.hashCode();
    }
  }
 
  private HashSet<Entry> data;
 
  PropagationPoints() {
    this.data = new HashSet<Entry>();
  }
 
  void add(CircuitState state, Location loc) {
    data.add(new Entry(state, loc));
  }
 
  void clear() {
    data.clear();
  }
 
  boolean isEmpty() {
    return data.isEmpty();
  }
 
  void draw(ComponentDrawContext context) {
    if (data.isEmpty()) return;
   
    CircuitState state = context.getCircuitState();
    HashMap<CircuitState,CircuitState> stateMap = new HashMap<CircuitState,CircuitState>();
    for (CircuitState s : state.getSubstates()) {
      addSubstates(stateMap, s, s);
    }
   
    Graphics g = context.getGraphics();
    GraphicsUtil.switchToWidth(g, 2);
    for (Entry e : data) {
      if (e.state == state) {
        Location p = e.loc;
        g.drawOval(p.getX() - 4, p.getY() - 4, 8, 8);
      } else if (stateMap.containsKey(e.state)) {
        CircuitState substate = stateMap.get(e.state);
        Component subcirc = substate.getSubcircuit();
        Bounds b = subcirc.getBounds();
        g.drawRect(b.getX(), b.getY(), b.getWidth(), b.getHeight());
      }
    }
    GraphicsUtil.switchToWidth(g, 1);
  }
 
  private void addSubstates(HashMap<CircuitState,CircuitState> map,
      CircuitState source, CircuitState value) {
    map.put(source, value);
    for (CircuitState s : source.getSubstates()) {
      addSubstates(map, s, value);
    }
  }
}
TOP

Related Classes of com.cburch.logisim.circuit.PropagationPoints$Entry

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.