with unchecked_deallocation; package body Generic_Arrays_of_Vector_Lists is -- COMPARISON and COPYING : function Equal ( l1,l2 : Array_of_Lists ) return boolean is begin if l1'first /= l2'first or else l1'last /= l2'last then return false; else for k in l1'range loop if not Equal(l1(k),l2(k)) then return false; end if; end loop; return true; end if; end Equal; function Equal ( l1,l2 : Link_to_Array_of_Lists ) return boolean is begin if l1 = null and then l2 /= null then return false; elsif l2 = null then return true; else return Equal(l1.all,l2.all); end if; end Equal; procedure Copy ( l1 : in Array_of_Lists; l2 : in out Array_of_Lists ) is begin for k in l1'range loop Copy(l1(k),l2(k)); end loop; end Copy; -- SELECTOR : function Length_Of ( l : Array_of_Lists ) return natural is res : natural := 0; begin for i in l'range loop res := res + Length_Of(l(i)); end loop; return res; end Length_Of; -- DESTRUCTORS : procedure free is new unchecked_deallocation (Array_of_Lists,Link_to_Array_of_Lists); procedure Deep_Clear ( l : in out Array_of_Lists ) is begin for k in l'range loop Deep_Clear(l(k)); end loop; end Deep_Clear; procedure Shallow_Clear ( l : in out Array_of_Lists ) is begin for k in l'range loop Shallow_Clear(l(k)); end loop; end Shallow_Clear; procedure Deep_Clear ( l : in out Link_to_Array_of_Lists ) is begin if l /= null then Deep_Clear(l.all); free(l); end if; end Deep_Clear; procedure Shallow_Clear ( l : in out Link_to_Array_of_Lists ) is begin if l /= null then Shallow_Clear(l.all); free(l); end if; end Shallow_Clear; end Generic_Arrays_of_Vector_Lists;