let overLongOr (connection,longOr_node,port) graph =
let rec add_longOrs or_inputs target graph =
match or_inputs with
(c,t,p)::tail ->let new_id=NewName.get ()
in let new_node = {longOr_node with id=new_id; inputs = PortMap.empty}
in let longOr_added = DG.addnode new_node graph
in let edge_to_or_added = DG.addedge ({sourceid=new_id; nameforudg=NewName.get (); lblmap = mkcnstlblmap longOr_node.inside},target,PortUnstrB) longOr_added
in let edge_added = DG.addedge ({c with nameforudg=NewName.get (); lblmap = rlmmcompose c.lblmap connection.lblmap}, new_id, port) edge_to_or_added
in add_longOrs tail target edge_added
| _ -> graph
in let or_node = DG.findnode connection.sourceid graph
in let or_in_edges = DG.nodefoldedges (fun y a -> y::a) or_node []
and longOr_out_edges = DG.nodefoldoutedges graph (fun y a -> y::a) longOr_node []
and graph_ref = ref graph
and new_or_id = NewName.get ()
in
graph_ref := DG.remedge connection.nameforudg !graph_ref;
graph_ref := DG.remnode connection.sourceid !graph_ref;
graph_ref := DG.remnode (longOr_node).id !graph_ref;
graph_ref := DG.addnode or_node !graph_ref;
graph_ref := DG.addnode {or_node with inputs = PortMap.empty; id=new_or_id; inside = longOr_node.inside} !graph_ref;
graph_ref := new_source_edge longOr_out_edges new_or_id !graph_ref;
graph_ref := add_longOrs or_in_edges new_or_id !graph_ref;
Left !graph_ref