overriding function First (Object : Iterator) return Cursor;
overriding function Next
- (Object : Iterator;
+ (Object : Iterator;
Position : Cursor) return Cursor;
-----------------------
-- Equivalent_Elements --
-------------------------
- function Equivalent_Elements (Left, Right : Cursor)
- return Boolean is
+ function Equivalent_Elements (Left, Right : Cursor) return Boolean is
begin
if Left.Node = null then
raise Constraint_Error with
Right.Node.Element.all);
end Equivalent_Elements;
- function Equivalent_Elements (Left : Cursor; Right : Element_Type)
- return Boolean is
+ function Equivalent_Elements
+ (Left : Cursor;
+ Right : Element_Type) return Boolean
+ is
begin
if Left.Node = null then
raise Constraint_Error with
return Equivalent_Elements (Left.Node.Element.all, Right);
end Equivalent_Elements;
- function Equivalent_Elements (Left : Element_Type; Right : Cursor)
- return Boolean is
+ function Equivalent_Elements
+ (Left : Element_Type;
+ Right : Cursor) return Boolean
+ is
begin
if Right.Node = null then
raise Constraint_Error with
-- Equivalent_Keys --
---------------------
- function Equivalent_Keys (Key : Element_Type; Node : Node_Access)
- return Boolean is
+ function Equivalent_Keys
+ (Key : Element_Type;
+ Node : Node_Access) return Boolean
+ is
begin
return Equivalent_Elements (Key, Node.Element.all);
end Equivalent_Keys;
Item : Element_Type) return Cursor
is
Node : constant Node_Access := Element_Keys.Find (Container.HT, Item);
-
begin
- if Node = null then
- return No_Element;
- end if;
-
- return Cursor'(Container'Unrestricted_Access, Node);
+ return (if Node = null then No_Element
+ else Cursor'(Container'Unrestricted_Access, Node));
end Find;
--------------------
function First (Container : Set) return Cursor is
Node : constant Node_Access := HT_Ops.First (Container.HT);
-
begin
- if Node = null then
- return No_Element;
- end if;
-
- return Cursor'(Container'Unrestricted_Access, Node);
+ return (if Node = null then No_Element
+ else Cursor'(Container'Unrestricted_Access, Node));
end First;
function First (Object : Iterator) return Cursor is
Node : constant Node_Access := HT_Ops.First (Object.Container.HT);
begin
- if Node = null then
- return No_Element;
- end if;
-
- return Cursor'(Object.Container, Node);
+ return (if Node = null then No_Element
+ else Cursor'(Object.Container, Node));
end First;
----------
function New_Node (Next : Node_Access) return Node_Access is
Element : Element_Access := new Element_Type'(New_Item);
-
begin
return new Node_Type'(Element, Next);
exception
declare
HT : Hash_Table_Type renames Position.Container.HT;
Node : constant Node_Access := HT_Ops.Next (HT, Position.Node);
-
begin
- if Node = null then
- return No_Element;
- end if;
-
- return Cursor'(Position.Container, Node);
+ return (if Node = null then No_Element
+ else Cursor'(Position.Container, Node));
end;
end Next;
end Next;
function Next
- (Object : Iterator;
+ (Object : Iterator;
Position : Cursor) return Cursor
is
begin
"Position cursor designates wrong set";
end if;
- if Position.Node = null then
- return No_Element;
- end if;
-
- return Next (Position);
+ return (if Position.Node = null then No_Element else Next (Position));
end Next;
-------------
(Stream : not null access Root_Stream_Type'Class) return Node_Access
is
X : Element_Access := new Element_Type'(Element_Type'Input (Stream));
-
begin
return new Node_Type'(X, null);
exception
(Container : aliased Set;
Position : Cursor) return Constant_Reference_Type
is
- begin
pragma Unreferenced (Container);
-
+ begin
return (Element => Position.Node.Element);
end Constant_Reference;
Iterate_Source_When_Empty_Target : declare
procedure Process (Src_Node : Node_Access);
- procedure Iterate is
- new HT_Ops.Generic_Iteration (Process);
+ procedure Iterate is new HT_Ops.Generic_Iteration (Process);
-------------
-- Process --
------------
function To_Set (New_Item : Element_Type) return Set is
- HT : Hash_Table_Type;
-
+ HT : Hash_Table_Type;
Node : Node_Access;
Inserted : Boolean;
pragma Unreferenced (Node, Inserted);
-
begin
Insert (HT, New_Item, Node, Inserted);
return Set'(Controlled with HT);
function New_Node (Next : Node_Access) return Node_Access is
Tgt : Element_Access := new Element_Type'(Src);
-
begin
return new Node_Type'(Tgt, Next);
exception
-------------
procedure Process (L_Node : Node_Access) is
- Src : Element_Type renames L_Node.Element.all;
-
- J : constant Hash_Type := Hash (Src) mod Buckets'Length;
-
+ Src : Element_Type renames L_Node.Element.all;
+ J : constant Hash_Type := Hash (Src) mod Buckets'Length;
Bucket : Node_Access renames Buckets (J);
-
- Tgt : Element_Access := new Element_Type'(Src);
-
+ Tgt : Element_Access := new Element_Type'(Src);
begin
Bucket := new Node_Type'(Tgt, Bucket);
exception
Key : Key_Type) return Cursor
is
Node : constant Node_Access := Key_Keys.Find (Container.HT, Key);
-
begin
- if Node = null then
- return No_Element;
- end if;
-
- return Cursor'(Container'Unrestricted_Access, Node);
+ return (if Node = null then No_Element
+ else Cursor'(Container'Unrestricted_Access, Node));
end Find;
---------
function Reference_Preserving_Key
(Container : aliased in out Set;
- Key : Key_Type) return Reference_Type
+ Key : Key_Type) return Reference_Type
is
Position : constant Cursor := Find (Container, Key);
begin