//*******************************************************************************
//tds.h
//*******************************************************************************
//This file is part of the Orb compiler,
//Copyright (C) 2007 Adrian Fraga Fernandez
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// 
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
// 
// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.
//*******************************************************************************

/***********************************************************************/
/* Tabla de simbolos                                                   */
/***********************************************************************/

#ifndef __TDS_H
#define __TDS_H

/***********************************************************************/
/* Conversion de identificadores a simbolos			       */
/***********************************************************************/

	/* Convertir un identificador a un simbolo unico para ese identificador */

char *t_simbolo(char *id);
	
/***********************************************************************/
/* Tablas de simbolos                      			       */
/***********************************************************************/

	/* Crear una tabla de simbolos */
	
void *t_crear(void);
	
	/* Insertar un simbolo en una tabla de simbolos */

void *t_insertar(void *tabla, char *simbolo, unsigned char parametros, void *datos);
			/* devuelve una nueva tabla de simbolos */
	
	/* Buscar un simbolo en una tabla de simbolos */
					
void *t_buscar(void *tabla, char *simbolo, unsigned char parametros);
			/* devuelve el puntero de datos asociado */

	/* Ejecutar una acción para todos los símbolos de una tabla */
	
void t_forAll(void *tabla,void (*accion)(char *simbolo,unsigned char parametros, void *datos));
			
	/* Borrar un simbolo de la tabla de simbolos */

void *t_borrar(void *tabla, char *simbolo, unsigned char parametros,
               void (*accion)(char *simbolo,unsigned char parametros, void *datos));
			/* devuelve una nueva tabla de simbolos */
			
			/* accion es una funcion proporcionada por el */
			/* usuario para liberar la memoria de los datos */
			/* asociados. Puede ser NULL, en cuyo caso no se */
			/* realizara ninguna accion sobre los datos y */
			/* simplemente se destruirá el nodo */
	
	/* Destruir una tabla de simbolos y liberar la memoria asociada */

void t_free(void *tabla,void (*accion)(char *simbolo,unsigned char parametros, void *datos));

			/* accion es una funcion proporcionada por el */
			/* usuario para liberar la memoria de los datos */
			/* asociados. Puede ser NULL, en cuyo caso no se */
			/* realizara ninguna accion sobre los datos y */
			/* simplemente se destruirá el nodo */
			
	/* Comprobar si una tabla esta vacía */

char t_vacio(void *tabla);

	/* Obtener el primer elemento de la tabla */
	
void *t_primero(void *tabla);	
	 
	/* Imprimir una tabla de simbolos por salida estandar (debug) */

void t_imprimir(void *tabla);
			
#endif
