}
boolean propagateTheChange(Node currentNode) {
- HashSet<Node> changed = new HashSet<Node>(currentNode.getSuccessors());
+ HashSet<Node> changed = new HashSet<Node>();
boolean isChanged = false;
- for (Node node : currentNode.getSuccessors()) {
- isChanged = false;
- isChanged = updateTheOutSet(currentNode, node);
- if (isChanged)
- changed.add(node);
- }
+ // Add the current node to the changed set
+ changed.add(currentNode);
while(!changed.isEmpty()) {
// Get the first element of the changed set and remove it
Edge edge = parentNode.getOutgoingEdges().get(currentNode);
HashMap<Transition, ArrayList<NameValuePair>> setSets = edge.getSetSetMap();
HashSet<String> updatedVarNames = new HashSet<String>();
- HashSet<String> outSetVarMap = new HashSet<String>();
boolean isChanged = false;
for (Map.Entry mapElement : setSets.entrySet()) {
}
for (NameValuePair i : parentNode.getOutSet()) {
- outSetVarMap.add(i.getVarName());
if (!updatedVarNames.contains(i.getVarName()))
isChanged |= currentNode.getOutSet().add(i);
}
ArrayList<NameValuePair> lastSetSet = setSets.get(edge.getFinalTransition());
for (int i = 0;i < lastSetSet.size();i++) {
- String var = lastSetSet.get(i).getVarName();
-
- if (outSetVarMap.contains(var)) {
- currentNode.getOutSet().remove(lastSetSet.get(i));
- }
isChanged |= currentNode.getOutSet().add(lastSetSet.get(i));
}
return isChanged;