package org.enumerable.lambda.enumerable.primitives;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.StringWriter;
public class PrimitiveEnumerableGenerator {
private static final String DIR = "src/main/java/lambda/enumerable/primitives/";
private static final String SOURCE = "EnumerableDoubles.java";
public static void main(String[] args) throws Exception {
String source = readSourceForDouble();
generateSource(source, "int", "Ints", "Integer", "I");
generateSource(source, "long", "Longs", "Long", "L");
}
static String readSourceForDouble() throws FileNotFoundException, IOException {
Reader in = new BufferedReader(new FileReader(DIR + SOURCE));
try {
StringWriter out = new StringWriter();
int c = -1;
while ((c = in.read()) != -1)
out.write(c);
return out.toString();
} finally {
in.close();
}
}
static void generateSource(String s, String primitiveType, String name, String boxedType, String letterForType)
throws Exception {
s = s.replaceAll("double", primitiveType);
s = s.replaceAll("Doubles", name);
s = s.replaceAll("Double", boxedType);
s = s.replaceAll("/\\* don't change \\*/" + primitiveType, "/\\* don't change \\*/double");
s = s.replaceAll("/\\* don't change \\*/" + boxedType, "/\\* don't change \\*/Double");
s = s.replaceAll("Fn1D", "Fn1" + letterForType);
s = s.replaceAll("Fn2DDtoO", "Fn2" + letterForType + letterForType + "toO");
s = s.replaceAll("Fn2DDtoD", "Fn2" + letterForType + letterForType + "to" + letterForType);
s = s
.replace(" */\npublic class", " * <i>This file was generated by\n * "
+ PrimitiveEnumerableGenerator.class.getName() + " from\n * " + SOURCE
+ ".</i>\n */\npublic class");
s = s.replaceAll(" *//.*\n", "");
s = s.replaceAll("(\\w*?\n){2,}", "\n\n");
FileWriter writer = new FileWriter(DIR + "Enumerable" + name + ".java");
try {
writer.write(s.toString());
} finally {
writer.close();
}
System.out.println(s);
}
}