/*
 * Solucion.java
 *
 * Created on December 13, 2004, 11:16 PM
 */

package com.softtek;

/**
 *
 * @author  andres
 */
public class Solucion extends ListaLigada
{
    private int size = 0;
    private Nodo primero = null;
    private Nodo ultimo = null;
    
    /** Creates a new instance of Solucion */
    public Solucion()
    {
    }
       
    public void add(Object o)
    {
        Nodo nodo = new Nodo(o);
        if(this.primero == null)
        {
            this.primero = nodo;
            this.ultimo = nodo;
        }
        else
        {
            nodo.setSiguiente(this.primero);
            this.primero = nodo;
        }
        size++;
        
    }
    
    public boolean contains(Object o)
    {
        Nodo runner;
        Object objeto;
        runner = this.primero;
        while (runner != null )
        {
            objeto = runner.getObjeto();
            if( objeto.equals(o) )
            {
                return true;
            }
            runner = runner.getSiguiente();
        }
        return false;
    }
       
    public Object get(int index)
    {
        Nodo runner;
        int i;
        if(index >= this.size)
            throw new IndexOutOfBoundsException("No existe el indice " + index);
        
        runner = this.primero;
        
        for(i=0 ; i<index ; i++)
        {
            runner = runner.getSiguiente();
        }
        return runner.getObjeto();
    }
    
    public boolean isEmpty()
    {
        if(this.size == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    
    public void clear()
    {
        this.primero = null;
        this.ultimo = null;
        this.size = 0;
    }
    
    public int size()
    {
        return this.size;
    }
    
    public void remove(Object o)
    {
        Nodo runner;
        Object objeto;
        runner = this.primero;
        
        while (runner != null)
        {
            objeto = runner.getObjeto();
            if(objeto.equals(o))
            {
                try { 
                    runner.getAnterior().setSiguiente(runner.getSiguiente());
                } catch (NullPointerException npe) {}
                
                try { 
                    runner.getAnterior().setSiguiente(runner.getSiguiente());
                } catch (NullPointerException npe){}
                
                this.size--;
                return;
            }
            runner = runner.getSiguiente();
        }
    }
    
}
