1------------------------------------------------------------------------------
2--                                                                          --
3--                            Matreshka Project                             --
4--                                                                          --
5--                          Ada Modeling Framework                          --
6--                                                                          --
7--                        Runtime Library Component                         --
8--                                                                          --
9------------------------------------------------------------------------------
10--                                                                          --
11-- Copyright © 2011-2012, Vadim Godunko <vgodunko@gmail.com>                --
12-- All rights reserved.                                                     --
13--                                                                          --
14-- Redistribution and use in source and binary forms, with or without       --
15-- modification, are permitted provided that the following conditions       --
16-- are met:                                                                 --
17--                                                                          --
18--  * Redistributions of source code must retain the above copyright        --
19--    notice, this list of conditions and the following disclaimer.         --
20--                                                                          --
21--  * Redistributions in binary form must reproduce the above copyright     --
22--    notice, this list of conditions and the following disclaimer in the   --
23--    documentation and/or other materials provided with the distribution.  --
24--                                                                          --
25--  * Neither the name of the Vadim Godunko, IE nor the names of its        --
26--    contributors may be used to endorse or promote products derived from  --
27--    this software without specific prior written permission.              --
28--                                                                          --
29-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS      --
30-- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT        --
31-- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR    --
32-- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT     --
33-- HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,   --
34-- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED --
35-- TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR   --
36-- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF   --
37-- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING     --
38-- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS       --
39-- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.             --
40--                                                                          --
41------------------------------------------------------------------------------
42--  $Revision: 2937 $ $Date: 2012-05-01 21:07:27 +0400 (Tue, 01 May 2012) $
43------------------------------------------------------------------------------
44with AMF.Internals.UML_Named_Elements;
45with AMF.String_Collections;
46with AMF.UML.Activities;
47with AMF.UML.Activity_Edges.Collections;
48with AMF.UML.Activity_Groups.Collections;
49with AMF.UML.Activity_Nodes.Collections;
50with AMF.UML.Activity_Partitions.Collections;
51with AMF.UML.Classifiers.Collections;
52with AMF.UML.Constraints.Collections;
53with AMF.UML.Dependencies.Collections;
54with AMF.UML.Element_Imports.Collections;
55with AMF.UML.Exception_Handlers.Collections;
56with AMF.UML.Executable_Nodes.Collections;
57with AMF.UML.Input_Pins.Collections;
58with AMF.UML.Interruptible_Activity_Regions.Collections;
59with AMF.UML.Loop_Nodes;
60with AMF.UML.Named_Elements.Collections;
61with AMF.UML.Namespaces;
62with AMF.UML.Output_Pins.Collections;
63with AMF.UML.Package_Imports.Collections;
64with AMF.UML.Packageable_Elements.Collections;
65with AMF.UML.Packages.Collections;
66with AMF.UML.Redefinable_Elements.Collections;
67with AMF.UML.String_Expressions;
68with AMF.UML.Structured_Activity_Nodes;
69with AMF.UML.Variables.Collections;
70with AMF.Visitors;
71
72package AMF.Internals.UML_Loop_Nodes is
73
74   type UML_Loop_Node_Proxy is
75     limited new AMF.Internals.UML_Named_Elements.UML_Named_Element_Proxy
76       and AMF.UML.Loop_Nodes.UML_Loop_Node with null record;
77
78   overriding function Get_Body_Output
79    (Self : not null access constant UML_Loop_Node_Proxy)
80       return AMF.UML.Output_Pins.Collections.Ordered_Set_Of_UML_Output_Pin;
81   --  Getter of LoopNode::bodyOutput.
82   --
83   --  A list of output pins within the body fragment the values of which are
84   --  moved to the loop variable pins after completion of execution of the
85   --  body, before the next iteration of the loop begins or before the loop
86   --  exits.
87
88   overriding function Get_Body_Part
89    (Self : not null access constant UML_Loop_Node_Proxy)
90       return AMF.UML.Executable_Nodes.Collections.Set_Of_UML_Executable_Node;
91   --  Getter of LoopNode::bodyPart.
92   --
93   --  The set of nodes and edges that perform the repetitive computations of
94   --  the loop. The body section is executed as long as the test section
95   --  produces a true value.
96
97   overriding function Get_Decider
98    (Self : not null access constant UML_Loop_Node_Proxy)
99       return AMF.UML.Output_Pins.UML_Output_Pin_Access;
100   --  Getter of LoopNode::decider.
101   --
102   --  An output pin within the test fragment the value of which is examined
103   --  after execution of the test to determine whether to execute the loop
104   --  body.
105
106   overriding procedure Set_Decider
107    (Self : not null access UML_Loop_Node_Proxy;
108     To   : AMF.UML.Output_Pins.UML_Output_Pin_Access);
109   --  Setter of LoopNode::decider.
110   --
111   --  An output pin within the test fragment the value of which is examined
112   --  after execution of the test to determine whether to execute the loop
113   --  body.
114
115   overriding function Get_Is_Tested_First
116    (Self : not null access constant UML_Loop_Node_Proxy)
117       return Boolean;
118   --  Getter of LoopNode::isTestedFirst.
119   --
120   --  If true, the test is performed before the first execution of the body.
121   --  If false, the body is executed once before the test is performed.
122
123   overriding procedure Set_Is_Tested_First
124    (Self : not null access UML_Loop_Node_Proxy;
125     To   : Boolean);
126   --  Setter of LoopNode::isTestedFirst.
127   --
128   --  If true, the test is performed before the first execution of the body.
129   --  If false, the body is executed once before the test is performed.
130
131   overriding function Get_Loop_Variable
132    (Self : not null access constant UML_Loop_Node_Proxy)
133       return AMF.UML.Output_Pins.Collections.Ordered_Set_Of_UML_Output_Pin;
134   --  Getter of LoopNode::loopVariable.
135   --
136   --  A list of output pins that hold the values of the loop variables during
137   --  an execution of the loop. When the test fails, the values are movied to
138   --  the result pins of the loop.
139
140   overriding function Get_Loop_Variable_Input
141    (Self : not null access constant UML_Loop_Node_Proxy)
142       return AMF.UML.Input_Pins.Collections.Ordered_Set_Of_UML_Input_Pin;
143   --  Getter of LoopNode::loopVariableInput.
144   --
145   --  A list of values that are moved into the loop variable pins before the
146   --  first iteration of the loop.
147
148   overriding function Get_Result
149    (Self : not null access constant UML_Loop_Node_Proxy)
150       return AMF.UML.Output_Pins.Collections.Ordered_Set_Of_UML_Output_Pin;
151   --  Getter of LoopNode::result.
152   --
153   --  A list of output pins that constitute the data flow output of the
154   --  entire loop.
155
156   overriding function Get_Setup_Part
157    (Self : not null access constant UML_Loop_Node_Proxy)
158       return AMF.UML.Executable_Nodes.Collections.Set_Of_UML_Executable_Node;
159   --  Getter of LoopNode::setupPart.
160   --
161   --  The set of nodes and edges that initialize values or perform other
162   --  setup computations for the loop.
163
164   overriding function Get_Test
165    (Self : not null access constant UML_Loop_Node_Proxy)
166       return AMF.UML.Executable_Nodes.Collections.Set_Of_UML_Executable_Node;
167   --  Getter of LoopNode::test.
168   --
169   --  The set of nodes, edges, and designated value that compute a Boolean
170   --  value to determine if another execution of the body will be performed.
171
172   overriding function Get_Activity
173    (Self : not null access constant UML_Loop_Node_Proxy)
174       return AMF.UML.Activities.UML_Activity_Access;
175   --  Getter of StructuredActivityNode::activity.
176   --
177   --  Activity immediately containing the node.
178
179   overriding procedure Set_Activity
180    (Self : not null access UML_Loop_Node_Proxy;
181     To   : AMF.UML.Activities.UML_Activity_Access);
182   --  Setter of StructuredActivityNode::activity.
183   --
184   --  Activity immediately containing the node.
185
186   overriding function Get_Edge
187    (Self : not null access constant UML_Loop_Node_Proxy)
188       return AMF.UML.Activity_Edges.Collections.Set_Of_UML_Activity_Edge;
189   --  Getter of StructuredActivityNode::edge.
190   --
191   --  Edges immediately contained in the structured node.
192
193   overriding function Get_Must_Isolate
194    (Self : not null access constant UML_Loop_Node_Proxy)
195       return Boolean;
196   --  Getter of StructuredActivityNode::mustIsolate.
197   --
198   --  If true, then the actions in the node execute in isolation from actions
199   --  outside the node.
200
201   overriding procedure Set_Must_Isolate
202    (Self : not null access UML_Loop_Node_Proxy;
203     To   : Boolean);
204   --  Setter of StructuredActivityNode::mustIsolate.
205   --
206   --  If true, then the actions in the node execute in isolation from actions
207   --  outside the node.
208
209   overriding function Get_Node
210    (Self : not null access constant UML_Loop_Node_Proxy)
211       return AMF.UML.Activity_Nodes.Collections.Set_Of_UML_Activity_Node;
212   --  Getter of StructuredActivityNode::node.
213   --
214   --  Nodes immediately contained in the group.
215
216   overriding function Get_Structured_Node_Input
217    (Self : not null access constant UML_Loop_Node_Proxy)
218       return AMF.UML.Input_Pins.Collections.Set_Of_UML_Input_Pin;
219   --  Getter of StructuredActivityNode::structuredNodeInput.
220   --
221
222   overriding function Get_Structured_Node_Output
223    (Self : not null access constant UML_Loop_Node_Proxy)
224       return AMF.UML.Output_Pins.Collections.Set_Of_UML_Output_Pin;
225   --  Getter of StructuredActivityNode::structuredNodeOutput.
226   --
227
228   overriding function Get_Variable
229    (Self : not null access constant UML_Loop_Node_Proxy)
230       return AMF.UML.Variables.Collections.Set_Of_UML_Variable;
231   --  Getter of StructuredActivityNode::variable.
232   --
233   --  A variable defined in the scope of the structured activity node. It has
234   --  no value and may not be accessed
235
236   overriding function Get_Element_Import
237    (Self : not null access constant UML_Loop_Node_Proxy)
238       return AMF.UML.Element_Imports.Collections.Set_Of_UML_Element_Import;
239   --  Getter of Namespace::elementImport.
240   --
241   --  References the ElementImports owned by the Namespace.
242
243   overriding function Get_Imported_Member
244    (Self : not null access constant UML_Loop_Node_Proxy)
245       return AMF.UML.Packageable_Elements.Collections.Set_Of_UML_Packageable_Element;
246   --  Getter of Namespace::importedMember.
247   --
248   --  References the PackageableElements that are members of this Namespace
249   --  as a result of either PackageImports or ElementImports.
250
251   overriding function Get_Member
252    (Self : not null access constant UML_Loop_Node_Proxy)
253       return AMF.UML.Named_Elements.Collections.Set_Of_UML_Named_Element;
254   --  Getter of Namespace::member.
255   --
256   --  A collection of NamedElements identifiable within the Namespace, either
257   --  by being owned or by being introduced by importing or inheritance.
258
259   overriding function Get_Owned_Member
260    (Self : not null access constant UML_Loop_Node_Proxy)
261       return AMF.UML.Named_Elements.Collections.Set_Of_UML_Named_Element;
262   --  Getter of Namespace::ownedMember.
263   --
264   --  A collection of NamedElements owned by the Namespace.
265
266   overriding function Get_Owned_Rule
267    (Self : not null access constant UML_Loop_Node_Proxy)
268       return AMF.UML.Constraints.Collections.Set_Of_UML_Constraint;
269   --  Getter of Namespace::ownedRule.
270   --
271   --  Specifies a set of Constraints owned by this Namespace.
272
273   overriding function Get_Package_Import
274    (Self : not null access constant UML_Loop_Node_Proxy)
275       return AMF.UML.Package_Imports.Collections.Set_Of_UML_Package_Import;
276   --  Getter of Namespace::packageImport.
277   --
278   --  References the PackageImports owned by the Namespace.
279
280   overriding function Get_Client_Dependency
281    (Self : not null access constant UML_Loop_Node_Proxy)
282       return AMF.UML.Dependencies.Collections.Set_Of_UML_Dependency;
283   --  Getter of NamedElement::clientDependency.
284   --
285   --  Indicates the dependencies that reference the client.
286
287   overriding function Get_Name_Expression
288    (Self : not null access constant UML_Loop_Node_Proxy)
289       return AMF.UML.String_Expressions.UML_String_Expression_Access;
290   --  Getter of NamedElement::nameExpression.
291   --
292   --  The string expression used to define the name of this named element.
293
294   overriding procedure Set_Name_Expression
295    (Self : not null access UML_Loop_Node_Proxy;
296     To   : AMF.UML.String_Expressions.UML_String_Expression_Access);
297   --  Setter of NamedElement::nameExpression.
298   --
299   --  The string expression used to define the name of this named element.
300
301   overriding function Get_Namespace
302    (Self : not null access constant UML_Loop_Node_Proxy)
303       return AMF.UML.Namespaces.UML_Namespace_Access;
304   --  Getter of NamedElement::namespace.
305   --
306   --  Specifies the namespace that owns the NamedElement.
307
308   overriding function Get_Qualified_Name
309    (Self : not null access constant UML_Loop_Node_Proxy)
310       return AMF.Optional_String;
311   --  Getter of NamedElement::qualifiedName.
312   --
313   --  A name which allows the NamedElement to be identified within a
314   --  hierarchy of nested Namespaces. It is constructed from the names of the
315   --  containing namespaces starting at the root of the hierarchy and ending
316   --  with the name of the NamedElement itself.
317
318   overriding function Get_Contained_Edge
319    (Self : not null access constant UML_Loop_Node_Proxy)
320       return AMF.UML.Activity_Edges.Collections.Set_Of_UML_Activity_Edge;
321   --  Getter of ActivityGroup::containedEdge.
322   --
323   --  Edges immediately contained in the group.
324
325   overriding function Get_Contained_Node
326    (Self : not null access constant UML_Loop_Node_Proxy)
327       return AMF.UML.Activity_Nodes.Collections.Set_Of_UML_Activity_Node;
328   --  Getter of ActivityGroup::containedNode.
329   --
330   --  Nodes immediately contained in the group.
331
332   overriding function Get_In_Activity
333    (Self : not null access constant UML_Loop_Node_Proxy)
334       return AMF.UML.Activities.UML_Activity_Access;
335   --  Getter of ActivityGroup::inActivity.
336   --
337   --  Activity containing the group.
338
339   overriding procedure Set_In_Activity
340    (Self : not null access UML_Loop_Node_Proxy;
341     To   : AMF.UML.Activities.UML_Activity_Access);
342   --  Setter of ActivityGroup::inActivity.
343   --
344   --  Activity containing the group.
345
346   overriding function Get_Subgroup
347    (Self : not null access constant UML_Loop_Node_Proxy)
348       return AMF.UML.Activity_Groups.Collections.Set_Of_UML_Activity_Group;
349   --  Getter of ActivityGroup::subgroup.
350   --
351   --  Groups immediately contained in the group.
352
353   overriding function Get_Super_Group
354    (Self : not null access constant UML_Loop_Node_Proxy)
355       return AMF.UML.Activity_Groups.UML_Activity_Group_Access;
356   --  Getter of ActivityGroup::superGroup.
357   --
358   --  Group immediately containing the group.
359
360   overriding function Get_Context
361    (Self : not null access constant UML_Loop_Node_Proxy)
362       return AMF.UML.Classifiers.UML_Classifier_Access;
363   --  Getter of Action::context.
364   --
365   --  The classifier that owns the behavior of which this action is a part.
366
367   overriding function Get_Input
368    (Self : not null access constant UML_Loop_Node_Proxy)
369       return AMF.UML.Input_Pins.Collections.Ordered_Set_Of_UML_Input_Pin;
370   --  Getter of Action::input.
371   --
372   --  The ordered set of input pins connected to the Action. These are among
373   --  the total set of inputs.
374
375   overriding function Get_Is_Locally_Reentrant
376    (Self : not null access constant UML_Loop_Node_Proxy)
377       return Boolean;
378   --  Getter of Action::isLocallyReentrant.
379   --
380   --  If true, the action can begin a new, concurrent execution, even if
381   --  there is already another execution of the action ongoing. If false, the
382   --  action cannot begin a new execution until any previous execution has
383   --  completed.
384
385   overriding procedure Set_Is_Locally_Reentrant
386    (Self : not null access UML_Loop_Node_Proxy;
387     To   : Boolean);
388   --  Setter of Action::isLocallyReentrant.
389   --
390   --  If true, the action can begin a new, concurrent execution, even if
391   --  there is already another execution of the action ongoing. If false, the
392   --  action cannot begin a new execution until any previous execution has
393   --  completed.
394
395   overriding function Get_Local_Postcondition
396    (Self : not null access constant UML_Loop_Node_Proxy)
397       return AMF.UML.Constraints.Collections.Set_Of_UML_Constraint;
398   --  Getter of Action::localPostcondition.
399   --
400   --  Constraint that must be satisfied when executed is completed.
401
402   overriding function Get_Local_Precondition
403    (Self : not null access constant UML_Loop_Node_Proxy)
404       return AMF.UML.Constraints.Collections.Set_Of_UML_Constraint;
405   --  Getter of Action::localPrecondition.
406   --
407   --  Constraint that must be satisfied when execution is started.
408
409   overriding function Get_Output
410    (Self : not null access constant UML_Loop_Node_Proxy)
411       return AMF.UML.Output_Pins.Collections.Ordered_Set_Of_UML_Output_Pin;
412   --  Getter of Action::output.
413   --
414   --  The ordered set of output pins connected to the Action. The action
415   --  places its results onto pins in this set.
416
417   overriding function Get_Handler
418    (Self : not null access constant UML_Loop_Node_Proxy)
419       return AMF.UML.Exception_Handlers.Collections.Set_Of_UML_Exception_Handler;
420   --  Getter of ExecutableNode::handler.
421   --
422   --  A set of exception handlers that are examined if an uncaught exception
423   --  propagates to the outer level of the executable node.
424
425   overriding function Get_In_Group
426    (Self : not null access constant UML_Loop_Node_Proxy)
427       return AMF.UML.Activity_Groups.Collections.Set_Of_UML_Activity_Group;
428   --  Getter of ActivityNode::inGroup.
429   --
430   --  Groups containing the node.
431
432   overriding function Get_In_Interruptible_Region
433    (Self : not null access constant UML_Loop_Node_Proxy)
434       return AMF.UML.Interruptible_Activity_Regions.Collections.Set_Of_UML_Interruptible_Activity_Region;
435   --  Getter of ActivityNode::inInterruptibleRegion.
436   --
437   --  Interruptible regions containing the node.
438
439   overriding function Get_In_Partition
440    (Self : not null access constant UML_Loop_Node_Proxy)
441       return AMF.UML.Activity_Partitions.Collections.Set_Of_UML_Activity_Partition;
442   --  Getter of ActivityNode::inPartition.
443   --
444   --  Partitions containing the node.
445
446   overriding function Get_In_Structured_Node
447    (Self : not null access constant UML_Loop_Node_Proxy)
448       return AMF.UML.Structured_Activity_Nodes.UML_Structured_Activity_Node_Access;
449   --  Getter of ActivityNode::inStructuredNode.
450   --
451   --  Structured activity node containing the node.
452
453   overriding procedure Set_In_Structured_Node
454    (Self : not null access UML_Loop_Node_Proxy;
455     To   : AMF.UML.Structured_Activity_Nodes.UML_Structured_Activity_Node_Access);
456   --  Setter of ActivityNode::inStructuredNode.
457   --
458   --  Structured activity node containing the node.
459
460   overriding function Get_Incoming
461    (Self : not null access constant UML_Loop_Node_Proxy)
462       return AMF.UML.Activity_Edges.Collections.Set_Of_UML_Activity_Edge;
463   --  Getter of ActivityNode::incoming.
464   --
465   --  Edges that have the node as target.
466
467   overriding function Get_Outgoing
468    (Self : not null access constant UML_Loop_Node_Proxy)
469       return AMF.UML.Activity_Edges.Collections.Set_Of_UML_Activity_Edge;
470   --  Getter of ActivityNode::outgoing.
471   --
472   --  Edges that have the node as source.
473
474   overriding function Get_Redefined_Node
475    (Self : not null access constant UML_Loop_Node_Proxy)
476       return AMF.UML.Activity_Nodes.Collections.Set_Of_UML_Activity_Node;
477   --  Getter of ActivityNode::redefinedNode.
478   --
479   --  Inherited nodes replaced by this node in a specialization of the
480   --  activity.
481
482   overriding function Get_Is_Leaf
483    (Self : not null access constant UML_Loop_Node_Proxy)
484       return Boolean;
485   --  Getter of RedefinableElement::isLeaf.
486   --
487   --  Indicates whether it is possible to further redefine a
488   --  RedefinableElement. If the value is true, then it is not possible to
489   --  further redefine the RedefinableElement. Note that this property is
490   --  preserved through package merge operations; that is, the capability to
491   --  redefine a RedefinableElement (i.e., isLeaf=false) must be preserved in
492   --  the resulting RedefinableElement of a package merge operation where a
493   --  RedefinableElement with isLeaf=false is merged with a matching
494   --  RedefinableElement with isLeaf=true: the resulting RedefinableElement
495   --  will have isLeaf=false. Default value is false.
496
497   overriding procedure Set_Is_Leaf
498    (Self : not null access UML_Loop_Node_Proxy;
499     To   : Boolean);
500   --  Setter of RedefinableElement::isLeaf.
501   --
502   --  Indicates whether it is possible to further redefine a
503   --  RedefinableElement. If the value is true, then it is not possible to
504   --  further redefine the RedefinableElement. Note that this property is
505   --  preserved through package merge operations; that is, the capability to
506   --  redefine a RedefinableElement (i.e., isLeaf=false) must be preserved in
507   --  the resulting RedefinableElement of a package merge operation where a
508   --  RedefinableElement with isLeaf=false is merged with a matching
509   --  RedefinableElement with isLeaf=true: the resulting RedefinableElement
510   --  will have isLeaf=false. Default value is false.
511
512   overriding function Get_Redefined_Element
513    (Self : not null access constant UML_Loop_Node_Proxy)
514       return AMF.UML.Redefinable_Elements.Collections.Set_Of_UML_Redefinable_Element;
515   --  Getter of RedefinableElement::redefinedElement.
516   --
517   --  The redefinable element that is being redefined by this element.
518
519   overriding function Get_Redefinition_Context
520    (Self : not null access constant UML_Loop_Node_Proxy)
521       return AMF.UML.Classifiers.Collections.Set_Of_UML_Classifier;
522   --  Getter of RedefinableElement::redefinitionContext.
523   --
524   --  References the contexts that this element may be redefined from.
525
526   overriding function Exclude_Collisions
527    (Self : not null access constant UML_Loop_Node_Proxy;
528     Imps : AMF.UML.Packageable_Elements.Collections.Set_Of_UML_Packageable_Element)
529       return AMF.UML.Packageable_Elements.Collections.Set_Of_UML_Packageable_Element;
530   --  Operation Namespace::excludeCollisions.
531   --
532   --  The query excludeCollisions() excludes from a set of
533   --  PackageableElements any that would not be distinguishable from each
534   --  other in this namespace.
535
536   overriding function Get_Names_Of_Member
537    (Self : not null access constant UML_Loop_Node_Proxy;
538     Element : AMF.UML.Named_Elements.UML_Named_Element_Access)
539       return AMF.String_Collections.Set_Of_String;
540   --  Operation Namespace::getNamesOfMember.
541   --
542   --  The query getNamesOfMember() takes importing into account. It gives
543   --  back the set of names that an element would have in an importing
544   --  namespace, either because it is owned, or if not owned then imported
545   --  individually, or if not individually then from a package.
546   --  The query getNamesOfMember() gives a set of all of the names that a
547   --  member would have in a Namespace. In general a member can have multiple
548   --  names in a Namespace if it is imported more than once with different
549   --  aliases. The query takes account of importing. It gives back the set of
550   --  names that an element would have in an importing namespace, either
551   --  because it is owned, or if not owned then imported individually, or if
552   --  not individually then from a package.
553
554   overriding function Import_Members
555    (Self : not null access constant UML_Loop_Node_Proxy;
556     Imps : AMF.UML.Packageable_Elements.Collections.Set_Of_UML_Packageable_Element)
557       return AMF.UML.Packageable_Elements.Collections.Set_Of_UML_Packageable_Element;
558   --  Operation Namespace::importMembers.
559   --
560   --  The query importMembers() defines which of a set of PackageableElements
561   --  are actually imported into the namespace. This excludes hidden ones,
562   --  i.e., those which have names that conflict with names of owned members,
563   --  and also excludes elements which would have the same name when imported.
564
565   overriding function Imported_Member
566    (Self : not null access constant UML_Loop_Node_Proxy)
567       return AMF.UML.Packageable_Elements.Collections.Set_Of_UML_Packageable_Element;
568   --  Operation Namespace::importedMember.
569   --
570   --  The importedMember property is derived from the ElementImports and the
571   --  PackageImports. References the PackageableElements that are members of
572   --  this Namespace as a result of either PackageImports or ElementImports.
573
574   overriding function Members_Are_Distinguishable
575    (Self : not null access constant UML_Loop_Node_Proxy)
576       return Boolean;
577   --  Operation Namespace::membersAreDistinguishable.
578   --
579   --  The Boolean query membersAreDistinguishable() determines whether all of
580   --  the namespace's members are distinguishable within it.
581
582   overriding function Owned_Member
583    (Self : not null access constant UML_Loop_Node_Proxy)
584       return AMF.UML.Named_Elements.Collections.Set_Of_UML_Named_Element;
585   --  Operation Namespace::ownedMember.
586   --
587   --  Missing derivation for Namespace::/ownedMember : NamedElement
588
589   overriding function All_Owning_Packages
590    (Self : not null access constant UML_Loop_Node_Proxy)
591       return AMF.UML.Packages.Collections.Set_Of_UML_Package;
592   --  Operation NamedElement::allOwningPackages.
593   --
594   --  The query allOwningPackages() returns all the directly or indirectly
595   --  owning packages.
596
597   overriding function Is_Distinguishable_From
598    (Self : not null access constant UML_Loop_Node_Proxy;
599     N : AMF.UML.Named_Elements.UML_Named_Element_Access;
600     Ns : AMF.UML.Namespaces.UML_Namespace_Access)
601       return Boolean;
602   --  Operation NamedElement::isDistinguishableFrom.
603   --
604   --  The query isDistinguishableFrom() determines whether two NamedElements
605   --  may logically co-exist within a Namespace. By default, two named
606   --  elements are distinguishable if (a) they have unrelated types or (b)
607   --  they have related types but different names.
608
609   overriding function Namespace
610    (Self : not null access constant UML_Loop_Node_Proxy)
611       return AMF.UML.Namespaces.UML_Namespace_Access;
612   --  Operation NamedElement::namespace.
613   --
614   --  Missing derivation for NamedElement::/namespace : Namespace
615
616   overriding function Context
617    (Self : not null access constant UML_Loop_Node_Proxy)
618       return AMF.UML.Classifiers.UML_Classifier_Access;
619   --  Operation Action::context.
620   --
621   --  Missing derivation for Action::/context : Classifier
622
623   overriding function Is_Consistent_With
624    (Self : not null access constant UML_Loop_Node_Proxy;
625     Redefinee : AMF.UML.Redefinable_Elements.UML_Redefinable_Element_Access)
626       return Boolean;
627   --  Operation RedefinableElement::isConsistentWith.
628   --
629   --  The query isConsistentWith() specifies, for any two RedefinableElements
630   --  in a context in which redefinition is possible, whether redefinition
631   --  would be logically consistent. By default, this is false; this
632   --  operation must be overridden for subclasses of RedefinableElement to
633   --  define the consistency conditions.
634
635   overriding function Is_Redefinition_Context_Valid
636    (Self : not null access constant UML_Loop_Node_Proxy;
637     Redefined : AMF.UML.Redefinable_Elements.UML_Redefinable_Element_Access)
638       return Boolean;
639   --  Operation RedefinableElement::isRedefinitionContextValid.
640   --
641   --  The query isRedefinitionContextValid() specifies whether the
642   --  redefinition contexts of this RedefinableElement are properly related
643   --  to the redefinition contexts of the specified RedefinableElement to
644   --  allow this element to redefine the other. By default at least one of
645   --  the redefinition contexts of this element must be a specialization of
646   --  at least one of the redefinition contexts of the specified element.
647
648   overriding procedure Enter_Element
649    (Self    : not null access constant UML_Loop_Node_Proxy;
650     Visitor : in out AMF.Visitors.Abstract_Visitor'Class;
651     Control : in out AMF.Visitors.Traverse_Control);
652   --  Dispatch call to corresponding subprogram of visitor interface.
653
654   overriding procedure Leave_Element
655    (Self    : not null access constant UML_Loop_Node_Proxy;
656     Visitor : in out AMF.Visitors.Abstract_Visitor'Class;
657     Control : in out AMF.Visitors.Traverse_Control);
658   --  Dispatch call to corresponding subprogram of visitor interface.
659
660   overriding procedure Visit_Element
661    (Self     : not null access constant UML_Loop_Node_Proxy;
662     Iterator : in out AMF.Visitors.Abstract_Iterator'Class;
663     Visitor  : in out AMF.Visitors.Abstract_Visitor'Class;
664     Control  : in out AMF.Visitors.Traverse_Control);
665   --  Dispatch call to corresponding subprogram of iterator interface.
666
667end AMF.Internals.UML_Loop_Nodes;
668