⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sharedbuffer.java

📁 拥有图形界面的
💻 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 + -