--- /dev/null
+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