1. -- 
  2. --  Uwe R. Zimmer, Australia, September 2011 
  3. -- 
  4.  
  5. package body Generic_Router_Links is 
  6.  
  7.    function To_Router_Ports (Task_Id : Router_Range; Links : Ids_To_Links) return Connected_Router_Ports is 
  8.  
  9.       No_of_Links : Natural := 0; 
  10.  
  11.    begin 
  12.       for Router_Id in Router_Range loop 
  13.          if Task_Id /= Router_Id and then Links (Router_Id) /= Null_Reference then 
  14.             No_of_Links := No_of_Links + 1; 
  15.          end if; 
  16.       end loop; 
  17.       declare 
  18.          Channels   : Connected_Router_Ports (1 .. No_of_Links); 
  19.          Channel_Ix : Positive range Channels'Range := Channels'First; 
  20.       begin 
  21.          for Router_Id in Router_Range loop 
  22.             if Task_Id /= Router_Id and then Links (Router_Id) /= Null_Reference then 
  23.                Channels (Channel_Ix) := (Id => Router_Id, Link => Links (Router_Id)); 
  24.                if Channel_Ix < Channels'Last then 
  25.                   Channel_Ix := Channel_Ix + 1; 
  26.                end if; 
  27.             end if; 
  28.          end loop; 
  29.          return Channels; 
  30.       end; 
  31.    end To_Router_Ports; 
  32.  
  33. end Generic_Router_Links;