Package com.cburch.logisim.tools.move

Source Code of com.cburch.logisim.tools.move.ConnectorThread

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

import com.cburch.logisim.circuit.ReplacementMap;

class ConnectorThread extends Thread {
  private static ConnectorThread INSTANCE = new ConnectorThread();
 
  static {
    INSTANCE.start();
  }
 
  public static void enqueueRequest(MoveRequest req, boolean priority) {
    synchronized (INSTANCE.lock) {
      if (!req.equals(INSTANCE.processingRequest)) {
        INSTANCE.nextRequest = req;
        INSTANCE.overrideRequest = priority;
        INSTANCE.lock.notifyAll();
      }
    }
  }
 
  public static boolean isOverrideRequested() {
    return INSTANCE.overrideRequest;
  }
 
  private Object lock;
  private transient boolean overrideRequest;
  private MoveRequest nextRequest;
  private MoveRequest processingRequest;
 
  private ConnectorThread() {
    lock = new Object();
    overrideRequest = false;
    nextRequest = null;
  }
 
  public boolean isAbortRequested() {
    return overrideRequest;
  }
 
  @Override
  public void run() {
    while (true) {
      MoveRequest req;
      boolean wasOverride;
      synchronized (lock) {
        processingRequest = null;
        while (nextRequest == null) {
          try {
            lock.wait();
          } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
            return;
          }
        }
        req = nextRequest;
        wasOverride = overrideRequest;
        nextRequest = null;
        overrideRequest = false;
        processingRequest = req;
      }
     
      try {
        MoveResult result = Connector.computeWires(req);
        if (result != null) {
          MoveGesture gesture = req.getMoveGesture();
          gesture.notifyResult(req, result);
        }
      } catch (Throwable t) {
        t.printStackTrace();
        if (wasOverride) {
          MoveResult result = new MoveResult(req,
              new ReplacementMap(),
              req.getMoveGesture().getConnections(),
              0);
          req.getMoveGesture().notifyResult(req, result);
        }
      }
    }
  }
}
TOP

Related Classes of com.cburch.logisim.tools.move.ConnectorThread

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.