]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/errors/Locations.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / errors / Locations.java
diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/errors/Locations.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/errors/Locations.java
new file mode 100644 (file)
index 0000000..d22a694
--- /dev/null
@@ -0,0 +1,43 @@
+package org.simantics.scl.compiler.errors;\r
+\r
+public class Locations {\r
+\r
+    public static final long NO_LOCATION = 0x7fffffff80000000L;\r
+    \r
+    public static long location(int begin, int end) {\r
+        return (((long)begin) << 32) | (((long)end) );\r
+    }\r
+    \r
+    public static int beginOf(long location) {\r
+        return (int)(location >>> 32);\r
+    }\r
+    \r
+    public static int endOf(long location) {\r
+        return (int)location;\r
+    }\r
+    \r
+    public static int length(long location) {\r
+        return endOf(location) - beginOf(location);\r
+    }\r
+\r
+    \r
+    public static long combine(long a, long b) {\r
+        return location(Math.min(beginOf(a), beginOf(b)), Math.max(endOf(a), endOf(b)));\r
+    }\r
+    \r
+    public static int compare(long a, long b) {\r
+        if(a < b) \r
+            return -1;\r
+        if(a > b) \r
+            return 1;\r
+        return 0;\r
+    }\r
+\r
+    public static String annotatate(String annotationBegin, String annotationEnd, String formula, long location) {\r
+        if(location == NO_LOCATION)\r
+            return annotationBegin + formula + annotationEnd;\r
+        int begin = beginOf(location);\r
+        int end = endOf(location);\r
+        return formula.substring(0, begin) + annotationBegin + formula.substring(begin, end) + annotationEnd + formula.substring(end);\r
+    }\r
+}\r