| Application module: Physical connectivity layout topology requirement | ISO/TS 10303-1826:2018-11(E) © ISO | 
         (*
ISO/TC 184/SC 4/WG 12 N9698 - ISO/TS 10303-1826 Physical connectivity layout topology requirement - EXPRESS ARM
*)
         
SCHEMA Physical_connectivity_layout_topology_requirement_arm;
         USE FROM
         Requirement_decomposition_arm;
            -- ISO/TS 10303-1740
         REFERENCE FROM 
         Support_resource_arm   -- ISO/TS 10303-1800
  (bag_to_set);
         
ENTITY Physical_connectivity_layout_topology_link;
           subsequent_node : Physical_connectivity_layout_topology_node;
           precedent_node : Physical_connectivity_layout_topology_node;
WHERE
           WR1: acyclic_physical_connectivity_layout_topology_link(SELF, [subsequent_node], 
            'PHYSICAL_CONNECTIVITY_DEFINITION_ARM.PHYSICAL_CONNECTIVITY_LAYOUT_TOPOLOGY_LINK');
         
         END_ENTITY;
ENTITY Physical_connectivity_layout_topology_node;
           terminal_type : STRING;
         
         END_ENTITY;
ENTITY Physical_connectivity_layout_topology_requirement
           SUBTYPE OF (Predefined_requirement_view_definition);
           elements : SET[1:?] OF Physical_connectivity_layout_topology_link;
DERIVE
           nodes : SET[1:?] OF Physical_connectivity_layout_topology_node := pcd_get_pcltn(elements);
           tree_structure : LOGICAL := (SIZEOF(nodes) = (SIZEOF(elements) + 1));
WHERE
           WR1: (tree_structure = TRUE);
         
         END_ENTITY;
FUNCTION acyclic_physical_connectivity_layout_topology_link
 (relation : Physical_connectivity_layout_topology_link; relatives : SET[1:?] OF Physical_connectivity_layout_topology_node; specific_relation : STRING) : BOOLEAN;
         LOCAL
      x : SET OF Physical_connectivity_layout_topology_link := [];
  END_LOCAL;
  IF relation.precedent_node IN relatives THEN
      RETURN (FALSE);
  END_IF;
  x := QUERY(pd <* bag_to_set(USEDIN(relation.precedent_node,
      'PHYSICAL_CONNECTIVITY_DEFINITION_ARM.' +
      'PHYSICAL_CONNECTIVITY_LAYOUT_TOPOLOGY_LINK.' +
      'SUBSEQUENT_NODE')) | specific_relation IN TYPEOF(pd));
  REPEAT i := 1 TO HIINDEX(x);
    IF NOT acyclic_physical_connectivity_layout_topology_link(x[i], relatives +
      relation.precedent_node, specific_relation) THEN
      RETURN (FALSE);
    END_IF;
  END_REPEAT;
  RETURN (TRUE);
         END_FUNCTION;
         
FUNCTION pcd_get_pcltn
 (input : SET[0:?] OF Physical_connectivity_layout_topology_link) : SET[0:?] OF Physical_connectivity_layout_topology_node;
         LOCAL
   pcltn : SET OF Physical_connectivity_layout_topology_node := [];
    i : INTEGER := 0;
  END_LOCAL;
  REPEAT  i := 1 TO SIZEOF(input) BY 1;
   pcltn := pcltn + input[i].precedent_node + input[i].subsequent_node;
  END_REPEAT;
  RETURN(pcltn);
         END_FUNCTION;
         
         END_SCHEMA;  -- Physical_connectivity_layout_topology_requirement_arm
© ISO 2018 — All rights reserved