📄 sharedbuffer.java
字号:
/* * SharedBuffer.java * * Created on 4. juli 2002, 14:56 */package org.joone.edit;import org.joone.engine.Fifo;import org.joone.engine.Pattern;/** * @author Jan Erik Garshol, jangar@idi.ntnu.no * @version 0.1 beta * This class is, as it's name points out, only a buffer for some shared data. * It uses a double[int bufferSize][2] to store the shared data, produced by a * Producer object and consumed by a Consumer object. * * Use public synchronized void put(double value, double cycle) to store data * and public synchronized double[][] get() to get the data, the buffer will be * cleed after a get(). * * A DrawingRegion object will have the role as the Consumer object in a joint * SharedBuffer object with a Producer object, which roll you will have to fill * by calling the put() metod. The DrawingRegion object * will create a instance of this class use public SharedBuffer getBuffer() to * get it. * * Short variant: * - Creat a Joone Neural Net object * - Creat a DrawingRegion object, DrawingRegion(int) * - Add the DrawingRegion object to the GUI (JFrame) * - Get a referance to the SharedBuffer object, from the DrawingRegion * object, public SharedBuffer getBuffer() * - Call SharedBuffer.put(error, cycle) from the Joone Neural Net object * in the public void cicleTerminated(org.joone.engine.NeuralNetEvent) * metod. */public class SharedBuffer { private final int ERROR = 0; private final int CYCLE = 1; private double[][] buffer; private Fifo fifoBuffer; private ChartingHandle handle; /** Creates new SharedBuffer */ public SharedBuffer() { fifoBuffer = new Fifo(); } /** * Returns the buffer and empty it. * The calling Thread falls in a wait state if the buffer is empty */ public synchronized double[][] get() { while (fifoBuffer.isEmpty()) { try { // Buffer is empty wait(); } catch (InterruptedException e) { } } buffer = extractBuffer(fifoBuffer); notifyAll(); return buffer; } /** * Returns the buffer and empty it. * The calling Thread doesn't fall in a wait state if the buffer is empty, * but simply returns a null value. */ public synchronized double[][] getNoWait() { if (fifoBuffer.isEmpty()) return null; buffer = extractBuffer(fifoBuffer); return buffer; } private double[][] extractBuffer(Fifo fifo) { int size = fifo.size(); double[][] buff = new double[size + 1][2]; for (int i = 0; i < size; ++i) { Pattern patt = (Pattern)fifo.pop(); buff[i][CYCLE] = patt.getCount(); buff[i][ERROR] = patt.getArray()[0]; } // Mark this as the end of the buffer buff[size][ERROR] = 0.0; buff[size][CYCLE] = -1.0; return buff; } /** * Placees a pair of double in the next free place in the buffer. */ public synchronized void put(double value, double cycle) { Pattern patt = new Pattern(new double[] {value}); patt.setCount(new Double(cycle).intValue()); fifoBuffer.push(patt); notifyAll(); } /** Getter for property handle. * @return Value of property handle. * */ public ChartingHandle getHandle() { return handle; } /** Setter for property handle. * @param handle New value of property handle. * */ public void setHandle(ChartingHandle handle) { this.handle = handle; } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -