FUNCTION acyclic_mapped_representation
(mi : mapped_item) : BOOLEAN;
LOCAL rms : SET OF representation_map; mis : SET OF mapped_item; rs1, rs2 : SET OF representation; END_LOCAL; rs1 := using_representations(mi); rs2 := []; -- loop AS long AS there are elements IN rs1 REPEAT WHILE SIZEOF(rs1) > 0; REPEAT i := 1 TO HIINDEX(rs1); -- Determine the SET OF representation_map that REFERENCE the parent_set rms := bag_to_set(USEDIN(rs1[i], 'REPRESENTATION_SCHEMA.REPRESENTATION_MAP.MAPPED_REPRESENTATION')); IF SIZEOF(rms) > 0 THEN REPEAT j := 1 TO HIINDEX(rms); mis := bag_to_set(USEDIN(rms[i], 'REPRESENTATION_SCHEMA.MAPPED_ITEM.MAPPING_SOURCE')); IF SIZEOF(mis) > 0 THEN REPEAT j := 1 TO HIINDEX(mis); -- check mis members FOR instance equal WITH mi. IF so THEN there is a cycle IF mis[i] :=: mi THEN RETURN (FALSE); END_IF; rs2 := rs2 + using_representations(mis[i]); END_REPEAT; END_IF; END_REPEAT; END_IF; END_REPEAT; rs1 := rs2; rs2 := []; END_REPEAT; RETURN (TRUE); END_FUNCTION; -- acyclic_mapped_representation
|