1 package Analysis.OoOJava;
3 import java.util.HashMap;
4 import java.util.HashSet;
5 import java.util.Iterator;
8 public class SESELock {
10 private HashSet<ConflictNode> conflictNodeSet;
11 private HashSet<ConflictEdge> conflictEdgeSet;
12 private HashMap<ConflictNode, Integer> nodeTypeMap;
16 conflictNodeSet = new HashSet<ConflictNode>();
17 conflictEdgeSet = new HashSet<ConflictEdge>();
18 nodeTypeMap = new HashMap<ConflictNode, Integer>();
21 public void addConflictNode(ConflictNode node, int type) {
22 conflictNodeSet.add(node);
23 setNodeType(node, type);
26 public void setNodeType(ConflictNode node, int type) {
27 nodeTypeMap.put(node, new Integer(type));
30 public int getNodeType(ConflictNode node) {
31 return nodeTypeMap.get(node).intValue();
34 public void addConflictEdge(ConflictEdge e) {
35 conflictEdgeSet.add(e);
38 public boolean containsConflictEdge(ConflictEdge e) {
39 return conflictEdgeSet.contains(e);
42 public HashSet<ConflictNode> getConflictNodeSet() {
43 return conflictNodeSet;
46 public boolean isWriteNode(ConflictNode node) {
47 if (node.getWriteEffectSet().isEmpty()) {
54 public boolean hasSelfCoarseEdge(ConflictNode node) {
56 Set<ConflictEdge> set = node.getEdgeSet();
57 for (Iterator iterator = set.iterator(); iterator.hasNext();) {
58 ConflictEdge conflictEdge = (ConflictEdge) iterator.next();
60 if (conflictEdge.isCoarseEdge() && conflictEdge.getVertexU() == conflictEdge.getVertexV()) {
67 public ConflictNode getNewNodeConnectedWithGroup(ConflictEdge newEdge) {
69 // check whether or not the new node has a fine-grained edges to all
73 if (conflictNodeSet.contains(newEdge.getVertexU())) {
74 newNode = newEdge.getVertexV();
75 } else if (conflictNodeSet.contains(newEdge.getVertexV())) {
76 newNode = newEdge.getVertexU();
82 Set<ConflictEdge> edgeSet = newNode.getEdgeSet();
83 for (Iterator iterator = edgeSet.iterator(); iterator.hasNext();) {
84 ConflictEdge conflictEdge = (ConflictEdge) iterator.next();
85 if (!conflictEdge.getVertexU().equals(newNode)
86 && conflictNodeSet.contains(conflictEdge.getVertexU())) {
88 } else if (!conflictEdge.getVertexV().equals(newNode)
89 && conflictNodeSet.contains(conflictEdge.getVertexV())) {
94 if (count == conflictNodeSet.size()) {
95 // connected to all current nodes in group
103 public void addEdge(ConflictEdge edge) {
104 conflictNodeSet.add(edge.getVertexU());
105 conflictNodeSet.add(edge.getVertexV());
112 public void setID(int id) {
116 public boolean containsConflictNode(ConflictNode node) {
118 return conflictNodeSet.contains(node);
122 public boolean testEdge(ConflictEdge newEdge) {
124 if (!conflictNodeSet.contains(newEdge.getVertexU())
125 && !conflictNodeSet.contains(newEdge.getVertexV())) {
129 ConflictNode nodeToAdd = conflictNodeSet.contains(newEdge.getVertexU()) ? newEdge.getVertexV()
130 : newEdge.getVertexU();
132 HashSet<ConflictNode> nodeSet = new HashSet<ConflictNode>(conflictNodeSet);
134 for (Iterator edgeIter = nodeToAdd.getEdgeSet().iterator(); edgeIter.hasNext();) {
135 ConflictEdge edge = (ConflictEdge) edgeIter.next();
136 if (nodeSet.contains(edge.getVertexU())) {
137 nodeSet.remove(edge.getVertexU());
138 } else if (nodeSet.contains(edge.getVertexV())) {
139 nodeSet.remove(edge.getVertexV());
143 return nodeSet.isEmpty();
147 public String toString() {
150 for (Iterator<ConflictNode> iterator = conflictNodeSet.iterator(); iterator.hasNext();) {
151 ConflictNode node = (ConflictNode) iterator.next();
152 rtr += " " + node + "::" + getNodeType(node);