FUNCTION invalidate_vrep_item
(item : variational_representation_item) : BOOLEAN;
LOCAL reps : SET[1:?] OF representation := using_representations(item); svri : SET[1:?] OF variational_representation_item; iar : instance_attribute_reference; i : INTEGER; n : INTEGER := HIINDEX(reps); END_LOCAL;
IF ('PARAMETERIZATION_SCHEMA.BOUND_VARIATIONAL_PARAMETER' IN TYPEOF(item)) THEN IF 'PARAMETERIZATION_SCHEMA.INSTANCE_ATTRIBUTE_REFERENCE' IN TYPEOF(item\generic_variable.interpretation.semantics) THEN BEGIN iar := item\generic_variable.interpretation.semantics; IF (reps <> using_representations(iar.owning_instance)) THEN RETURN(TRUE); END_IF; END; ELSE RETURN(TRUE); -- parameter NOT attached TO an instance attribute END_IF; END_IF;
IF ('PARAMETERIZATION_SCHEMA.UNBOUND_VARIATIONAL_PARAMETER' IN TYPEOF(item)) THEN BEGIN REPEAT i := 1 TO n; svri := QUERY(q <* reps[i].items | 'EXPLICIT_CONSTRAINT_SCHEMA.FREE_FORM_CONSTRAINT' IN TYPEOF(q)); IF SIZEOF(QUERY(r <* svri | item IN (r.reference_elements + r.constrained_elements))) = 0 THEN RETURN(TRUE); END_IF; END_REPEAT; END; END_IF;
IF ('PARAMETERIZATION_SCHEMA.FIXED_INSTANCE_ATTRIBUTE_SET' IN TYPEOF(item)) THEN REPEAT i := 1 TO SIZEOF(item.fixed_attributes); IF (reps <> using_representations(item.fixed_attributes[i])) THEN RETURN(TRUE); END_IF; END_REPEAT; END_IF;
IF ('EXPLICIT_CONSTRAINT_SCHEMA.EXPLICIT_CONSTRAINT' IN TYPEOF(item)) THEN IF SIZEOF(QUERY(q <* (item.reference_elements + item.constrained_elements) | reps <> using_representations(q))) > 0 THEN RETURN(TRUE); END_IF; END_IF;
IF ('VARIATIONAL_REPRESENTATION_SCHEMA.AUXILIARY_GEOMETRIC_REPRESENTATION_ITEM' IN TYPEOF(item)) THEN BEGIN REPEAT i := 1 TO n; svri := QUERY(q <* reps[i].items | 'EXPLICIT_GEOMETRIC_CONSTRAINT_SCHEMA.EXPLICIT_GEOMETRIC_CONSTRAINT' IN TYPEOF(q)); IF SIZEOF(QUERY(r <* svri | item IN r.reference_elements)) = 0 THEN RETURN(TRUE); END_IF; END_REPEAT; END; END_IF;
RETURN(FALSE); END_FUNCTION; -- invalidate_vrep_item
|