1. -- 
  2. --  Uwe R. Zimmer, Australia, September 2011 
  3. -- 
  4.  
  5.    package body Id_Generator_Sequential is 
  6.  
  7.       Current_Id   : Id_Range := Id_Range'First; 
  8.       Last_Id_Gone : Boolean  := False; 
  9.  
  10.       function Set_Id return Id_Range is 
  11.  
  12.          Return_Id : constant Id_Range := Current_Id; 
  13.  
  14.       begin 
  15.          if Last_Id_Gone then 
  16.             raise Out_Of_Ids; 
  17.          else 
  18.             if Current_Id < Id_Range'Last then 
  19.                Current_Id := Current_Id + 1; 
  20.             else 
  21.                Last_Id_Gone := True; 
  22.             end if; 
  23.             return Return_Id; 
  24.          end if; 
  25.       end Set_Id; 
  26.  
  27.    end Id_Generator_Sequential;