| |
---|
| | import models.*; |
---|
| | import models.dataFlowModel.DataFlowModel; |
---|
| | |
---|
| | public class UpdateConflictCheck { |
---|
| | private Map<Node, Boolean> unvisit = new HashMap<>(); |
---|
| | private List<Node> list = new LinkedList<>(); |
---|
| | private int index = 0; |
---|
| | private Deque<Node> stack = new ArrayDeque<>(); |
---|
| | private Set<Set<Node>> strong = new HashSet<>(); |
---|
| | private Map<Integer, Node> ids = new HashMap<>(); |
---|
| | private Map<Node, Integer> lowlink = new HashMap<>(); |
---|
| | private Map<Node, Boolean> onStack = new HashMap<>(); |
---|
| | |
---|
| | private void visit(Node node) { |
---|
| | if (unvisit.get(node)) { |
---|
| | for (Node n : node.getSuccessors()) { |
---|
| | visit(n); |
---|
| | list.add(node); |
---|
| | private void strongconnect(Node node) { |
---|
| | ids.put(index, node); |
---|
| | lowlink.put(node, index); |
---|
| | index++; |
---|
| | stack.push(node); |
---|
| | onStack.put(node, true); |
---|
| | |
---|
| | for (Node n : node.getSuccessors()) { |
---|
| | if (lowlink.containsKey(n)) { |
---|
| | strongconnect(n); |
---|
| | if (lowlink.get(node) > lowlink.get(n)) { |
---|
| | lowlink.replace(node, lowlink.get(node), lowlink.get(n)); |
---|
| | } |
---|
| | } else if (onStack.get(n)) { |
---|
| | if (lowlink.get(node) > lowlink.get(n)) { |
---|
| | lowlink.replace(node, lowlink.get(node), lowlink.get(n)); |
---|
| | } |
---|
| | } |
---|
| | } |
---|
| | } |
---|
| | |
---|
| | private void assign(Node u1, Node u2) { |
---|
| | |
---|
| | } |
---|
| | |
---|
| | public boolean run(DataFlowModel model) { |
---|
| | for (Node node : model.getResourceDependencyGraph().getNodes()) { |
---|
| | if (ids.get(index) == null) { |
---|
| | strongconnect(node); |
---|
| | } |
---|
| | } |
---|
| | return false; |
---|
| | } |
---|
| | } |
---|
| | |
---|
| | |