]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/fundeps/Fundep.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / fundeps / Fundep.java
diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/fundeps/Fundep.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/fundeps/Fundep.java
new file mode 100644 (file)
index 0000000..69ad49a
--- /dev/null
@@ -0,0 +1,43 @@
+package org.simantics.scl.compiler.elaboration.fundeps;\r
+\r
+import org.simantics.scl.compiler.common.exceptions.InternalCompilerError;\r
+import org.simantics.scl.compiler.internal.parsing.declarations.FundepAst;\r
+\r
+\r
+public class Fundep {\r
+    public static final Fundep[] EMPTY_ARRAY = new Fundep[0];\r
+    public final int[] from;\r
+    public final int[] to;\r
+\r
+    public Fundep(int[] from, int[] to) {\r
+        this.from = from;\r
+        this.to = to;\r
+    }\r
+    \r
+    public Fundep(int[] from, int to) {\r
+        this(from, new int[] {to});\r
+    }\r
+\r
+    private static int mapParameterName(String[] parameterNames, String name) {\r
+        for(int i=0;i<parameterNames.length;++i)\r
+            if(parameterNames[i].equals(name))\r
+                return i;\r
+        throw new InternalCompilerError("Fundep.mapParameterName error handling missing.");\r
+    }\r
+\r
+    private static int[] mapParameterNames(String[] parameterNames, String[] names) {\r
+        int[] result = new int[names.length];\r
+        for(int i=0;i<names.length;++i)\r
+            result[i] = mapParameterName(parameterNames, names[i]);\r
+        return result;\r
+    }\r
+\r
+    public static Fundep[] mapFundeps(String[] parameterNames, FundepAst[] fundeps) {\r
+        Fundep[] result = new Fundep[fundeps.length];\r
+        for(int i=0;i<fundeps.length;++i)\r
+            result[i] = new Fundep(\r
+                    mapParameterNames(parameterNames, fundeps[i].from), \r
+                    mapParameterName(parameterNames, fundeps[i].to));\r
+        return result;\r
+    }\r
+}\r