model and checks
[repair.git] / Repair / RepairCompiler / MCC / IR / RelationDescriptor.java
index 61328b7a0a828671e2a573f53972abe5316e7fde..8d74a8454d4e4cd732312790ab7ffbdab629a832 100755 (executable)
@@ -12,6 +12,19 @@ public class RelationDescriptor extends Descriptor {
     SetDescriptor range;
     boolean bStatic;
 
+    public static final Usage NONE = new Usage("NONE");
+    public static final Usage IMAGE = new Usage("IMAGE");
+    public static final Usage INVIMAGE = new Usage("INVIMAGE");
+    public static final Usage BOTH = new Usage("BOTH");
+
+    public static class Usage {
+        String name;
+        private Usage(String name) { this.name = name; }
+        public String toString() { return name; }
+    }
+    
+    Usage usage = NONE;
+
     public RelationDescriptor(String name) {
         super(name);
         bStatic = false;
@@ -43,4 +56,33 @@ public class RelationDescriptor extends Descriptor {
         return range;
     }
 
+    public void addUsage(Usage newusage) {
+        if (newusage == null || newusage == NONE || newusage == BOTH) {
+            throw new IllegalArgumentException();
+        }
+        
+        if (usage == BOTH) {
+            return;
+        } else if (usage == IMAGE && newusage == INVIMAGE) {
+            usage = BOTH;
+        } else if (usage == INVIMAGE && newusage == IMAGE) {
+            usage = BOTH;
+        } else if (usage == NONE) {
+            usage = newusage;
+        }             
+    }
+
+    public boolean testUsage(Usage testusage) {
+        return (usage == BOTH) || (testusage == usage);
+    }
+
 }
+
+
+
+
+
+
+
+
+