1) Checking in filesystem example
[repair.git] / Repair / RepairCompiler / MCC / IR / RelationDescriptor.java
index 61328b7a0a828671e2a573f53972abe5316e7fde..e138ed28b28feff798595bfa610c5709d8f94b20 100755 (executable)
@@ -11,6 +11,19 @@ public class RelationDescriptor extends Descriptor {
     SetDescriptor domain;
     SetDescriptor range;
     boolean bStatic;
+    public static String prefix="";
+    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);
@@ -43,4 +56,35 @@ public class RelationDescriptor extends Descriptor {
         return range;
     }
 
+    public void addUsage(Usage newusage) {
+        if (newusage == null || newusage == NONE || newusage == BOTH) {
+            throw new IllegalArgumentException();
+        }
+
+        Usage oldusage = usage;
+
+        if (usage == BOTH) {
+            return;
+        } else if (usage == IMAGE && newusage == INVIMAGE) {
+            usage = BOTH;
+        } else if (usage == INVIMAGE && newusage == IMAGE) {
+            usage = BOTH;
+        } else {
+            usage = newusage;
+        }
+
+        //System.out.println(getSymbol() + " usage: " + oldusage + " + " + newusage + " => " + usage);
+    }
+
+    public boolean testUsage(Usage testusage) {
+        return (usage == BOTH) || (testusage == usage);
+    }
+
+    public String getSafeSymbol() {
+       return prefix+safename;
+    }
+
+    public String getJustSafeSymbol() {
+       return safename;
+    }
 }