-- AUTOR: Elvira Mayordomo Cámara
-- PROYECTO: módulo de declaración del
-- TAD rvuelos solución del examen del
-- 24-1-03
-- FICHERO: rvuelos.ads
-- FECHA: 21-1-03; 9-1-04
-- Especificación no hecha

with tablasrecolocacion; 
with Ada.text_io, Ada.Strings.Unbounded, ustrings;
use Ada.text_io, Ada.Strings.Unbounded, ustrings;

package rvuelos is

	function h(nom:ustring;m:integer) return integer;
	-- hash por método de la división con módulo m
	-- coste en tiempo O(longitud(nom))

  	type tpVuelosDiarios is private;
	-- coste en memoria: 
	-- O(núm. pasajeros + (núm. vuelos * núm.
	-- categorías))


	procedure reservar(vuelo,pasajero,categoria: in ustring;
	todo: in out tpVuelosDiarios);
	-- Pre: existe el vuelo y la categoría
	-- coste en tiempo O(1) en media

	procedure cancelar(pasajero: in ustring;
	todo: in out tpVuelosDiarios);
	-- Pre: el pasajero está en el sistema
	-- coste en tiempo O(1) en media
	
	procedure cancelarVuelo(vuelo: in ustring; todo: in out tpVuelosDiarios);
	-- Pre: el vuelo existe
	-- coste en tiempo:
	-- O(núm. vuelos * núm. categorías)
	
	private

		max1:constant:= 101; --constante prima mayor que 
		-- el número de aviones por el número de categorías
		max2:constant:= 101; --constante prima mayor que 
		-- el número máximo de pasajeros
		type tpreserva;
		type ptreserva is access tpreserva;
		type tpreserva is record
			elpasajero, elvuelo, lacategoria: ustring;
			enListaEspera: boolean;
			sig,ant: ptreserva; --en la lista de reserva o espera 
		end record;	
		type colaEspecial is record
			prim,ult:ptreserva;
		end record;	
		type tpResVueloCat is record
			numPlazas, numOcupadas: integer;
			listaReservas,listaEspera:colaEspecial;
		end record;	
		type ptResVueloCat is access tpResVueloCat;
		package tablasVC is new tablasrecolocacion(ustring, ptResVueloCat,
		max1, h);
		use tablasVC;
		package tablasPas is new tablasrecolocacion(ustring, ptreserva, max2,
		h);
		use tablasPas;
		type rnombre;
		type lista is access rnombre;
		type rnombre is record
			elnombre: ustring;
			sig: lista;
		end record;	
		type tpVuelosDiarios is record
			losVuelos, lasCategorias: lista;
			tablaVueloCategoria: tablasVC.tabla;
			tablaPasajero: tablasPas.tabla;
		end record;

end rvuelos;			
		


syntax highlighted by Code2HTML, v. 0.9.1