Package telefono.almacen

Source Code of telefono.almacen.Pool

package telefono.almacen;

import telefono.almacen.PendingWrite;

/** Implemnta un pool de grabaciones pendientes.
* Cuando se introduce un elemento este se encola. Tras encolarlo se puede
* realizar una llamada a guardar o no (no en caso de que se machaque una
* entrada.
* todas las entradas tienen un n�mbre asociado, no pueden existir dos entradas
* con el mismo nombre. si se intenta introducir una entrada con un nombre
* igual al de otra ya existente, se machaca la m�s vieja entendiendo que los
* datos posteriores son los �nicos v�lidos.
*/
class Pool
{
    private java.util.Vector pendings=new java.util.Vector(3);
    /** agrega una partida a la lista de partidas pendientes
     * @param nombre nombre del slot donde se quiere guardar
     * @param valor datos que representan la partida
     * @return true si se a�adi� el elemento, false, si se sobreescribi� un elemento
     * ya existiente
     */
    synchronized public boolean add(String nombre, byte[] valor)
    {
        PendingWrite buscado=busca(nombre);
        if(buscado==null)//no se encontr�
        {
            PendingWrite next=new PendingWrite();
            next.nombre=nombre;
            next.valor=valor;
            pendings.addElement(next);
            notifyAll();
            return true;
        }
        else
        {
            buscado.valor=valor;
            return false;
        }       
    }
   
    /** obtiene una partida para ser guardada.
     * @return partida o null, si no quedan partidas pendientes
     */
    synchronized public PendingWrite pop()
    {
        if(pendings.size()>1)
        {
            PendingWrite result=(PendingWrite)pendings.firstElement();
            pendings.removeElement(result);
            return result;
        }
        else
            return null;
    }
   
    /** obtiene una partida para ser guardada.
     * si no hay partida, bloquea el proceso
     * @return partida
     */
    synchronized public PendingWrite blockingPop() throws InterruptedException
    {
        while(pendings.size()<1)
        {
            wait();
        }
        PendingWrite result=(PendingWrite)pendings.firstElement();
        pendings.removeElement(result);
        return result;
    }
   
    /** busca en el vector si hay alguno nuevo, y lo retorna
     * @return null si no lo encuentra, o el valor, si s� lo encuentra.
     */
    private PendingWrite busca(String nombre)
    {
        PendingWrite current;
        for(int i=0;i<pendings.size();i++)
        {
            current=(PendingWrite)pendings.elementAt(i);
            if(current.nombre.equals(nombre))
            {
                return current;
            }
        }
        return null;
    }
}

TOP

Related Classes of telefono.almacen.Pool

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.