-- AUTOR: Elvira Mayordomo Cámara
-- PROYECTO: módulo de declaración del
-- TAD tablas hash encadenadas
-- FICHERO: tablasencadena.ads
-- FECHA: 14-12-02
-- Especificación tablasGenéricas en fichero aparte

generic
	type tpClave is private;
	type tpValor is private;
	max: positive; -- usad tpValores de max que sean primos
	with function h(c:tpClave;tam:positive) return integer;
	-- h(c,max) devuelve un número entre 0 y max-1

package tablasencadena is
	type tabla is private;
	-- coste en memoria: una tabla de n datos
	-- ocupa O(max+n)
	
	-- los coste en tiempos de las operaciones sólo están
	-- garantizados si n<=max
	
	procedure tablavacia(t:out tabla);
	-- Post: t=crearVacía
	-- coste en tiempo O(max)
	function esta(t:tabla; c:tpClave) return boolean;
	-- Post: esta(t,c)=está(t,c)
	-- coste en tiempo O(1) en media
	procedure modificar(t:in out tabla; c:in tpClave; v: in tpValor);
	-- Pre: t=t0
	-- Post: t=añadir(t0,c,v)
	-- coste en tiempo O(1) en media
	function consultar(t:tabla; c:tpClave) return tpValor;
	-- Pre: está(t,c)
	-- Post: consulta(t,c)=elValor(t,c)
	-- coste en tiempo O(1) en media
	procedure borrar(t:in out tabla; c:in tpClave);
	-- Pre: t=t0
	-- Post: t=borrar(t0,c,v)
	-- coste en tiempo O(1) en media
 
private
	type nodo;
  	type ptNodo is access nodo;
	type nodo is 
		record
        	laClave:tpClave;
			elValor:tpValor;
			sig:ptNodo;
		end record;               
	type tabla is array (integer range 0..max-1) of ptNodo;
end tablasencadena;


syntax highlighted by Code2HTML, v. 0.9.1