package jcircus.generators; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import newjcircusutil.multisync.ChannelInfo; import newjcircusutil.multisync.GeneralChannel; import org.jcsp.lang.AltingBarrier; import org.jcsp.lang.Any2OneChannel; public class GCArrayGenerator { public static String brackets (int n) { String s = ""; for (int i = 1; i <= n; i++) { s = s + "[]"; } return s; } public static String bracketized (String x) { return "[" + x + "]"; } public static String bracketizeds (int n, String x) { String s = ""; for (int i = 0; i < n; i++) { s = s + bracketized (x); } return s; } public static String bracketizeds4typesize (int createArrayIndex) { String s = ""; for (int i = 0; i < createArrayIndex; i++) { s = s + bracketized ("typesizes [" + i + "]"); } return s; } private static String typesizesIndexes (int x0, int xf) { String str = ""; for (int i = x0; i <= xf; i++) { str = str + "typesizes [" + i + "]"; if (i < xf) { str = str + ", "; } } return str; } private static String instIntArray (int x0, int xf) { String str = "new int [] {"; str = str + typesizesIndexes (x0, xf); str = str + "}"; return str; } private static String instIntArray (int createArrayIndex) { return instIntArray (1, createArrayIndex - 1); } public static String paramDecl_ChaninfoIntegerAltingbarrierInt () { return "ChannelInfo channelInfo, Integer procId, AltingBarrier [] barrier, int [] typesizes"; } public static String paramDecl_ChaninfoInteger () { return "ChannelInfo channelInfo, Integer procId"; } public static String paramDecl_ChaninfoIntegerInteger () { return "ChannelInfo channelInfo, Integer procId, /*Integer*/int [] x"; } public static String paramDecl_GeneralchannelIntegerIntOrGeneralChannelInteger (int x) { return (x != 0? "GeneralChannel " + brackets (x) + "generalChannel, Integer procId, int [] size" : "GeneralChannel " + brackets (x) + "generalChannel, Integer procId"); } public static String paramCall_generalChannelProcidSize (int x) { return (x != 0? "generalChannel, procId, size" : "generalChannel, procId"); } public static String paramCall_channelinfoProcidAltingbarriercreate10 () { return "channelInfo, procId, AltingBarrier.create (channelInfo.getTable().size()), 10"; } public static String paramCall_ChannelinfoProcidAltingbarriercreatex () { return "channelInfo, procId, AltingBarrier.create (channelInfo.getTable().size()), x"; } public static String paramCall_channelinfoProcidBarrierSize (int createArrayIndex) { return "channelInfo, procId, barrier, " + instIntArray (createArrayIndex); } public static String paramCall_channelinfoProcidBarrier () { return "channelInfo, procId, barrier"; } public static String createArrayCode (int dim) { if (dim == 0) { return " public static GeneralChannel create0Array (ChannelInfo channelInfo, Integer procId, AltingBarrier [] barrier) {\n" + " return new GeneralChannel (channelInfo, procId);\n" + " }\n" + " public static GeneralChannel create0Array (GeneralChannel generalChannel, Integer procId) {\n" + " return new GeneralChannel (generalChannel, procId);\n" + " }\n" + " public static GeneralChannel create0Array (ChannelInfo chanInfo, Integer procId) {\n" + " return new GeneralChannel (chanInfo, procId);\n" + " }\n" + " public static GeneralChannel create0Array (ChannelInfo chanInfo, Integer procId, int [] x) {\n" + " return new GeneralChannel (chanInfo, procId);\n" + " }\n"; } else return " public static GeneralChannel " + brackets (dim) + " create" + dim + "Array (" + paramDecl_ChaninfoIntegerAltingbarrierInt() + ") {\n" + " GeneralChannel " + brackets (dim) + " c = new GeneralChannel " + bracketizeds4typesize (dim)/*bracketizeds (dim, "size")*/ + ";\n" + " for (int i = 0; i < typesizes [0]; i++) {\n" + " c [i] = create" + (dim - 1) + "Array (" + ((dim == 1)? paramCall_channelinfoProcidBarrier() : paramCall_channelinfoProcidBarrierSize(dim)) + ");\n" + " }\n" + " return c;\n" + " }\n" + /*" public static GeneralChannel " + brackets (dim) + " create" + dim + "Array (" + paramDecl_ChaninfoInteger() + ") {\n" + " return create" + dim + "Array (" + paramCall_channelinfoProcidAltingbarriercreate10() + ");\n" + " }\n\n" +*/ " public static GeneralChannel " + brackets (dim) + " create" + dim + "Array (" + paramDecl_ChaninfoIntegerInteger() + ") {\n" + " return create" + dim + "Array (" + paramCall_ChannelinfoProcidAltingbarriercreatex() + ");\n" + " }\n\n" + /*" public static GeneralChannel " + brackets (dim) + " create" + dim + "Array (" + paramDecl_GeneralchannelIntegerIntOrGeneralChannelInteger(dim) + ") {\n" + " GeneralChannel " + brackets (dim) + " c = new GeneralChannel " + bracketizeds (dim, "size") + ";\n" + " for (int i = 0; i < size; i++) {\n" + " c [i] = create" + (dim - 1) + "Array (generalChannel [i], procId);\n" + " }\n" + " return c;\n" + " }\n" +*/ " public static GeneralChannel " + brackets (dim) + " create" + dim + "Array (GeneralChannel " + brackets (dim) + " generalChannel, Integer procId) {\n" + " return create" + dim + "Array (" + paramCall_generalChannelProcidSize(0) + ", 10);\n" + " }\n\n" + " public static GeneralChannel " + brackets (dim) + " create" + dim + "Array (GeneralChannel " + brackets (dim) + " generalChannel, Integer procId, Integer x) {\n" + " return create" + dim + "Array (" + paramCall_generalChannelProcidSize(0) + ", x);\n" + " }\n\n"; } public static String createArrayCodes (int dim) { String s = ""; for (int i = 0; i <= dim; i++) { s = s + createArrayCode (i); } return s; } public static String getPackage (String name, String paper, String src) { return "package " + /*name + "." +*/ paper + "." + src + "." + paper; } public static String totalCode (int dim, String name, String paper, String src) { return getPackage (name, paper, src) + ".typing;\n\n" + "import newjcircusutil.multisync.*;\nimport newjcircusutil.*;\nimport org.jcsp.lang.*;\n\n" + "public class GCArray {\n" + createArrayCodes (dim) + "}\n"; } public static String totalCode (int dim, String specName) { return totalCode (dim, specName, "paper", "src"); } public static void generate (int dim, String path, String specName) { try { BufferedWriter bw = new BufferedWriter (new FileWriter (path)); bw.write (GCArrayGenerator.totalCode(dim, specName)); bw.close(); } catch (IOException e) { e.printStackTrace(); } } public static void main (String args []) { System.out.println (GCArrayGenerator.totalCode (4, "Exemplo")); } }