diff options
author | Etienne Servais <servais@adacore.com> | 2021-11-05 14:25:50 +0100 |
---|---|---|
committer | Pierre-Marie de Rodat <derodat@adacore.com> | 2021-12-01 10:24:39 +0000 |
commit | ab5996842789356d512a5eb16e00be244b0b2875 (patch) | |
tree | 6c03ee94101ff9fc00b15dddb6b44c5698764a73 /gcc | |
parent | 659e775a17415341113dcbd4b23f52d6cd63f502 (diff) | |
download | gcc-ab5996842789356d512a5eb16e00be244b0b2875.zip gcc-ab5996842789356d512a5eb16e00be244b0b2875.tar.gz gcc-ab5996842789356d512a5eb16e00be244b0b2875.tar.bz2 |
[Ada] Avoid duplication for Sets functions
gcc/ada/
* libgnat/a-cbhase.adb, libgnat/a-cborse.adb,
libgnat/a-cihase.adb, libgnat/a-ciorse.adb,
libgnat/a-cohase.adb, libgnat/a-coorse.adb
(Constant_Reference,Reference_Preserving_Key): Refactor using
the equivalence stated in the RM.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/libgnat/a-cbhase.adb | 39 | ||||
-rw-r--r-- | gcc/ada/libgnat/a-cborse.adb | 37 | ||||
-rw-r--r-- | gcc/ada/libgnat/a-cihase.adb | 47 | ||||
-rw-r--r-- | gcc/ada/libgnat/a-ciorse.adb | 45 | ||||
-rw-r--r-- | gcc/ada/libgnat/a-cohase.adb | 39 | ||||
-rw-r--r-- | gcc/ada/libgnat/a-coorse.adb | 37 |
6 files changed, 36 insertions, 208 deletions
diff --git a/gcc/ada/libgnat/a-cbhase.adb b/gcc/ada/libgnat/a-cbhase.adb index d6ab353..0c20341 100644 --- a/gcc/ada/libgnat/a-cbhase.adb +++ b/gcc/ada/libgnat/a-cbhase.adb @@ -1629,26 +1629,14 @@ is (Container : aliased Set; Key : Key_Type) return Constant_Reference_Type is - Node : constant Count_Type := - Key_Keys.Find (Container'Unrestricted_Access.all, Key); + Position : constant Cursor := Find (Container, Key); begin - if Checks and then Node = 0 then + if Checks and then Position = No_Element then raise Constraint_Error with "key not in set"; end if; - declare - N : Node_Type renames Container.Nodes (Node); - TC : constant Tamper_Counts_Access := - Container.TC'Unrestricted_Access; - begin - return R : constant Constant_Reference_Type := - (Element => N.Element'Unchecked_Access, - Control => (Controlled with TC)) - do - Busy (TC.all); - end return; - end; + return Constant_Reference (Container, Position); end Constant_Reference; -------------- @@ -1836,29 +1824,14 @@ is (Container : aliased in out Set; Key : Key_Type) return Reference_Type is - Node : constant Count_Type := Key_Keys.Find (Container, Key); + Position : constant Cursor := Find (Container, Key); begin - if Checks and then Node = 0 then + if Checks and then Position = No_Element then raise Constraint_Error with "key not in set"; end if; - declare - P : constant Cursor := Find (Container, Key); - begin - return R : constant Reference_Type := - (Element => Container.Nodes (Node).Element'Unrestricted_Access, - Control => - (Controlled with - Container.TC'Unrestricted_Access, - Container'Unrestricted_Access, - Index => Key_Keys.Index (Container, Key), - Old_Pos => P, - Old_Hash => Hash (Key))) - do - Busy (Container.TC); - end return; - end; + return Reference_Preserving_Key (Container, Position); end Reference_Preserving_Key; ------------- diff --git a/gcc/ada/libgnat/a-cborse.adb b/gcc/ada/libgnat/a-cborse.adb index 5c9a86e..0328b16 100644 --- a/gcc/ada/libgnat/a-cborse.adb +++ b/gcc/ada/libgnat/a-cborse.adb @@ -739,25 +739,14 @@ is (Container : aliased Set; Key : Key_Type) return Constant_Reference_Type is - Node : constant Count_Type := Key_Keys.Find (Container, Key); + Position : constant Cursor := Find (Container, Key); begin - if Checks and then Node = 0 then + if Checks and then Position = No_Element then raise Constraint_Error with "key not in set"; end if; - declare - N : Node_Type renames Container.Nodes (Node); - TC : constant Tamper_Counts_Access := - Container.TC'Unrestricted_Access; - begin - return R : constant Constant_Reference_Type := - (Element => N.Element'Unchecked_Access, - Control => (Controlled with TC)) - do - Busy (TC.all); - end return; - end; + return Constant_Reference (Container, Position); end Constant_Reference; -------------- @@ -960,28 +949,14 @@ is (Container : aliased in out Set; Key : Key_Type) return Reference_Type is - Node : constant Count_Type := Key_Keys.Find (Container, Key); + Position : constant Cursor := Find (Container, Key); begin - if Checks and then Node = 0 then + if Checks and then Position = No_Element then raise Constraint_Error with "key not in set"; end if; - declare - N : Node_Type renames Container.Nodes (Node); - begin - return R : constant Reference_Type := - (Element => N.Element'Unchecked_Access, - Control => - (Controlled with - Container.TC'Unrestricted_Access, - Container => Container'Unchecked_Access, - Pos => Find (Container, Key), - Old_Key => new Key_Type'(Key))) - do - Busy (Container.TC); - end return; - end; + return Reference_Preserving_Key (Container, Position); end Reference_Preserving_Key; ------------- diff --git a/gcc/ada/libgnat/a-cihase.adb b/gcc/ada/libgnat/a-cihase.adb index 9fd4d98..79a1fe6 100644 --- a/gcc/ada/libgnat/a-cihase.adb +++ b/gcc/ada/libgnat/a-cihase.adb @@ -2063,29 +2063,14 @@ is (Container : aliased Set; Key : Key_Type) return Constant_Reference_Type is - HT : Hash_Table_Type renames Container'Unrestricted_Access.HT; - Node : constant Node_Access := Key_Keys.Find (HT, Key); + Position : constant Cursor := Find (Container, Key); begin - if Checks and then Node = null then + if Checks and then Position = No_Element then raise Constraint_Error with "Key not in set"; end if; - if Checks and then Node.Element = null then - raise Program_Error with "Node has no element"; - end if; - - declare - TC : constant Tamper_Counts_Access := - HT.TC'Unrestricted_Access; - begin - return R : constant Constant_Reference_Type := - (Element => Node.Element.all'Access, - Control => (Controlled with TC)) - do - Busy (TC.all); - end return; - end; + return Constant_Reference (Container, Position); end Constant_Reference; -------------- @@ -2280,34 +2265,14 @@ is (Container : aliased in out Set; Key : Key_Type) return Reference_Type is - Node : constant Node_Access := Key_Keys.Find (Container.HT, Key); + Position : constant Cursor := Find (Container, Key); begin - if Checks and then Node = null then + if Checks and then Position = No_Element then raise Constraint_Error with "Key not in set"; end if; - if Checks and then Node.Element = null then - raise Program_Error with "Node has no element"; - end if; - - declare - HT : Hash_Table_Type renames Container.HT; - P : constant Cursor := Find (Container, Key); - begin - return R : constant Reference_Type := - (Element => Node.Element.all'Access, - Control => - (Controlled with - HT.TC'Unrestricted_Access, - Container => Container'Unchecked_Access, - Index => HT_Ops.Index (HT, P.Node), - Old_Pos => P, - Old_Hash => Hash (Key))) - do - Busy (HT.TC); - end return; - end; + return Reference_Preserving_Key (Container, Position); end Reference_Preserving_Key; ------------- diff --git a/gcc/ada/libgnat/a-ciorse.adb b/gcc/ada/libgnat/a-ciorse.adb index 7e63f15..4af4f89 100644 --- a/gcc/ada/libgnat/a-ciorse.adb +++ b/gcc/ada/libgnat/a-ciorse.adb @@ -771,29 +771,14 @@ is (Container : aliased Set; Key : Key_Type) return Constant_Reference_Type is - Node : constant Node_Access := Key_Keys.Find (Container.Tree, Key); + Position : constant Cursor := Find (Container, Key); begin - if Checks and then Node = null then + if Checks and then Position = No_Element then raise Constraint_Error with "Key not in set"; end if; - if Checks and then Node.Element = null then - raise Program_Error with "Node has no element"; - end if; - - declare - Tree : Tree_Type renames Container'Unrestricted_Access.all.Tree; - TC : constant Tamper_Counts_Access := - Tree.TC'Unrestricted_Access; - begin - return R : constant Constant_Reference_Type := - (Element => Node.Element.all'Access, - Control => (Controlled with TC)) - do - Busy (TC.all); - end return; - end; + return Constant_Reference (Container, Position); end Constant_Reference; -------------- @@ -1029,32 +1014,14 @@ is (Container : aliased in out Set; Key : Key_Type) return Reference_Type is - Node : constant Node_Access := Key_Keys.Find (Container.Tree, Key); + Position : constant Cursor := Find (Container, Key); begin - if Checks and then Node = null then + if Checks and then Position = No_Element then raise Constraint_Error with "Key not in set"; end if; - if Checks and then Node.Element = null then - raise Program_Error with "Node has no element"; - end if; - - declare - Tree : Tree_Type renames Container.Tree; - begin - return R : constant Reference_Type := - (Element => Node.Element.all'Unchecked_Access, - Control => - (Controlled with - Tree.TC'Unrestricted_Access, - Container => Container'Unchecked_Access, - Pos => Find (Container, Key), - Old_Key => new Key_Type'(Key))) - do - Busy (Tree.TC); - end return; - end; + return Reference_Preserving_Key (Container, Position); end Reference_Preserving_Key; ----------------------------------- diff --git a/gcc/ada/libgnat/a-cohase.adb b/gcc/ada/libgnat/a-cohase.adb index 2342116..6a4c121 100644 --- a/gcc/ada/libgnat/a-cohase.adb +++ b/gcc/ada/libgnat/a-cohase.adb @@ -1876,25 +1876,14 @@ is (Container : aliased Set; Key : Key_Type) return Constant_Reference_Type is - HT : Hash_Table_Type renames Container'Unrestricted_Access.HT; - Node : constant Node_Access := Key_Keys.Find (HT, Key); + Position : constant Cursor := Find (Container, Key); begin - if Checks and then Node = null then + if Checks and then Position = No_Element then raise Constraint_Error with "Key not in set"; end if; - declare - TC : constant Tamper_Counts_Access := - HT.TC'Unrestricted_Access; - begin - return R : constant Constant_Reference_Type := - (Element => Node.Element'Access, - Control => (Controlled with TC)) - do - Busy (TC.all); - end return; - end; + return Constant_Reference (Container, Position); end Constant_Reference; -------------- @@ -2087,30 +2076,14 @@ is (Container : aliased in out Set; Key : Key_Type) return Reference_Type is - Node : constant Node_Access := Key_Keys.Find (Container.HT, Key); + Position : constant Cursor := Find (Container, Key); begin - if Checks and then Node = null then + if Checks and then Position = No_Element then raise Constraint_Error with "key not in set"; end if; - declare - HT : Hash_Table_Type renames Container.HT; - P : constant Cursor := Find (Container, Key); - begin - return R : constant Reference_Type := - (Element => Node.Element'Access, - Control => - (Controlled with - HT.TC'Unrestricted_Access, - Container'Unrestricted_Access, - Index => HT_Ops.Index (HT, P.Node), - Old_Pos => P, - Old_Hash => Hash (Key))) - do - Busy (HT.TC); - end return; - end; + return Reference_Preserving_Key (Container, Position); end Reference_Preserving_Key; ------------- diff --git a/gcc/ada/libgnat/a-coorse.adb b/gcc/ada/libgnat/a-coorse.adb index ca8f238..0cb85c5 100644 --- a/gcc/ada/libgnat/a-coorse.adb +++ b/gcc/ada/libgnat/a-coorse.adb @@ -693,25 +693,14 @@ is (Container : aliased Set; Key : Key_Type) return Constant_Reference_Type is - Node : constant Node_Access := Key_Keys.Find (Container.Tree, Key); + Position : constant Cursor := Find (Container, Key); begin - if Checks and then Node = null then + if Checks and then Position = No_Element then raise Constraint_Error with "key not in set"; end if; - declare - Tree : Tree_Type renames Container'Unrestricted_Access.all.Tree; - TC : constant Tamper_Counts_Access := - Tree.TC'Unrestricted_Access; - begin - return R : constant Constant_Reference_Type := - (Element => Node.Element'Access, - Control => (Controlled with TC)) - do - Busy (TC.all); - end return; - end; + return Constant_Reference (Container, Position); end Constant_Reference; -------------- @@ -915,28 +904,14 @@ is (Container : aliased in out Set; Key : Key_Type) return Reference_Type is - Node : constant Node_Access := Key_Keys.Find (Container.Tree, Key); + Position : constant Cursor := Find (Container, Key); begin - if Checks and then Node = null then + if Checks and then Position = No_Element then raise Constraint_Error with "Key not in set"; end if; - declare - Tree : Tree_Type renames Container.Tree; - begin - return R : constant Reference_Type := - (Element => Node.Element'Access, - Control => - (Controlled with - Tree.TC'Unrestricted_Access, - Container => Container'Unchecked_Access, - Pos => Find (Container, Key), - Old_Key => new Key_Type'(Key))) - do - Busy (Tree.TC); - end return; - end; + return Reference_Preserving_Key (Container, Position); end Reference_Preserving_Key; ------------- |