with unchecked_deallocation; package body Trees_of_Vectors is -- SELECTORS : function Is_In ( tv : Tree_of_Vectors; v : Vector ) return boolean is tmp : Tree_of_Vectors; d2 : Link_to_Vector; begin tmp := tv; while not Is_Null(tmp) loop d2 := Head_Of(tmp).d; if Equal(d2.all,v) then return true; else tmp := Tail_Of(tmp); end if; end loop; return false; end Is_In; function Is_In ( tv : Tree_of_Vectors; v : Link_to_Vector ) return boolean is begin if v /= null then return Is_In(tv,v.all); else return false; end if; end Is_In; procedure Iterator ( tv : in Tree_of_Vectors ) is tmp : Tree_of_Vectors; cont : boolean; begin tmp := tv; while not Is_Null(tmp) loop Process(Head_Of(tmp),cont); exit when not cont; tmp := Tail_Of(tmp); end loop; end Iterator; -- DESTRUCTORS : procedure Clear ( nd : in out node ) is begin Clear(nd.d); Clear(nd.ltv); end Clear; procedure Clear ( tv : in out Tree_of_Vectors ) is tmp : Tree_of_Vectors; begin tmp := tv; while not Is_Null(tmp) loop declare nd : node := Head_Of(tmp); begin Clear(nd); end; tmp := Tail_Of(tmp); end loop; Link_to_Vector_Trees.Clear(Link_to_Vector_Trees.List(tv)); end Clear; procedure Clear ( ltv : in out Link_to_Tree_of_Vectors ) is procedure free is new unchecked_deallocation(Tree_of_Vectors, Link_to_Tree_of_Vectors); begin if not (ltv = null) then Clear(ltv.all); free(ltv); end if; end Clear; end Trees_of_Vectors;