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"));
}
}