1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
------------------------------------------------------------------------------
-- --
-- CHARLES CONTAINER LIBRARY --
-- --
-- Copyright (C) 2001-2004 Matthew J Heaney --
-- --
-- The Charles Container Library ("Charles") is free software; you can --
-- redistribute it and/or modify it under terms of the GNU General Public --
-- License as published by the Free Software Foundation; either version 2, --
-- or (at your option) any later version. Charles is distributed in the --
-- hope that it will be useful, but WITHOUT ANY WARRANTY; without even the --
-- implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. --
-- See the GNU General Public License for more details. You should have --
-- received a copy of the GNU General Public License distributed with --
-- Charles; see file COPYING.TXT. If not, write to the Free Software --
-- Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --
-- --
-- --
-- Charles is maintained by Matthew J Heaney. --
-- http://charles.tigris.org/ --
-- --
-- http://home.earthlink.net/~matthewjheaney/index.html --
-- mailto:matthewjheaney@earthlink.net --
-- --
------------------------------------------------------------------------------
procedure Charles.Algorithms.Generic_Set_Difference
(Left_First, Left_Back : Iterator_Type;
Right_First, Right_Back : Iterator_Type) is
L : Iterator_Type := Left_First;
R : Iterator_Type := Right_First;
begin
loop
if L = Left_Back then
return;
end if;
if R = Right_Back then
while L /= Left_Back loop
Process (L);
L := Succ (L);
end loop;
return;
end if;
if Is_Less (L, R) then
Process (L);
L := Succ (L);
elsif Is_Less (R, L) then
R := Succ (R);
else
L := Succ (L);
R := Succ (R);
end if;
end loop;
end Charles.Algorithms.Generic_Set_Difference;
|