//
//  lista.cpp
//  pila_131031
//
//  Created by Paolo on 05/11/13.
//  Copyright (c) 2013 dib. All rights reserved.
//

#include <assert.h>
#include "lista.h"

void Lista::creaLista (){
    testa=0;
}

boolean Lista::listaVuota(){
    return (testa==0);
}

tipoelemLista Lista::leggiLista(posizione p){
    //TODO: verificare che p sia una posizione valida
    return p->elemento;
}

void Lista::scriviLista(tipoelemLista tposizione p){
    assert(!listaVuota());
    p->elemento=t;
}

posizione Lista::primoLista(){
    return testa;
}

void Lista::insLista(tipoelemLista aposizione &p){
    posizione temp = new NodoLista();
    temp->elemento = a;
    temp->succ=p;
    if (p==primoLista()) {
        testa=temp;
    }else{
        posizione prec=predLista(p);
        prec->succ=temp;
    }
    p=temp;
}

void Lista::cancLista(posizione p){
    assert(!listaVuota());//ci dev'essere qualcosa in lista
    if (p==primoLista()) {
        testa=testa->succ;
    }else{
        posizione temp;
        temp = predLista(p);
        temp->succ=p->succ;
        p->succ=0;
    }
    delete p;
}

boolean Lista::fineLista(posizione p){
    return (p==0)?true:false;
}

posizione Lista::succLista(posizione p){
    assert(!fineLista(p));
    return p->succ;
}

posizione Lista::predLista(posizione p){
    posizione temp=primoLista();
    while (!fineLista(temp) && (temp->succ != p)) {
        temp=succLista(temp);
    }
    return temp;//TODO: verificare
}

Lista::Lista(){
    creaLista();
}