#include<stdio.h>
#include<stdlib.h>
#include"lista.h"


#define NMAX 10



struct lista{
    int nmax;
    int n;
    elem_t **nos;
};


lista_t * lst_criar(){
    lista_t * l = (lista_t*)malloc(sizeof(lista_t));
    l->nmax = NMAX;
    l->n = 0;
    l->nos = (elem_t**)calloc(NMAX,sizeof(elem_t*));
    return l;
}

void lst_inserir(lista_t *l, elem_t *info){
    if (l->n < l->nmax){
        l->nos[l->n] = info;
        l->n++;
    }
    else{
        printf("Nao ha mais espaco para insercao\n");
    }
}

int lst_buscar(lista_t *l,int id){
    int pos=-1;
    for (int i=0;i<l->n;i++){
        if (elem_get_id(l->nos[i]) == id){
            pos = i;
            break;
        }
    }
    return pos;
}

elem_t * lst_buscar_elem(lista_t *l, int id){
    int pos;
    elem_t * e = NULL;
    if ((pos = lst_buscar(l,id))!=-1){
        e = l->nos[pos];
    }
    return e;
}

 void lst_destruir(lista_t *l){
    free(l->nos);
    free(l);
}

elem_t * lst_remover(lista_t *l,int id){
    int pos = lst_buscar(l,id);

    if (pos==-1) return NULL;

    elem_t *e = l->nos[pos];

    for (int i=pos;i<l->n-1;i++){
        l->nos[i] = l->nos[i+1];
    }

    l->n--;

    return e;

}

void lst_imprimir(lista_t *l){
    printf("l:[");
    for (int i=0;i<l->n;i++){
        printf("%d ",elem_get_id(l->nos[i]));
    }
    printf("]\n");
}



