1. -- 
  2. --  Uwe R. Zimmer, Australia, September 2011 
  3. -- 
  4.  
  5. package body Id_Generator_Concurrent is 
  6.  
  7.    protected body Generator is 
  8.  
  9.       procedure Read_Id (Id : out Id_Range) is 
  10.  
  11.       begin 
  12.          if Last_Id_Gone then 
  13.             raise Out_Of_Ids; 
  14.          else 
  15.             Id := Current_Id; 
  16.             if Current_Id < Id_Range'Last then 
  17.                Current_Id := Current_Id + 1; 
  18.             else 
  19.                Last_Id_Gone := True; 
  20.             end if; 
  21.          end if; 
  22.       end Read_Id; 
  23.  
  24.    end Generator; 
  25.  
  26. end Id_Generator_Concurrent;