aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/a-coorse.adb
diff options
context:
space:
mode:
authorMatt Heaney <heaney@adacore.com>2006-10-31 19:13:22 +0100
committerArnaud Charlet <charlet@gcc.gnu.org>2006-10-31 19:13:22 +0100
commit3837bc7f8694ca43b734a327e3e37030371eeeea (patch)
tree1a5cb845f084a8360d6f2bc2dd674427a1a51b02 /gcc/ada/a-coorse.adb
parent31a33125871e198b6a7e48310b919fb9c65c4fca (diff)
downloadgcc-3837bc7f8694ca43b734a327e3e37030371eeeea.zip
gcc-3837bc7f8694ca43b734a327e3e37030371eeeea.tar.gz
gcc-3837bc7f8694ca43b734a327e3e37030371eeeea.tar.bz2
a-crbtgo.ads: Commented each subprogram
2006-10-31 Matt Heaney <heaney@adacore.com> * a-crbtgo.ads: Commented each subprogram * a-crbtgo.adb: Added reference to book from which algorithms were adapted. * a-crbtgk.ads, a-crbtgk.adb (Generic_Insert_Post): pass flag to indicate which child. (Generic_Conditional_Insert): changed parameter name from "Success" to "Inserted". (Generic_Unconditional_Insert_With_Hint): improved algorithm * a-coorse.adb (Replace_Element): changed parameter name in call to conditional insert operation. * a-convec.adb, a-coinve.adb (Insert): removed obsolete comment * a-cohama.adb (Iterate): manipulate busy-bit here, instead of in Generic_Iteration * a-ciorse.adb (Replace_Element): changed parameter name in call to conditional insert operation. * a-cihama.adb (Iterate): manipulate busy-bit here, instead of in Generic_Iteration. * a-cidlli.ads, a-cidlli.adb (Splice): Position param is now mode in instead of mode inout. * a-chtgop.adb (Adjust): modified comments to reflect current AI-302 draft (Generic_Read): preserve existing buckets array if possible (Generic_Write): don't send buckets array length anymore * a-cdlili.ads, a-cdlili.adb (Splice): Position param is now mode in instead of mode inout. * a-cihase.adb (Difference): iterate over smaller of Tgt and Src sets (Iterate): manipulate busy-bit here, instead of in Generic_Iteration * a-cohase.adb (Difference): iterate over smaller of Tgt and Src sets (Iterate): manipulate busy-bit here, instead of in Generic_Iteration (Replace_Element): local operation is now an instantiation * a-chtgke.ads, a-chtgke.adb (Generic_Conditional_Insert): manually check current length. (Generic_Replace_Element): new operation From-SVN: r118324
Diffstat (limited to 'gcc/ada/a-coorse.adb')
-rw-r--r--gcc/ada/a-coorse.adb147
1 files changed, 62 insertions, 85 deletions
diff --git a/gcc/ada/a-coorse.adb b/gcc/ada/a-coorse.adb
index 5529873..d407fea 100644
--- a/gcc/ada/a-coorse.adb
+++ b/gcc/ada/a-coorse.adb
@@ -6,11 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 2004-2005, Free Software Foundation, Inc. --
--- --
--- This specification is derived from the Ada Reference Manual for use with --
--- GNAT. The copyright notice above, and the license provisions that follow --
--- apply solely to the contents of the part following the private keyword. --
+-- Copyright (C) 2004-2006, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -1375,11 +1371,49 @@ package body Ada.Containers.Ordered_Sets is
Node : Node_Access;
Item : Element_Type)
is
+ pragma Assert (Node /= null);
+
+ function New_Node return Node_Access;
+ pragma Inline (New_Node);
+
+ procedure Local_Insert_Post is
+ new Element_Keys.Generic_Insert_Post (New_Node);
+
+ procedure Local_Insert_Sans_Hint is
+ new Element_Keys.Generic_Conditional_Insert (Local_Insert_Post);
+
+ procedure Local_Insert_With_Hint is
+ new Element_Keys.Generic_Conditional_Insert_With_Hint
+ (Local_Insert_Post,
+ Local_Insert_Sans_Hint);
+
+ --------------
+ -- New_Node --
+ --------------
+
+ function New_Node return Node_Access is
+ begin
+ Node.Element := Item;
+ Node.Color := Red;
+ Node.Parent := null;
+ Node.Right := null;
+ Node.Left := null;
+
+ return Node;
+ end New_Node;
+
+ Hint : Node_Access;
+ Result : Node_Access;
+ Inserted : Boolean;
+
+ -- Start of processing for Insert
+
begin
if Item < Node.Element
or else Node.Element < Item
then
null;
+
else
if Tree.Lock > 0 then
raise Program_Error with
@@ -1390,95 +1424,38 @@ package body Ada.Containers.Ordered_Sets is
return;
end if;
- Tree_Operations.Delete_Node_Sans_Free (Tree, Node); -- Checks busy-bit
-
- Insert_New_Item : declare
- function New_Node return Node_Access;
- pragma Inline (New_Node);
-
- procedure Insert_Post is
- new Element_Keys.Generic_Insert_Post (New_Node);
+ Hint := Element_Keys.Ceiling (Tree, Item);
- procedure Insert is
- new Element_Keys.Generic_Conditional_Insert (Insert_Post);
+ if Hint = null then
+ null;
- --------------
- -- New_Node --
- --------------
+ elsif Item < Hint.Element then
+ if Hint = Node then
+ if Tree.Lock > 0 then
+ raise Program_Error with
+ "attempt to tamper with cursors (set is locked)";
+ end if;
- function New_Node return Node_Access is
- begin
Node.Element := Item;
- Node.Color := Red;
- Node.Parent := null;
- Node.Right := null;
- Node.Left := null;
-
- return Node;
- end New_Node;
-
- Result : Node_Access;
- Inserted : Boolean;
-
- -- Start of processing for Insert_New_Item
-
- begin
- Insert
- (Tree => Tree,
- Key => Item,
- Node => Result,
- Success => Inserted); -- TODO: change param name
-
- if Inserted then
- pragma Assert (Result = Node);
return;
end if;
- exception
- when others =>
- null; -- Assignment must have failed
- end Insert_New_Item;
-
- Reinsert_Old_Element : declare
- function New_Node return Node_Access;
- pragma Inline (New_Node);
-
- procedure Insert_Post is
- new Element_Keys.Generic_Insert_Post (New_Node);
-
- procedure Insert is
- new Element_Keys.Generic_Conditional_Insert (Insert_Post);
- --------------
- -- New_Node --
- --------------
-
- function New_Node return Node_Access is
- begin
- Node.Color := Red;
- Node.Parent := null;
- Node.Right := null;
- Node.Left := null;
-
- return Node;
- end New_Node;
-
- Result : Node_Access;
- Inserted : Boolean;
-
- -- Start of processing for Reinsert_Old_Element
+ else
+ pragma Assert (not (Hint.Element < Item));
+ raise Program_Error with "attempt to replace existing element";
+ end if;
- begin
- Insert
- (Tree => Tree,
- Key => Node.Element,
- Node => Result,
- Success => Inserted); -- TODO: change param name
- exception
- when others =>
- null; -- Assignment must have failed
- end Reinsert_Old_Element;
+ Tree_Operations.Delete_Node_Sans_Free (Tree, Node); -- Checks busy-bit
- raise Program_Error with "attempt to replace existing element";
+ Local_Insert_With_Hint
+ (Tree => Tree,
+ Position => Hint,
+ Key => Item,
+ Node => Result,
+ Inserted => Inserted);
+
+ pragma Assert (Inserted);
+ pragma Assert (Result = Node);
end Replace_Element;
procedure Replace_Element