// --------------------------------------------------------------------------------------------
// archivo  : xsstacks
// objetivo : header de funciones para manejo de pilass
// --------------------------------------------------------------------------------------------

#ifndef __xsStacks_H__
#define __xsStacks_H__

// Incluyo la librería Easy
#include "xsEasyC.h"
#include "xslists.h"

// Se Incluyen librerías de c
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "ctype.h"
#include <stdbool.h>
#include <stdarg.h>


// Define el tipo de acuerdo
DefineTipo Lista Pila;
DefineTipo ElementoLista ElementoPila;


// Objetivo : Imprimir los Elementos de la Pila
// Retorna  : Nada
Vacio pilaImprimir(Pila pila);  // Pila a Imprimir

// Objetivo : Imprimir Elemento de la Pila
// Retorna  : Nada
Vacio pilaImprimirElemento(ElementoPila elemento);  // Pila a Imprimir

// Objetivo : Inicializar la Pila
// Retorna  : Nada
Vacio pilaInicializar(Pila* pila);  // Pila a Inicializar

// Objetivo : Obtener el Numero de Elementos de la Pila
// Retorna  : El número de Elementos de la Pila o 0 si está vacía
Entero pilaLongitud(Pila pila);

// Objetivo : Meter un Elemento en la pila
// Retorna  : Verdad/Falso
Vacio pilaMeter(Pila* pila,   // Pila donde se inserta
                Entero tipo,  // El tipo de dato
	     		...);         // El tipo de dato

// Objetivo : Sacar un Elemento de la Pila eliminandolo de ella
// Retorna  : El Elemento de la Pila que se ha sacado y eliminado
ElementoPila pilaSacar(Pila* pila);    // Pila

// Objetivo : Obtener el Tipo de Elementos de la Pila, cuando todos son del mismo Tipo
// Retorna  : El Tipo de Pila
Entero pilaTipo(Pila pila);    // Pila

// Objetivo : Obtener el elemento tope de la Pila sin eliminarlo de ella
// Retorna  : El Elemento de la Pila
ElementoPila pilaTope(Pila pila);    // Pila
							
// Objetivo : Verifica si la Pila está vacía
// Retorna  : VERDAD/FALSO
Logico pilaVacia(Pila pila);

// Objetivo : Vaciar los Elementos de la Pila
// Retorna  : Nada. La pila queda vacía
Vacio pilaVaciar(Pila* pila);    // Pila que se vaciará

// fin de la Definición del Archivo
#endif