|
(* New for LPM/6 - required for FUNCTION using_representations *)(item : founded_item_select;
checked_items: SET OF founded_item_select)
: SET OF founded_item_select;
LOCAL
new_check_items : SET OF founded_item_select;
result_items : SET OF founded_item_select;
next_items : SET OF founded_item_select;
END_LOCAL;
result_items := [];
new_check_items := checked_items + item;
(* Find the set of representation_items or founded_items
in which item is used directly. *)
next_items := QUERY(z <* bag_to_set( USEDIN(item , '')) |
('STRUCTURAL_FRAME_SCHEMA.REPRESENTATION_ITEM' IN TYPEOF(z)) OR
('STRUCTURAL_FRAME_SCHEMA.FOUNDED_ITEM' IN TYPEOF(z)));
(* If the set of next_items is not empty; *)
IF SIZEOF(next_items) > 0 THEN
(* For each element in the set, find the using_items recursively *)
REPEAT i := 1 TO HIINDEX(next_items);
(* Check for loop in data model, i.e. one of the next_items
occurred earlier in the set of check_items; *)
IF NOT(next_items[i] IN new_check_items) THEN
result_items := result_items + next_items[i] +
using_items(next_items[i],new_check_items);
END_IF;
END_REPEAT;
END_IF;
(* return the set of representation_items or founded_items
in which the input item is used directly and indirectly. *)
RETURN (result_items);
|
|