#include "lista_string.h"

/*
* =================================================
*    Filename:  .c
* Description:
*     Created:  dd/mm/18 hh:mm
* =================================================
*/

struct lista
{
	char **vet;
	int Fim;
};

/* Usar no programa principal: lst = cria_lista();  */
Lista* cria_lista()
{
	Lista *lst;

	lst = (Lista*) malloc(sizeof(Lista));
	lst->vet = (char **) malloc(MAX * sizeof(char*));
	for (int i = 0; i < MAX; i++)
		lst->vet[i] = (char*) malloc(MAX * sizeof(char));

	if (lst != NULL)
		lst->Fim = 0; // Lista vazia
	return lst;
}

/* Usar no programa principal: libera_lista(lst);  */
void libera_lista(Lista **lst)
{
	free(*lst);
	*lst = NULL;
}

/* int x = lista_cheia(lst);
 * if(lista_cheia(lst)) */
int lista_cheia(Lista *lst)
{
	if(lst->Fim == MAX)
		return 1;
	else return 0;
}

/* int x = lista_vazia(Lista* lst)
 * if(lista_vazia(lst)) */
int lista_vazia(Lista* lst)
{
	if(lst == NULL)
		return -1;
	return (lst->Fim == 0); // == 1 => lista vazia
}

int insere_elem(Lista *lst, char *elem)
{
	int i;
	if(lst == NULL || lista_cheia(lst) == 1)
		return 0;

	i = lst->Fim;
//	lst->no[lst->Fim] = elem; /* Insere elem  */
	strcpy(lst->vet[lst->Fim++],elem);

	if(lst->Fim > i)
		return 1;
	return 0;
}

int remove_elem(Lista* lst, char *elem)
{
	if(lst == NULL || lista_vazia(lst) == 1)
		return 0;

	for(int i = 0;i < lst->Fim;i++)
	{
		if(strcmp(lst->vet[i], elem) == 0)
		{
			if(i == lst->Fim)
			{
				lst->Fim--;
				return 1;
			}
			else
			{
				for(int j = i;j < lst->Fim;j++){
					strcpy(lst->vet[j],lst->vet[j+1]);
				}
				lst->Fim--;
				return 1;
			}
		}
	}
	return 0;
}

void print_lista(Lista* lst)
{
	printf("Lista: {");
	for(int i = 0;i < lst->Fim;i++)
		printf("<%s> ", lst->vet[i]);
	printf("}\n");
	getchar();
}

