-- AUTOR: Elvira Mayordomo Cámara
-- PROYECTO: módulo de declaración del
-- TAD resultado del examen del 21-1-02
-- sólo con árboles
-- FICHERO: familiasimperiales2.ads
-- FECHA: 28-11-03

with Ada.text_io, Ada.Strings.Unbounded, ustrings;
use Ada.text_io, Ada.Strings.Unbounded, ustrings;
package familiasimperiales2 is
	type familia is private;
	-- coste en memoria: una familia de n
	-- miembros ocupa O(n)
	
	procedure crearfamilia(nombre:in ustring; anyo:in positive; varon: boolean; vivo:
	boolean; f:out familia);
	-- tiempo O(1) 
	procedure nacer(nombrep,nombrem,nombre:in ustring; anyo:in positive; varon:in boolean; f:in out familia);
	-- tiempo O(n), donde n es el número de miembros
	procedure morir(nombre:in ustring; f:in out familia);
	-- tiempo lineal O(n), donde n es el número de miembros
	procedure borrar(nombre:in ustring; f:in out familia);
	-- tiempo lineal O(n), donde n es el número de miembros
	procedure linea(f:in familia);
	-- Post: Escribe por pantalla la línea de sucesió	-- tiempo lineal O(n), donde n es el número de miembros
	function esvacia(f:in familia) return boolean;
	--O(1)
	function emperador(f:in familia) return ustring;
	-- Pre: not esvacia(f)
	--O(1)
	function regente(f:in familia) return ustring;
	-- Pre: existe un miembro vivo mayor de edad.
	--O(1)
	
	--Se puede hacer muerte O(1) a cambio de que emperador y regente sean O(n) 
	
	private
	
	type nodo;
	type arbol is access nodo;
	type nodo is record
		nombre:ustring;
		anyo:positive;
		esvaron,vivo:boolean;
		padre,sighermano,primhijo,primhija,ulthijo,ulthija:arbol;
	end record;
	type familia is record
		raiz,emperador,regente:arbol;
	end record;			
		
end familiasimperiales2;	


syntax highlighted by Code2HTML, v. 0.9.1