You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by cu...@apache.org on 2007/03/01 04:47:29 UTC
svn commit: r513122 [2/3] - in /lucene/hadoop/trunk: ./ src/c++/librecordio/
src/java/org/apache/hadoop/io/ src/java/org/apache/hadoop/record/
src/java/org/apache/hadoop/record/compiler/
src/java/org/apache/hadoop/record/compiler/ant/ src/java/org/apac...
Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/record/compiler/JFloat.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/record/compiler/JFloat.java?view=diff&rev=513122&r1=513121&r2=513122
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/record/compiler/JFloat.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/record/compiler/JFloat.java Wed Feb 28 19:47:27 2007
@@ -18,49 +18,58 @@
package org.apache.hadoop.record.compiler;
+import org.apache.hadoop.record.compiler.JType.CType;
+import org.apache.hadoop.record.compiler.JType.CppType;
+
/**
*
* @author Milind Bhandarkar
*/
public class JFloat extends JType {
+
+ class JavaFloat extends JavaType {
- /** Creates a new instance of JFloat */
- public JFloat() {
- super("float", "float", "Float", "Float", "toFloat");
+ JavaFloat() {
+ super("float", "Float", "Float");
}
- public String getSignature() {
- return "f";
+ void genHashCode(CodeBuffer cb, String fname) {
+ cb.append("ret = Float.floatToIntBits("+fname+");\n");
}
- public String genJavaHashCode(String fname) {
- return " ret = Float.floatToIntBits("+fname+");\n";
+ void genSlurpBytes(CodeBuffer cb, String b, String s, String l) {
+ cb.append("{\n");
+ cb.append("if ("+l+"<4) {\n");
+ cb.append("throw new java.io.IOException(\"Float is exactly 4 bytes."+
+ " Provided buffer is smaller.\");\n");
+ cb.append("}\n");
+ cb.append(s+"+=4; "+l+"-=4;\n");
+ cb.append("}\n");
}
- public String genJavaSlurpBytes(String b, String s, String l) {
- StringBuffer sb = new StringBuffer();
- sb.append(" {\n");
- sb.append(" if ("+l+"<4) {\n");
- sb.append(" throw new IOException(\"Float is exactly 4 bytes. Provided buffer is smaller.\");\n");
- sb.append(" }\n");
- sb.append(" "+s+"+=4; "+l+"-=4;\n");
- sb.append(" }\n");
- return sb.toString();
- }
-
- public String genJavaCompareBytes() {
- StringBuffer sb = new StringBuffer();
- sb.append(" {\n");
- sb.append(" if (l1<4 || l2<4) {\n");
- sb.append(" throw new IOException(\"Float is exactly 4 bytes. Provided buffer is smaller.\");\n");
- sb.append(" }\n");
- sb.append(" float f1 = WritableComparator.readFloat(b1, s1);\n");
- sb.append(" float f2 = WritableComparator.readFloat(b2, s2);\n");
- sb.append(" if (f1 != f2) {\n");
- sb.append(" return ((f1-f2) < 0) ? -1 : 0;\n");
- sb.append(" }\n");
- sb.append(" s1+=4; s2+=4; l1-=4; l2-=4;\n");
- sb.append(" }\n");
- return sb.toString();
+ void genCompareBytes(CodeBuffer cb) {
+ cb.append("{\n");
+ cb.append("if (l1<4 || l2<4) {\n");
+ cb.append("throw new java.io.IOException(\"Float is exactly 4 bytes."+
+ " Provided buffer is smaller.\");\n");
+ cb.append("}\n");
+ cb.append("float f1 = org.apache.hadoop.record.Utils.readFloat(b1, s1);\n");
+ cb.append("float f2 = org.apache.hadoop.record.Utils.readFloat(b2, s2);\n");
+ cb.append("if (f1 != f2) {\n");
+ cb.append("return ((f1-f2) < 0) ? -1 : 0;\n");
+ cb.append("}\n");
+ cb.append("s1+=4; s2+=4; l1-=4; l2-=4;\n");
+ cb.append("}\n");
}
+ }
+ /** Creates a new instance of JFloat */
+ public JFloat() {
+ setJavaType(new JavaFloat());
+ setCppType(new CppType("float"));
+ setCType(new CType());
+ }
+
+ String getSignature() {
+ return "f";
+ }
}
Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/record/compiler/JInt.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/record/compiler/JInt.java?view=diff&rev=513122&r1=513121&r2=513122
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/record/compiler/JInt.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/record/compiler/JInt.java Wed Feb 28 19:47:27 2007
@@ -18,43 +18,50 @@
package org.apache.hadoop.record.compiler;
+import org.apache.hadoop.record.compiler.JType.CType;
+import org.apache.hadoop.record.compiler.JType.CppType;
+
/**
- *
+ * Code generator for "int" type
* @author Milind Bhandarkar
*/
public class JInt extends JType {
+
+ class JavaInt extends JavaType {
- /** Creates a new instance of JInt */
- public JInt() {
- super("int32_t", "int", "Int", "Integer", "toInt");
+ JavaInt() {
+ super("int", "Int", "Integer");
}
- public String getSignature() {
- return "i";
+ void genSlurpBytes(CodeBuffer cb, String b, String s, String l) {
+ cb.append("{\n");
+ cb.append("int i = org.apache.hadoop.record.Utils.readVInt("+b+", "+s+");\n");
+ cb.append("int z = org.apache.hadoop.record.Utils.getVIntSize(i);\n");
+ cb.append(s+"+=z; "+l+"-=z;\n");
+ cb.append("}\n");
}
- public String genJavaSlurpBytes(String b, String s, String l) {
- StringBuffer sb = new StringBuffer();
- sb.append(" {\n");
- sb.append(" int i = WritableComparator.readVInt("+b+", "+s+");\n");
- sb.append(" int z = WritableUtils.getVIntSize(i);\n");
- sb.append(" "+s+"+=z; "+l+"-=z;\n");
- sb.append(" }\n");
- return sb.toString();
- }
-
- public String genJavaCompareBytes() {
- StringBuffer sb = new StringBuffer();
- sb.append(" {\n");
- sb.append(" int i1 = WritableComparator.readVInt(b1, s1);\n");
- sb.append(" int i2 = WritableComparator.readVInt(b2, s2);\n");
- sb.append(" if (i1 != i2) {\n");
- sb.append(" return ((i1-i2) < 0) ? -1 : 0;\n");
- sb.append(" }\n");
- sb.append(" int z1 = WritableUtils.getVIntSize(i1);\n");
- sb.append(" int z2 = WritableUtils.getVIntSize(i2);\n");
- sb.append(" s1+=z1; s2+=z2; l1-=z1; l2-=z2;\n");
- sb.append(" }\n");
- return sb.toString();
+ void genCompareBytes(CodeBuffer cb) {
+ cb.append("{\n");
+ cb.append("int i1 = org.apache.hadoop.record.Utils.readVInt(b1, s1);\n");
+ cb.append("int i2 = org.apache.hadoop.record.Utils.readVInt(b2, s2);\n");
+ cb.append("if (i1 != i2) {\n");
+ cb.append("return ((i1-i2) < 0) ? -1 : 0;\n");
+ cb.append("}\n");
+ cb.append("int z1 = org.apache.hadoop.record.Utils.getVIntSize(i1);\n");
+ cb.append("int z2 = org.apache.hadoop.record.Utils.getVIntSize(i2);\n");
+ cb.append("s1+=z1; s2+=z2; l1-=z1; l2-=z2;\n");
+ cb.append("}\n");
}
+ }
+ /** Creates a new instance of JInt */
+ public JInt() {
+ setJavaType(new JavaInt());
+ setCppType(new CppType("int32_t"));
+ setCType(new CType());
+ }
+
+ String getSignature() {
+ return "i";
+ }
}
Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/record/compiler/JLong.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/record/compiler/JLong.java?view=diff&rev=513122&r1=513121&r2=513122
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/record/compiler/JLong.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/record/compiler/JLong.java Wed Feb 28 19:47:27 2007
@@ -18,47 +18,54 @@
package org.apache.hadoop.record.compiler;
+import org.apache.hadoop.record.compiler.JType.CType;
+import org.apache.hadoop.record.compiler.JType.CppType;
+
/**
- *
+ * Code generator for "long" type
* @author Milind Bhandarkar
*/
public class JLong extends JType {
+
+ class JavaLong extends JavaType {
- /** Creates a new instance of JLong */
- public JLong() {
- super("int64_t", "long", "Long", "Long", "toLong");
+ JavaLong() {
+ super("long", "Long", "Long");
}
- public String getSignature() {
- return "l";
+ void genHashCode(CodeBuffer cb, String fname) {
+ cb.append("ret = (int) ("+fname+"^("+fname+">>>32));\n");
}
- public String genJavaHashCode(String fname) {
- return " ret = (int) ("+fname+"^("+fname+">>>32));\n";
+ void genSlurpBytes(CodeBuffer cb, String b, String s, String l) {
+ cb.append("{\n");
+ cb.append("long i = org.apache.hadoop.record.Utils.readVLong("+b+", "+s+");\n");
+ cb.append("int z = org.apache.hadoop.record.Utils.getVIntSize(i);\n");
+ cb.append(s+"+=z; "+l+"-=z;\n");
+ cb.append("}\n");
}
- public String genJavaSlurpBytes(String b, String s, String l) {
- StringBuffer sb = new StringBuffer();
- sb.append(" {\n");
- sb.append(" long i = WritableComparator.readVLong("+b+", "+s+");\n");
- sb.append(" int z = WritableUtils.getVIntSize(i);\n");
- sb.append(" "+s+"+=z; "+l+"-=z;\n");
- sb.append(" }\n");
- return sb.toString();
- }
-
- public String genJavaCompareBytes() {
- StringBuffer sb = new StringBuffer();
- sb.append(" {\n");
- sb.append(" long i1 = WritableComparator.readVLong(b1, s1);\n");
- sb.append(" long i2 = WritableComparator.readVLong(b2, s2);\n");
- sb.append(" if (i1 != i2) {\n");
- sb.append(" return ((i1-i2) < 0) ? -1 : 0;\n");
- sb.append(" }\n");
- sb.append(" int z1 = WritableUtils.getVIntSize(i1);\n");
- sb.append(" int z2 = WritableUtils.getVIntSize(i2);\n");
- sb.append(" s1+=z1; s2+=z2; l1-=z1; l2-=z2;\n");
- sb.append(" }\n");
- return sb.toString();
+ void genCompareBytes(CodeBuffer cb) {
+ cb.append("{\n");
+ cb.append("long i1 = org.apache.hadoop.record.Utils.readVLong(b1, s1);\n");
+ cb.append("long i2 = org.apache.hadoop.record.Utils.readVLong(b2, s2);\n");
+ cb.append("if (i1 != i2) {\n");
+ cb.append("return ((i1-i2) < 0) ? -1 : 0;\n");
+ cb.append("}\n");
+ cb.append("int z1 = org.apache.hadoop.record.Utils.getVIntSize(i1);\n");
+ cb.append("int z2 = org.apache.hadoop.record.Utils.getVIntSize(i2);\n");
+ cb.append("s1+=z1; s2+=z2; l1-=z1; l2-=z2;\n");
+ cb.append("}\n");
}
+ }
+ /** Creates a new instance of JLong */
+ public JLong() {
+ setJavaType(new JavaLong());
+ setCppType(new CppType("int64_t"));
+ setCType(new CType());
+ }
+
+ String getSignature() {
+ return "l";
+ }
}
Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/record/compiler/JMap.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/record/compiler/JMap.java?view=diff&rev=513122&r1=513121&r2=513122
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/record/compiler/JMap.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/record/compiler/JMap.java Wed Feb 28 19:47:27 2007
@@ -23,149 +23,152 @@
* @author Milind Bhandarkar
*/
public class JMap extends JCompType {
-
- static private int level = 0;
-
- static private String getLevel() { return Integer.toString(level); }
-
- static private void incrLevel() { level++; }
-
- static private void decrLevel() { level--; }
-
- static private String getId(String id) { return id+getLevel(); }
-
- private JType mKey;
- private JType mValue;
-
- /** Creates a new instance of JMap */
- public JMap(JType t1, JType t2) {
- super(" ::std::map<"+t1.getCppType()+","+t2.getCppType()+">",
- "java.util.TreeMap", "Map", "java.util.TreeMap");
- mKey = t1;
- mValue = t2;
+
+ static private int level = 0;
+
+ static private String getLevel() { return Integer.toString(level); }
+
+ static private void incrLevel() { level++; }
+
+ static private void decrLevel() { level--; }
+
+ static private String getId(String id) { return id+getLevel(); }
+
+ private JType keyType;
+ private JType valueType;
+
+ class JavaMap extends JavaCompType {
+
+ JType.JavaType key;
+ JType.JavaType value;
+
+ JavaMap(JType.JavaType key, JType.JavaType value) {
+ super("java.util.TreeMap<"+key.getWrapperType()+","+value.getWrapperType()+">",
+ "Map",
+ "java.util.TreeMap<"+key.getWrapperType()+","+value.getWrapperType()+">");
+ this.key = key;
+ this.value = value;
+ }
+
+ void genCompareTo(CodeBuffer cb, String fname, String other) {
+ String setType = "java.util.Set<"+key.getWrapperType()+"> ";
+ String iterType = "java.util.Iterator<"+key.getWrapperType()+"> ";
+ cb.append("{\n");
+ cb.append(setType+getId("set1")+" = "+fname+".keySet();\n");
+ cb.append(setType+getId("set2")+" = "+other+".keySet();\n");
+ cb.append(iterType+getId("miter1")+" = "+
+ getId("set1")+".iterator();\n");
+ cb.append(iterType+getId("miter2")+" = "+
+ getId("set2")+".iterator();\n");
+ cb.append("for(; "+getId("miter1")+".hasNext() && "+
+ getId("miter2")+".hasNext(); ) {\n");
+ cb.append(key.getType()+" "+getId("k1")+
+ " = "+getId("miter1")+".next();\n");
+ cb.append(key.getType()+" "+getId("k2")+
+ " = "+getId("miter2")+".next();\n");
+ key.genCompareTo(cb, getId("k1"), getId("k2"));
+ cb.append("if (ret != 0) { return ret; }\n");
+ cb.append("}\n");
+ cb.append("ret = ("+getId("set1")+".size() - "+getId("set2")+".size());\n");
+ cb.append("}\n");
+ }
+
+ void genReadMethod(CodeBuffer cb, String fname, String tag, boolean decl) {
+ if (decl) {
+ cb.append(getType()+" "+fname+";\n");
+ }
+ cb.append("{\n");
+ incrLevel();
+ cb.append("org.apache.hadoop.record.Index "+getId("midx")+" = a_.startMap(\""+tag+"\");\n");
+ cb.append(fname+"=new "+getType()+"();\n");
+ cb.append("for (; !"+getId("midx")+".done(); "+getId("midx")+".incr()) {\n");
+ key.genReadMethod(cb, getId("k"),getId("k"),true);
+ value.genReadMethod(cb, getId("v"),getId("v"),true);
+ cb.append(fname+".put("+getId("k")+","+getId("v")+");\n");
+ cb.append("}\n");
+ cb.append("a_.endMap(\""+tag+"\");\n");
+ decrLevel();
+ cb.append("}\n");
}
- public String getSignature() {
- return "{" + mKey.getSignature() + mValue.getSignature() +"}";
+ void genWriteMethod(CodeBuffer cb, String fname, String tag) {
+ String setType = "java.util.Set<java.util.Map.Entry<"+
+ key.getWrapperType()+","+value.getWrapperType()+">> ";
+ String entryType = "java.util.Map.Entry<"+
+ key.getWrapperType()+","+value.getWrapperType()+"> ";
+ String iterType = "java.util.Iterator<java.util.Map.Entry<"+
+ key.getWrapperType()+","+value.getWrapperType()+">> ";
+ cb.append("{\n");
+ incrLevel();
+ cb.append("a_.startMap("+fname+",\""+tag+"\");\n");
+ cb.append(setType+getId("es")+" = "+fname+".entrySet();\n");
+ cb.append("for("+iterType+getId("midx")+" = "+getId("es")+".iterator(); "+getId("midx")+".hasNext(); ) {\n");
+ cb.append(entryType+getId("me")+" = "+getId("midx")+".next();\n");
+ cb.append(key.getType()+" "+getId("k")+" = "+getId("me")+".getKey();\n");
+ cb.append(value.getType()+" "+getId("v")+" = "+getId("me")+".getValue();\n");
+ key.genWriteMethod(cb, getId("k"),getId("k"));
+ value.genWriteMethod(cb, getId("v"),getId("v"));
+ cb.append("}\n");
+ cb.append("a_.endMap("+fname+",\""+tag+"\");\n");
+ cb.append("}\n");
+ decrLevel();
}
- public String genJavaCompareTo(String fname, String other) {
- StringBuffer sb = new StringBuffer();
- sb.append(" {\n");
- sb.append(" java.util.Set "+getId("set1")+" = "+fname+".keySet();\n");
- sb.append(" java.util.Set "+getId("set2")+" = "+other+".keySet();\n");
- sb.append(" java.util.Iterator "+getId("miter1")+" = "+
- getId("set1")+".iterator();\n");
- sb.append(" java.util.Iterator "+getId("miter2")+" = "+
- getId("set2")+".iterator();\n");
- sb.append(" for(; "+getId("miter1")+".hasNext() && "+
- getId("miter2")+".hasNext(); ) {\n");
- sb.append(" "+mKey.getJavaWrapperType()+" "+getId("k1")+
- " = ("+mKey.getJavaWrapperType()+") "+getId("miter1")+".next();\n");
- sb.append(" "+mKey.getJavaWrapperType()+" "+getId("k2")+
- " = ("+mKey.getJavaWrapperType()+") "+getId("miter2")+".next();\n");
- sb.append(mKey.genJavaCompareToWrapper(getId("k1"), getId("k2")));
- sb.append(" if (ret != 0) { return ret; }\n");
- sb.append(" }\n");
- sb.append(" ret = ("+getId("set1")+".size() - "+getId("set2")+".size());\n");
- sb.append(" }\n");
- return sb.toString();
- }
-
- public String genJavaCompareToWrapper(String fname, String other) {
- return genJavaCompareTo(fname, other);
- }
-
- public String genJavaReadWrapper(String fname, String tag, boolean decl) {
- StringBuffer ret = new StringBuffer("");
- if (decl) {
- ret.append(" java.util.TreeMap "+fname+";\n");
- }
- ret.append(" {\n");
- incrLevel();
- ret.append(" org.apache.hadoop.record.Index "+getId("midx")+" = a_.startMap(\""+tag+"\");\n");
- ret.append(" "+fname+"=new java.util.TreeMap();\n");
- ret.append(" for (; !"+getId("midx")+".done(); "+getId("midx")+".incr()) {\n");
- ret.append(mKey.genJavaReadWrapper(getId("k"),getId("k"),true));
- ret.append(mValue.genJavaReadWrapper(getId("v"),getId("v"),true));
- ret.append(" "+fname+".put("+getId("k")+","+getId("v")+");\n");
- ret.append(" }\n");
- ret.append(" a_.endMap(\""+tag+"\");\n");
- decrLevel();
- ret.append(" }\n");
- return ret.toString();
- }
-
- public String genJavaReadMethod(String fname, String tag) {
- return genJavaReadWrapper(fname, tag, false);
- }
-
- public String genJavaWriteWrapper(String fname, String tag) {
- StringBuffer ret = new StringBuffer(" {\n");
- incrLevel();
- ret.append(" a_.startMap("+fname+",\""+tag+"\");\n");
- ret.append(" java.util.Set "+getId("es")+" = "+fname+".entrySet();\n");
- ret.append(" for(java.util.Iterator "+getId("midx")+" = "+getId("es")+".iterator(); "+getId("midx")+".hasNext(); ) {\n");
- ret.append(" java.util.Map.Entry "+getId("me")+" = (java.util.Map.Entry) "+getId("midx")+".next();\n");
- ret.append(" "+mKey.getJavaWrapperType()+" "+getId("k")+" = ("+mKey.getJavaWrapperType()+") "+getId("me")+".getKey();\n");
- ret.append(" "+mValue.getJavaWrapperType()+" "+getId("v")+" = ("+mValue.getJavaWrapperType()+") "+getId("me")+".getValue();\n");
- ret.append(mKey.genJavaWriteWrapper(getId("k"),getId("k")));
- ret.append(mValue.genJavaWriteWrapper(getId("v"),getId("v")));
- ret.append(" }\n");
- ret.append(" a_.endMap("+fname+",\""+tag+"\");\n");
- ret.append(" }\n");
- decrLevel();
- return ret.toString();
- }
-
- public String genJavaWriteMethod(String fname, String tag) {
- return genJavaWriteWrapper(fname, tag);
- }
-
- public String genJavaSlurpBytes(String b, String s, String l) {
- StringBuffer sb = new StringBuffer();
- sb.append(" {\n");
+ void genSlurpBytes(CodeBuffer cb, String b, String s, String l) {
+ cb.append("{\n");
incrLevel();
- sb.append(" int "+getId("mi")+
- " = WritableComparator.readVInt("+b+", "+s+");\n");
- sb.append(" int "+getId("mz")+
- " = WritableUtils.getVIntSize("+getId("mi")+");\n");
- sb.append(" "+s+"+="+getId("mz")+"; "+l+"-="+getId("mz")+";\n");
- sb.append(" for (int "+getId("midx")+" = 0; "+getId("midx")+
+ cb.append("int "+getId("mi")+
+ " = org.apache.hadoop.record.Utils.readVInt("+b+", "+s+");\n");
+ cb.append("int "+getId("mz")+
+ " = org.apache.hadoop.record.Utils.getVIntSize("+getId("mi")+");\n");
+ cb.append(s+"+="+getId("mz")+"; "+l+"-="+getId("mz")+";\n");
+ cb.append("for (int "+getId("midx")+" = 0; "+getId("midx")+
" < "+getId("mi")+"; "+getId("midx")+"++) {");
- sb.append(mKey.genJavaSlurpBytes(b,s,l));
- sb.append(mValue.genJavaSlurpBytes(b,s,l));
- sb.append(" }\n");
+ key.genSlurpBytes(cb, b,s,l);
+ value.genSlurpBytes(cb, b,s,l);
+ cb.append("}\n");
decrLevel();
- sb.append(" }\n");
- return sb.toString();
+ cb.append("}\n");
}
- public String genJavaCompareBytes() {
- StringBuffer sb = new StringBuffer();
- sb.append(" {\n");
+ void genCompareBytes(CodeBuffer cb) {
+ cb.append("{\n");
incrLevel();
- sb.append(" int "+getId("mi1")+
- " = WritableComparator.readVInt(b1, s1);\n");
- sb.append(" int "+getId("mi2")+
- " = WritableComparator.readVInt(b2, s2);\n");
- sb.append(" int "+getId("mz1")+
- " = WritableUtils.getVIntSize("+getId("mi1")+");\n");
- sb.append(" int "+getId("mz2")+
- " = WritableUtils.getVIntSize("+getId("mi2")+");\n");
- sb.append(" s1+="+getId("mz1")+"; s2+="+getId("mz2")+
+ cb.append("int "+getId("mi1")+
+ " = org.apache.hadoop.record.Utils.readVInt(b1, s1);\n");
+ cb.append("int "+getId("mi2")+
+ " = org.apache.hadoop.record.Utils.readVInt(b2, s2);\n");
+ cb.append("int "+getId("mz1")+
+ " = org.apache.hadoop.record.Utils.getVIntSize("+getId("mi1")+");\n");
+ cb.append("int "+getId("mz2")+
+ " = org.apache.hadoop.record.Utils.getVIntSize("+getId("mi2")+");\n");
+ cb.append("s1+="+getId("mz1")+"; s2+="+getId("mz2")+
"; l1-="+getId("mz1")+"; l2-="+getId("mz2")+";\n");
- sb.append(" for (int "+getId("midx")+" = 0; "+getId("midx")+
+ cb.append("for (int "+getId("midx")+" = 0; "+getId("midx")+
" < "+getId("mi1")+" && "+getId("midx")+" < "+getId("mi2")+
"; "+getId("midx")+"++) {");
- sb.append(mKey.genJavaCompareBytes());
- sb.append(mValue.genJavaSlurpBytes("b1", "s1", "l1"));
- sb.append(mValue.genJavaSlurpBytes("b2", "s2", "l2"));
- sb.append(" }\n");
- sb.append(" if ("+getId("mi1")+" != "+getId("mi2")+
+ key.genCompareBytes(cb);
+ value.genSlurpBytes(cb, "b1", "s1", "l1");
+ value.genSlurpBytes(cb, "b2", "s2", "l2");
+ cb.append("}\n");
+ cb.append("if ("+getId("mi1")+" != "+getId("mi2")+
") { return ("+getId("mi1")+"<"+getId("mi2")+")?-1:0; }\n");
decrLevel();
- sb.append(" }\n");
- return sb.toString();
+ cb.append("}\n");
}
+ }
+
+ /** Creates a new instance of JMap */
+ public JMap(JType t1, JType t2) {
+ setJavaType(new JavaMap(t1.getJavaType(), t2.getJavaType()));
+ setCppType(new CppType(" ::std::map<"+t1.getCppType().getType()+","+
+ t2.getCppType().getType()+">"));
+ setCType(new CType());
+ keyType = t1;
+ valueType = t2;
+ }
+
+ String getSignature() {
+ return "{" + keyType.getSignature() + valueType.getSignature() +"}";
+ }
}
Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/record/compiler/JRecord.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/record/compiler/JRecord.java?view=diff&rev=513122&r1=513121&r2=513122
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/record/compiler/JRecord.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/record/compiler/JRecord.java Wed Feb 28 19:47:27 2007
@@ -29,391 +29,451 @@
* @author Milind Bhandarkar
*/
public class JRecord extends JCompType {
-
- private String mFQName;
- private String mName;
- private String mModule;
- private ArrayList mFields;
-
- /**
- * Creates a new instance of JRecord
- */
- public JRecord(String name, ArrayList flist) {
- super(name.replaceAll("\\.","::"), name, "Record", name);
- mFQName = name;
- int idx = name.lastIndexOf('.');
- mName = name.substring(idx+1);
- mModule = name.substring(0, idx);
- mFields = flist;
- }
-
- public String getName() {
- return mName;
- }
-
- public String getJavaFQName() {
- return mFQName;
- }
-
- public String getCppFQName() {
- return mFQName.replaceAll("\\.", "::");
- }
-
- public String getJavaPackage() {
- return mModule;
- }
-
- public String getCppNameSpace() {
- return mModule.replaceAll("\\.", "::");
- }
-
- public ArrayList getFields() {
- return mFields;
- }
-
- public String getSignature() {
- StringBuffer sb = new StringBuffer();
- sb.append("L").append(mName).append("(");
- for (Iterator i = mFields.iterator(); i.hasNext();) {
- String s = ((JField) i.next()).getSignature();
- sb.append(s);
- }
- sb.append(")");
- return sb.toString();
- }
-
- public String genCppDecl(String fname) {
- return " "+mName+" "+fname+";\n";
- }
-
- public String genJavaReadMethod(String fname, String tag) {
- return genJavaReadWrapper(fname, tag, false);
- }
-
- public String genJavaReadWrapper(String fname, String tag, boolean decl) {
- StringBuffer ret = new StringBuffer("");
- if (decl) {
- ret.append(" "+getJavaFQName()+" "+fname+";\n");
- }
- ret.append(" "+fname+"= new "+getJavaFQName()+"();\n");
- ret.append(" a_.readRecord("+fname+",\""+tag+"\");\n");
- return ret.toString();
- }
-
- public String genJavaWriteWrapper(String fname, String tag) {
- return " a_.writeRecord("+fname+",\""+tag+"\");\n";
- }
+
+ class JavaRecord extends JavaCompType {
- public String genJavaSlurpBytes(String b, String s, String l) {
- StringBuffer sb = new StringBuffer();
- sb.append(" {\n");
- sb.append(" int r = "+getJavaFQName()+
+ private String fullName;
+ private String name;
+ private String module;
+ private ArrayList<JField<JavaType>> fields =
+ new ArrayList<JField<JavaType>>();
+
+ JavaRecord(String name, ArrayList<JField<JType>> flist) {
+ super(name, "Record", name);
+ this.fullName = name;
+ int idx = name.lastIndexOf('.');
+ this.name = name.substring(idx+1);
+ this.module = name.substring(0, idx);
+ for (Iterator<JField<JType>> iter = flist.iterator(); iter.hasNext();) {
+ JField<JType> f = iter.next();
+ fields.add(new JField<JavaType>(f.getName(), f.getType().getJavaType()));
+ }
+ }
+
+ void genReadMethod(CodeBuffer cb, String fname, String tag, boolean decl) {
+ if (decl) {
+ cb.append(fullName+" "+fname+";\n");
+ }
+ cb.append(fname+"= new "+fullName+"();\n");
+ cb.append("a_.readRecord("+fname+",\""+tag+"\");\n");
+ }
+
+ void genWriteMethod(CodeBuffer cb, String fname, String tag) {
+ cb.append("a_.writeRecord("+fname+",\""+tag+"\");\n");
+ }
+
+ void genSlurpBytes(CodeBuffer cb, String b, String s, String l) {
+ cb.append("{\n");
+ cb.append("int r = "+fullName+
".Comparator.slurpRaw("+b+","+s+","+l+");\n");
- sb.append(" "+s+"+=r; "+l+"-=r;\n");
- sb.append(" }\n");
- return sb.toString();
+ cb.append(s+"+=r; "+l+"-=r;\n");
+ cb.append("}\n");
}
- public String genJavaCompareBytes() {
- StringBuffer sb = new StringBuffer();
- sb.append(" {\n");
- sb.append(" int r1 = "+getJavaFQName()+
+ void genCompareBytes(CodeBuffer cb) {
+ cb.append("{\n");
+ cb.append("int r1 = "+fullName+
".Comparator.compareRaw(b1,s1,l1,b2,s2,l2);\n");
- sb.append(" if (r1 <= 0) { return r1; }\n");
- sb.append(" s1+=r1; s2+=r1; l1-=r1; l2-=r1;\n");
- sb.append(" }\n");
- return sb.toString();
- }
-
- public void genCppCode(FileWriter hh, FileWriter cc)
- throws IOException {
- String[] ns = getCppNameSpace().split("::");
- for (int i = 0; i < ns.length; i++) {
- hh.write("namespace "+ns[i]+" {\n");
- }
-
- hh.write("class "+getName()+" : public ::hadoop::Record {\n");
- hh.write("private:\n");
-
- for (Iterator i = mFields.iterator(); i.hasNext();) {
- JField jf = (JField) i.next();
- hh.write(jf.genCppDecl());
- }
- hh.write("public:\n");
- hh.write(" virtual void serialize(::hadoop::OArchive& a_, const char* tag) const;\n");
- hh.write(" virtual void deserialize(::hadoop::IArchive& a_, const char* tag);\n");
- hh.write(" virtual const ::std::string& type() const;\n");
- hh.write(" virtual const ::std::string& signature() const;\n");
- hh.write(" virtual bool operator<(const "+getName()+"& peer_) const;\n");
- hh.write(" virtual bool operator==(const "+getName()+"& peer_) const;\n");
- hh.write(" virtual ~"+getName()+"() {};\n");
- int fIdx = 0;
- for (Iterator i = mFields.iterator(); i.hasNext(); fIdx++) {
- JField jf = (JField) i.next();
- hh.write(jf.genCppGetSet(fIdx));
- }
- hh.write("}; // end record "+getName()+"\n");
- for (int i=ns.length-1; i>=0; i--) {
- hh.write("} // end namespace "+ns[i]+"\n");
- }
- cc.write("void "+getCppFQName()+"::serialize(::hadoop::OArchive& a_, const char* tag) const {\n");
- cc.write(" a_.startRecord(*this,tag);\n");
- fIdx = 0;
- for (Iterator i = mFields.iterator(); i.hasNext(); fIdx++) {
- JField jf = (JField) i.next();
- String name = jf.getName();
- if (jf.getType() instanceof JBuffer) {
- cc.write(" a_.serialize("+name+","+name+".length(),\""+jf.getTag()+"\");\n");
- } else {
- cc.write(" a_.serialize("+name+",\""+jf.getTag()+"\");\n");
- }
- }
- cc.write(" a_.endRecord(*this,tag);\n");
- cc.write(" return;\n");
- cc.write("}\n");
-
- cc.write("void "+getCppFQName()+"::deserialize(::hadoop::IArchive& a_, const char* tag) {\n");
- cc.write(" a_.startRecord(*this,tag);\n");
- fIdx = 0;
- for (Iterator i = mFields.iterator(); i.hasNext(); fIdx++) {
- JField jf = (JField) i.next();
- String name = jf.getName();
- if (jf.getType() instanceof JBuffer) {
- cc.write(" { size_t len=0; a_.deserialize("+name+",len,\""+jf.getTag()+"\");}\n");
- } else {
- cc.write(" a_.deserialize("+name+",\""+jf.getTag()+"\");\n");
- }
- }
- cc.write(" a_.endRecord(*this,tag);\n");
- cc.write(" return;\n");
- cc.write("}\n");
-
-
- cc.write("bool "+getCppFQName()+"::operator< (const "+getCppFQName()+"& peer_) const {\n");
- cc.write(" return (1\n");
- for (Iterator i = mFields.iterator(); i.hasNext();) {
- JField jf = (JField) i.next();
- String name = jf.getName();
- cc.write(" && ("+name+" < peer_."+name+")\n");
- }
- cc.write(" );\n");
- cc.write("}\n");
-
- cc.write("bool "+getCppFQName()+"::operator== (const "+getCppFQName()+"& peer_) const {\n");
- cc.write(" return (1\n");
- for (Iterator i = mFields.iterator(); i.hasNext();) {
- JField jf = (JField) i.next();
- String name = jf.getName();
- cc.write(" && ("+name+" == peer_."+name+")\n");
- }
- cc.write(" );\n");
- cc.write("}\n");
-
- cc.write("const ::std::string&"+getCppFQName()+"::type() const {\n");
- cc.write(" static const ::std::string type_(\""+mName+"\");\n");
- cc.write(" return type_;\n");
- cc.write("}\n");
-
- cc.write("const ::std::string&"+getCppFQName()+"::signature() const {\n");
- cc.write(" static const ::std::string sig_(\""+getSignature()+"\");\n");
- cc.write(" return sig_;\n");
- cc.write("}\n");
-
- }
-
- public void genJavaCode(String destDir) throws IOException {
- String pkg = getJavaPackage();
- String pkgpath = pkg.replaceAll("\\.", "/");
- File pkgdir = new File(destDir, pkgpath);
- if (!pkgdir.exists()) {
- // create the pkg directory
- boolean ret = pkgdir.mkdirs();
- if (!ret) {
- throw new IOException("Cannnot create directory: "+pkgpath);
- }
- } else if (!pkgdir.isDirectory()) {
- // not a directory
- throw new IOException(pkgpath+" is not a directory.");
- }
- File jfile = new File(pkgdir, getName()+".java");
- FileWriter jj = new FileWriter(jfile);
- jj.write("// File generated by hadoop record compiler. Do not edit.\n");
- jj.write("package "+getJavaPackage()+";\n\n");
- jj.write("import java.io.IOException;\n");
- jj.write("import org.apache.commons.logging.Log;\n");
- jj.write("import org.apache.commons.logging.LogFactory;\n");
- jj.write("import org.apache.hadoop.io.WritableComparator;\n");
- jj.write("import org.apache.hadoop.io.WritableComparable;\n");
- jj.write("import org.apache.hadoop.io.WritableUtils;\n");
- jj.write("import org.apache.hadoop.io.BytesWritable;\n");
- jj.write("import org.apache.hadoop.io.Text;\n\n");
- jj.write("public class "+getName()+" implements org.apache.hadoop.record.Record, WritableComparable {\n");
- jj.write(" private static final Log LOG= LogFactory.getLog(\""+
- this.getJavaFQName()+"\");\n");
- for (Iterator i = mFields.iterator(); i.hasNext();) {
- JField jf = (JField) i.next();
- jj.write(jf.genJavaDecl());
- }
- jj.write(" public "+getName()+"() { }\n");
-
-
- jj.write(" public "+getName()+"(\n");
- int fIdx = 0;
- for (Iterator i = mFields.iterator(); i.hasNext(); fIdx++) {
- JField jf = (JField) i.next();
- jj.write(jf.genJavaConstructorParam(fIdx));
- jj.write((!i.hasNext())?"":",\n");
- }
- jj.write(") {\n");
- fIdx = 0;
- for (Iterator i = mFields.iterator(); i.hasNext(); fIdx++) {
- JField jf = (JField) i.next();
- jj.write(jf.genJavaConstructorSet(fIdx));
- }
- jj.write(" }\n");
- fIdx = 0;
- for (Iterator i = mFields.iterator(); i.hasNext(); fIdx++) {
- JField jf = (JField) i.next();
- jj.write(jf.genJavaGetSet(fIdx));
- }
- jj.write(" public void serialize(org.apache.hadoop.record.OutputArchive a_, String tag) throws java.io.IOException {\n");
- jj.write(" a_.startRecord(this,tag);\n");
- for (Iterator i = mFields.iterator(); i.hasNext();) {
- JField jf = (JField) i.next();
- jj.write(jf.genJavaWriteMethodName());
- }
- jj.write(" a_.endRecord(this,tag);\n");
- jj.write(" }\n");
-
- jj.write(" public void deserialize(org.apache.hadoop.record.InputArchive a_, String tag) throws java.io.IOException {\n");
- jj.write(" a_.startRecord(tag);\n");
- for (Iterator i = mFields.iterator(); i.hasNext();) {
- JField jf = (JField) i.next();
- jj.write(jf.genJavaReadMethodName());
- }
- jj.write(" a_.endRecord(tag);\n");
- jj.write("}\n");
-
- jj.write(" public String toString() {\n");
- jj.write(" try {\n");
- jj.write(" java.io.ByteArrayOutputStream s =\n");
- jj.write(" new java.io.ByteArrayOutputStream();\n");
- jj.write(" org.apache.hadoop.record.CsvOutputArchive a_ = \n");
- jj.write(" new org.apache.hadoop.record.CsvOutputArchive(s);\n");
- jj.write(" a_.startRecord(this,\"\");\n");
- fIdx = 0;
- for (Iterator i = mFields.iterator(); i.hasNext(); fIdx++) {
- JField jf = (JField) i.next();
- jj.write(jf.genJavaWriteMethodName());
- }
- jj.write(" a_.endRecord(this,\"\");\n");
- jj.write(" return new String(s.toByteArray(), \"UTF-8\");\n");
- jj.write(" } catch (Throwable ex) {\n");
- jj.write(" throw new RuntimeException(ex);\n");
- jj.write(" }\n");
- jj.write(" }\n");
-
- jj.write(" public void write(java.io.DataOutput out) throws java.io.IOException {\n");
- jj.write(" org.apache.hadoop.record.BinaryOutputArchive archive = new org.apache.hadoop.record.BinaryOutputArchive(out);\n");
- jj.write(" serialize(archive, \"\");\n");
- jj.write(" }\n");
-
- jj.write(" public void readFields(java.io.DataInput in) throws java.io.IOException {\n");
- jj.write(" org.apache.hadoop.record.BinaryInputArchive archive = new org.apache.hadoop.record.BinaryInputArchive(in);\n");
- jj.write(" deserialize(archive, \"\");\n");
- jj.write(" }\n");
-
- jj.write(" public int compareTo (Object peer_) throws ClassCastException {\n");
- jj.write(" if (!(peer_ instanceof "+getName()+")) {\n");
- jj.write(" throw new ClassCastException(\"Comparing different types of records.\");\n");
- jj.write(" }\n");
- jj.write(" "+getName()+" peer = ("+getName()+") peer_;\n");
- jj.write(" int ret = 0;\n");
- for (Iterator i = mFields.iterator(); i.hasNext(); fIdx++) {
- JField jf = (JField) i.next();
- jj.write(jf.genJavaCompareTo());
- jj.write(" if (ret != 0) return ret;\n");
- }
- jj.write(" return ret;\n");
- jj.write(" }\n");
-
- jj.write(" public boolean equals(Object peer_) {\n");
- jj.write(" if (!(peer_ instanceof "+getName()+")) {\n");
- jj.write(" return false;\n");
- jj.write(" }\n");
- jj.write(" if (peer_ == this) {\n");
- jj.write(" return true;\n");
- jj.write(" }\n");
- jj.write(" "+getName()+" peer = ("+getName()+") peer_;\n");
- jj.write(" boolean ret = false;\n");
- for (Iterator i = mFields.iterator(); i.hasNext(); fIdx++) {
- JField jf = (JField) i.next();
- jj.write(jf.genJavaEquals());
- jj.write(" if (!ret) return ret;\n");
- }
- jj.write(" return ret;\n");
- jj.write(" }\n");
-
- jj.write(" public int hashCode() {\n");
- jj.write(" int result = 17;\n");
- jj.write(" int ret;\n");
- for (Iterator i = mFields.iterator(); i.hasNext(); fIdx++) {
- JField jf = (JField) i.next();
- jj.write(jf.genJavaHashCode());
- jj.write(" result = 37*result + ret;\n");
- }
- jj.write(" return result;\n");
- jj.write(" }\n");
- jj.write(" public static String signature() {\n");
- jj.write(" return \""+getSignature()+"\";\n");
- jj.write(" }\n");
-
- jj.write(" public static class Comparator extends WritableComparator {\n");
- jj.write(" public Comparator() {\n");
- jj.write(" super("+getName()+".class);\n");
- jj.write(" }\n");
-
- jj.write(" static public int slurpRaw(byte[] b, int s, int l) {\n");
- jj.write(" try {\n");
- jj.write(" int os = s;\n");
- for (Iterator i = mFields.iterator(); i.hasNext(); fIdx++) {
- JField jf = (JField) i.next();
- jj.write(jf.genJavaSlurpBytes("b","s","l"));
- }
- jj.write(" return (os - s);\n");
- jj.write(" } catch(IOException e) {\n");
- jj.write(" LOG.warn(e);\n");
- jj.write(" throw new RuntimeException(e);\n");
- jj.write(" }\n");
- jj.write(" }\n");
-
- jj.write(" static public int compareRaw(byte[] b1, int s1, int l1,\n");
- jj.write(" byte[] b2, int s2, int l2) {\n");
- jj.write(" try {\n");
- jj.write(" int os1 = s1;\n");
- for (Iterator i = mFields.iterator(); i.hasNext(); fIdx++) {
- JField jf = (JField) i.next();
- jj.write(jf.genJavaCompareBytes());
- }
- jj.write(" return (os1 - s1);\n");
- jj.write(" } catch(IOException e) {\n");
- jj.write(" LOG.warn(e);\n");
- jj.write(" throw new RuntimeException(e);\n");
- jj.write(" }\n");
- jj.write(" }\n");
- jj.write(" public int compare(byte[] b1, int s1, int l1,\n");
- jj.write(" byte[] b2, int s2, int l2) {\n");
- jj.write(" int ret = compareRaw(b1,s1,l1,b2,s2,l2);\n");
- jj.write(" return (ret == -1)? -1 : ((ret==0)? 1 : 0);");
- jj.write(" }\n");
- jj.write(" }\n\n");
- jj.write(" static {\n");
- jj.write(" WritableComparator.define("+getName()+".class, new Comparator());\n");
- jj.write(" }\n");
+ cb.append("if (r1 <= 0) { return r1; }\n");
+ cb.append("s1+=r1; s2+=r1; l1-=r1; l2-=r1;\n");
+ cb.append("}\n");
+ }
+
+ void genCode(String destDir, ArrayList<String> options) throws IOException {
+ String pkg = module;
+ String pkgpath = pkg.replaceAll("\\.", "/");
+ File pkgdir = new File(destDir, pkgpath);
+ if (!pkgdir.exists()) {
+ // create the pkg directory
+ boolean ret = pkgdir.mkdirs();
+ if (!ret) {
+ throw new IOException("Cannnot create directory: "+pkgpath);
+ }
+ } else if (!pkgdir.isDirectory()) {
+ // not a directory
+ throw new IOException(pkgpath+" is not a directory.");
+ }
+ File jfile = new File(pkgdir, name+".java");
+ FileWriter jj = new FileWriter(jfile);
+
+ CodeBuffer cb = new CodeBuffer();
+ cb.append("// File generated by hadoop record compiler. Do not edit.\n");
+ cb.append("package "+module+";\n\n");
+ cb.append("public class "+name+
+ " implements org.apache.hadoop.record.Record");
+ cb.append(", org.apache.hadoop.io.WritableComparable");
+ cb.append(" {\n");
+
+ for (Iterator<JField<JavaType>> i = fields.iterator(); i.hasNext();) {
+ JField<JavaType> jf = i.next();
+ String name = jf.getName();
+ JavaType type = jf.getType();
+ type.genDecl(cb, name);
+ }
+ cb.append("public "+name+"() { }\n");
+
+
+ cb.append("public "+name+"(\n");
+ int fIdx = 0;
+ for (Iterator<JField<JavaType>> i = fields.iterator(); i.hasNext(); fIdx++) {
+ JField<JavaType> jf = i.next();
+ String name = jf.getName();
+ JavaType type = jf.getType();
+ type.genConstructorParam(cb, name);
+ cb.append((!i.hasNext())?"":",\n");
+ }
+ cb.append(") {\n");
+ fIdx = 0;
+ for (Iterator<JField<JavaType>> i = fields.iterator(); i.hasNext(); fIdx++) {
+ JField<JavaType> jf = i.next();
+ String name = jf.getName();
+ JavaType type = jf.getType();
+ type.genConstructorSet(cb, name);
+ }
+ cb.append("}\n");
+ for (Iterator<JField<JavaType>> i = fields.iterator(); i.hasNext();) {
+ JField<JavaType> jf = i.next();
+ String name = jf.getName();
+ JavaType type = jf.getType();
+ type.genGetSet(cb, name);
+ }
+ cb.append("public void serialize("+
+ "final org.apache.hadoop.record.OutputArchive a_, final String tag)\n"+
+ "throws java.io.IOException {\n");
+ cb.append("a_.startRecord(this,tag);\n");
+ for (Iterator<JField<JavaType>> i = fields.iterator(); i.hasNext();) {
+ JField<JavaType> jf = i.next();
+ String name = jf.getName();
+ JavaType type = jf.getType();
+ type.genWriteMethod(cb, name, name);
+ }
+ cb.append("a_.endRecord(this,tag);\n");
+ cb.append("}\n");
+
+ cb.append("public void deserialize("+
+ "final org.apache.hadoop.record.InputArchive a_, final String tag)\n"+
+ "throws java.io.IOException {\n");
+ cb.append("a_.startRecord(tag);\n");
+ for (Iterator<JField<JavaType>> i = fields.iterator(); i.hasNext();) {
+ JField<JavaType> jf = i.next();
+ String name = jf.getName();
+ JavaType type = jf.getType();
+ type.genReadMethod(cb, name, name, false);
+ }
+ cb.append("a_.endRecord(tag);\n");
+ cb.append("}\n");
+
+ cb.append("public String toString() {\n");
+ cb.append("try {\n");
+ cb.append("java.io.ByteArrayOutputStream s =\n");
+ cb.append(" new java.io.ByteArrayOutputStream();\n");
+ cb.append("org.apache.hadoop.record.CsvOutputArchive a_ = \n");
+ cb.append(" new org.apache.hadoop.record.CsvOutputArchive(s);\n");
+ cb.append("this.serialize(a_,\"\");\n");
+ cb.append("return new String(s.toByteArray(), \"UTF-8\");\n");
+ cb.append("} catch (Throwable ex) {\n");
+ cb.append("throw new RuntimeException(ex);\n");
+ cb.append("}\n");
+ cb.append("}\n");
+
+ cb.append("public void write(final java.io.DataOutput out)\n"+
+ "throws java.io.IOException {\n");
+ cb.append("org.apache.hadoop.record.BinaryOutputArchive archive =\n"+
+ "new org.apache.hadoop.record.BinaryOutputArchive(out);\n");
+ cb.append("this.serialize(archive, \"\");\n");
+ cb.append("}\n");
+
+ cb.append("public void readFields(final java.io.DataInput in)\n"+
+ "throws java.io.IOException {\n");
+ cb.append("org.apache.hadoop.record.BinaryInputArchive archive =\n"+
+ "new org.apache.hadoop.record.BinaryInputArchive(in);\n");
+ cb.append("this.deserialize(archive, \"\");\n");
+ cb.append("}\n");
+ cb.append("public int compareTo (final Object peer_) throws ClassCastException {\n");
+ cb.append("if (!(peer_ instanceof "+name+")) {\n");
+ cb.append("throw new ClassCastException(\"Comparing different types of records.\");\n");
+ cb.append("}\n");
+ cb.append(name+" peer = ("+name+") peer_;\n");
+ cb.append("int ret = 0;\n");
+ for (Iterator<JField<JavaType>> i = fields.iterator(); i.hasNext();) {
+ JField<JavaType> jf = i.next();
+ String name = jf.getName();
+ JavaType type = jf.getType();
+ type.genCompareTo(cb, name, "peer."+name);
+ cb.append("if (ret != 0) return ret;\n");
+ }
+ cb.append("return ret;\n");
+ cb.append("}\n");
+
+ cb.append("public boolean equals(final Object peer_) {\n");
+ cb.append("if (!(peer_ instanceof "+name+")) {\n");
+ cb.append("return false;\n");
+ cb.append("}\n");
+ cb.append("if (peer_ == this) {\n");
+ cb.append("return true;\n");
+ cb.append("}\n");
+ cb.append(name+" peer = ("+name+") peer_;\n");
+ cb.append("boolean ret = false;\n");
+ for (Iterator<JField<JavaType>> i = fields.iterator(); i.hasNext();) {
+ JField<JavaType> jf = i.next();
+ String name = jf.getName();
+ JavaType type = jf.getType();
+ type.genEquals(cb, name, "peer."+name);
+ cb.append("if (!ret) return ret;\n");
+ }
+ cb.append("return ret;\n");
+ cb.append("}\n");
+
+ cb.append("public Object clone() throws CloneNotSupportedException {\n");
+ cb.append(name+" other = new "+name+"();\n");
+ for (Iterator<JField<JavaType>> i = fields.iterator(); i.hasNext();) {
+ JField<JavaType> jf = i.next();
+ String name = jf.getName();
+ JavaType type = jf.getType();
+ type.genClone(cb, name);
+ }
+ cb.append("return other;\n");
+ cb.append("}\n");
+
+ cb.append("public int hashCode() {\n");
+ cb.append("int result = 17;\n");
+ cb.append("int ret;\n");
+ for (Iterator<JField<JavaType>> i = fields.iterator(); i.hasNext();) {
+ JField<JavaType> jf = i.next();
+ String name = jf.getName();
+ JavaType type = jf.getType();
+ type.genHashCode(cb, name);
+ cb.append("result = 37*result + ret;\n");
+ }
+ cb.append("return result;\n");
+ cb.append("}\n");
+
+ cb.append("public static String signature() {\n");
+ cb.append("return \""+getSignature()+"\";\n");
+ cb.append("}\n");
+
+ cb.append("public static class Comparator extends"+
+ " org.apache.hadoop.io.WritableComparator {\n");
+ cb.append("public Comparator() {\n");
+ cb.append("super("+name+".class);\n");
+ cb.append("}\n");
+
+ cb.append("static public int slurpRaw(byte[] b, int s, int l) {\n");
+ cb.append("try {\n");
+ cb.append("int os = s;\n");
+ for (Iterator<JField<JavaType>> i = fields.iterator(); i.hasNext();) {
+ JField<JavaType> jf = i.next();
+ String name = jf.getName();
+ JavaType type = jf.getType();
+ type.genSlurpBytes(cb, "b","s","l");
+ }
+ cb.append("return (os - s);\n");
+ cb.append("} catch(java.io.IOException e) {\n");
+ cb.append("throw new RuntimeException(e);\n");
+ cb.append("}\n");
+ cb.append("}\n");
+
+ cb.append("static public int compareRaw(byte[] b1, int s1, int l1,\n");
+ cb.append(" byte[] b2, int s2, int l2) {\n");
+ cb.append("try {\n");
+ cb.append("int os1 = s1;\n");
+ for (Iterator<JField<JavaType>> i = fields.iterator(); i.hasNext();) {
+ JField<JavaType> jf = i.next();
+ String name = jf.getName();
+ JavaType type = jf.getType();
+ type.genCompareBytes(cb);
+ }
+ cb.append("return (os1 - s1);\n");
+ cb.append("} catch(java.io.IOException e) {\n");
+ cb.append("throw new RuntimeException(e);\n");
+ cb.append("}\n");
+ cb.append("}\n");
+ cb.append("public int compare(byte[] b1, int s1, int l1,\n");
+ cb.append(" byte[] b2, int s2, int l2) {\n");
+ cb.append("int ret = compareRaw(b1,s1,l1,b2,s2,l2);\n");
+ cb.append("return (ret == -1)? -1 : ((ret==0)? 1 : 0);");
+ cb.append("}\n");
+ cb.append("}\n\n");
+ cb.append("static {\n");
+ cb.append("org.apache.hadoop.io.WritableComparator.define("
+ +name+".class, new Comparator());\n");
+ cb.append("}\n");
+ cb.append("}\n");
-
- jj.write("}\n");
-
- jj.close();
+ jj.write(cb.toString());
+ jj.close();
}
+ }
+
+ class CppRecord extends CppCompType {
+
+ private String fullName;
+ private String name;
+ private String module;
+ private ArrayList<JField<CppType>> fields =
+ new ArrayList<JField<CppType>>();
+
+ CppRecord(String name, ArrayList<JField<JType>> flist) {
+ super(name.replaceAll("\\.","::"));
+ this.fullName = name.replaceAll("\\.", "::");
+ int idx = name.lastIndexOf('.');
+ this.name = name.substring(idx+1);
+ this.module = name.substring(0, idx).replaceAll("\\.", "::");
+ for (Iterator<JField<JType>> iter = flist.iterator(); iter.hasNext();) {
+ JField<JType> f = iter.next();
+ fields.add(new JField<CppType>(f.getName(), f.getType().getCppType()));
+ }
+ }
+
+ String genDecl(String fname) {
+ return " "+name+" "+fname+";\n";
+ }
+
+ void genCode(FileWriter hh, FileWriter cc, ArrayList<String> options)
+ throws IOException {
+ CodeBuffer hb = new CodeBuffer();
+
+ String[] ns = module.split("::");
+ for (int i = 0; i < ns.length; i++) {
+ hb.append("namespace "+ns[i]+" {\n");
+ }
+
+ hb.append("class "+name+" : public ::hadoop::Record {\n");
+ hb.append("private:\n");
+
+ for (Iterator<JField<CppType>> i = fields.iterator(); i.hasNext();) {
+ JField<CppType> jf = i.next();
+ String name = jf.getName();
+ CppType type = jf.getType();
+ type.genDecl(hb, name);
+ }
+ hb.append("public:\n");
+ hb.append("virtual void serialize(::hadoop::OArchive& a_, const char* tag) const;\n");
+ hb.append("virtual void deserialize(::hadoop::IArchive& a_, const char* tag);\n");
+ hb.append("virtual const ::std::string& type() const;\n");
+ hb.append("virtual const ::std::string& signature() const;\n");
+ hb.append("virtual bool operator<(const "+name+"& peer_) const;\n");
+ hb.append("virtual bool operator==(const "+name+"& peer_) const;\n");
+ hb.append("virtual ~"+name+"() {};\n");
+ for (Iterator<JField<CppType>> i = fields.iterator(); i.hasNext();) {
+ JField<CppType> jf = i.next();
+ String name = jf.getName();
+ CppType type = jf.getType();
+ type.genGetSet(hb, name);
+ }
+ hb.append("}; // end record "+name+"\n");
+ for (int i=ns.length-1; i>=0; i--) {
+ hb.append("} // end namespace "+ns[i]+"\n");
+ }
+
+ hh.write(hb.toString());
+
+ CodeBuffer cb = new CodeBuffer();
+
+ cb.append("void "+fullName+"::serialize(::hadoop::OArchive& a_, const char* tag) const {\n");
+ cb.append("a_.startRecord(*this,tag);\n");
+ for (Iterator<JField<CppType>> i = fields.iterator(); i.hasNext();) {
+ JField<CppType> jf = i.next();
+ String name = jf.getName();
+ CppType type = jf.getType();
+ if (type instanceof JBuffer.CppBuffer) {
+ cb.append("a_.serialize("+name+","+name+".length(),\""+name+"\");\n");
+ } else {
+ cb.append("a_.serialize("+name+",\""+name+"\");\n");
+ }
+ }
+ cb.append("a_.endRecord(*this,tag);\n");
+ cb.append("return;\n");
+ cb.append("}\n");
+
+ cb.append("void "+fullName+"::deserialize(::hadoop::IArchive& a_, const char* tag) {\n");
+ cb.append("a_.startRecord(*this,tag);\n");
+ for (Iterator<JField<CppType>> i = fields.iterator(); i.hasNext();) {
+ JField<CppType> jf = i.next();
+ String name = jf.getName();
+ CppType type = jf.getType();
+ if (type instanceof JBuffer.CppBuffer) {
+ cb.append("{\nsize_t len=0; a_.deserialize("+name+",len,\""+name+"\");\n}\n");
+ } else {
+ cb.append("a_.deserialize("+name+",\""+name+"\");\n");
+ }
+ }
+ cb.append("a_.endRecord(*this,tag);\n");
+ cb.append("return;\n");
+ cb.append("}\n");
+
+
+ cb.append("bool "+fullName+"::operator< (const "+fullName+"& peer_) const {\n");
+ cb.append("return (1\n");
+ for (Iterator<JField<CppType>> i = fields.iterator(); i.hasNext();) {
+ JField<CppType> jf = i.next();
+ String name = jf.getName();
+ cb.append("&& ("+name+" < peer_."+name+")\n");
+ }
+ cb.append(");\n");
+ cb.append("}\n");
+
+ cb.append("bool "+fullName+"::operator== (const "+fullName+"& peer_) const {\n");
+ cb.append("return (1\n");
+ for (Iterator<JField<CppType>> i = fields.iterator(); i.hasNext();) {
+ JField<CppType> jf = i.next();
+ String name = jf.getName();
+ cb.append("&& ("+name+" == peer_."+name+")\n");
+ }
+ cb.append(");\n");
+ cb.append("}\n");
+
+ cb.append("const ::std::string&"+fullName+"::type() const {\n");
+ cb.append("static const ::std::string type_(\""+name+"\");\n");
+ cb.append("return type_;\n");
+ cb.append("}\n");
+
+ cb.append("const ::std::string&"+fullName+"::signature() const {\n");
+ cb.append("static const ::std::string sig_(\""+getSignature()+"\");\n");
+ cb.append("return sig_;\n");
+ cb.append("}\n");
+
+ cc.write(cb.toString());
+ }
+ }
+
+ class CRecord extends CCompType {
+
+ }
+
+ private String signature;
+
+ /**
+ * Creates a new instance of JRecord
+ */
+ public JRecord(String name, ArrayList<JField<JType>> flist) {
+ setJavaType(new JavaRecord(name, flist));
+ setCppType(new CppRecord(name, flist));
+ setCType(new CRecord());
+ // precompute signature
+ int idx = name.lastIndexOf('.');
+ String recName = name.substring(idx+1);
+ StringBuffer sb = new StringBuffer();
+ sb.append("L").append(recName).append("(");
+ for (Iterator<JField<JType>> i = flist.iterator(); i.hasNext();) {
+ String s = i.next().getType().getSignature();
+ sb.append(s);
+ }
+ sb.append(")");
+ signature = sb.toString();
+ }
+
+ String getSignature() {
+ return signature;
+ }
+
+ void genCppCode(FileWriter hh, FileWriter cc, ArrayList<String> options)
+ throws IOException {
+ ((CppRecord)getCppType()).genCode(hh,cc, options);
+ }
+
+ void genJavaCode(String destDir, ArrayList<String> options)
+ throws IOException {
+ ((JavaRecord)getJavaType()).genCode(destDir, options);
+ }
}
Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/record/compiler/JString.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/record/compiler/JString.java?view=diff&rev=513122&r1=513121&r2=513122
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/record/compiler/JString.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/record/compiler/JString.java Wed Feb 28 19:47:27 2007
@@ -18,55 +18,54 @@
package org.apache.hadoop.record.compiler;
+import org.apache.hadoop.record.compiler.JCompType.CCompType;
+import org.apache.hadoop.record.compiler.JCompType.CppCompType;
+
/**
*
* @author Milind Bhandarkar
*/
public class JString extends JCompType {
- /** Creates a new instance of JString */
- public JString() {
- super(" ::std::string", "Text", "String", "Text");
- }
+ class JavaString extends JavaCompType {
- public String getSignature() {
- return "s";
+ JavaString() {
+ super("String", "String", "String");
}
- public String genJavaReadWrapper(String fname, String tag, boolean decl) {
- String ret = "";
- if (decl) {
- ret = " Text "+fname+";\n";
- }
- return ret + " "+fname+"=a_.readString(\""+tag+"\");\n";
+ void genSlurpBytes(CodeBuffer cb, String b, String s, String l) {
+ cb.append("{\n");
+ cb.append("int i = org.apache.hadoop.record.Utils.readVInt("+b+", "+s+");\n");
+ cb.append("int z = org.apache.hadoop.record.Utils.getVIntSize(i);\n");
+ cb.append(s+"+=(z+i); "+l+"-= (z+i);\n");
+ cb.append("}\n");
}
- public String genJavaWriteWrapper(String fname, String tag) {
- return " a_.writeString("+fname+",\""+tag+"\");\n";
+ void genCompareBytes(CodeBuffer cb) {
+ cb.append("{\n");
+ cb.append("int i1 = org.apache.hadoop.record.Utils.readVInt(b1, s1);\n");
+ cb.append("int i2 = org.apache.hadoop.record.Utils.readVInt(b2, s2);\n");
+ cb.append("int z1 = org.apache.hadoop.record.Utils.getVIntSize(i1);\n");
+ cb.append("int z2 = org.apache.hadoop.record.Utils.getVIntSize(i2);\n");
+ cb.append("s1+=z1; s2+=z2; l1-=z1; l2-=z2;\n");
+ cb.append("int r1 = org.apache.hadoop.record.Utils.compareBytes(b1,s1,l1,b2,s2,l2);\n");
+ cb.append("if (r1 != 0) { return (r1<0)?-1:0; }\n");
+ cb.append("s1+=i1; s2+=i2; l1-=i1; l1-=i2;\n");
+ cb.append("}\n");
}
- public String genJavaSlurpBytes(String b, String s, String l) {
- StringBuffer sb = new StringBuffer();
- sb.append(" {\n");
- sb.append(" int i = WritableComparator.readVInt("+b+", "+s+");\n");
- sb.append(" int z = WritableUtils.getVIntSize(i);\n");
- sb.append(" "+s+"+=(z+i); "+l+"-= (z+i);\n");
- sb.append(" }\n");
- return sb.toString();
+ void genClone(CodeBuffer cb, String fname) {
+ cb.append("other."+fname+" = this."+fname+";\n");
+ }
+ }
+ /** Creates a new instance of JString */
+ public JString() {
+ setJavaType(new JavaString());
+ setCppType(new CppCompType(" ::std::string"));
+ setCType(new CCompType());
}
- public String genJavaCompareBytes() {
- StringBuffer sb = new StringBuffer();
- sb.append(" {\n");
- sb.append(" int i1 = WritableComparator.readVInt(b1, s1);\n");
- sb.append(" int i2 = WritableComparator.readVInt(b2, s2);\n");
- sb.append(" int z1 = WritableUtils.getVIntSize(i1);\n");
- sb.append(" int z2 = WritableUtils.getVIntSize(i2);\n");
- sb.append(" s1+=z1; s2+=z2; l1-=z1; l2-=z2;\n");
- sb.append(" int r1 = WritableComparator.compareBytes(b1,s1,l1,b2,s2,l2);\n");
- sb.append(" if (r1 != 0) { return (r1<0)?-1:0; }\n");
- sb.append(" s1+=i1; s2+=i2; l1-=i1; l1-=i2;\n");
- sb.append(" }\n");
- return sb.toString();
+ String getSignature() {
+ return "s";
}
}
Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/record/compiler/JType.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/record/compiler/JType.java?view=diff&rev=513122&r1=513121&r2=513122
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/record/compiler/JType.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/record/compiler/JType.java Wed Feb 28 19:47:27 2007
@@ -20,129 +20,154 @@
/**
* Abstract Base class for all types supported by Hadoop Record I/O.
- *
+ *
* @author Milind Bhandarkar
*/
abstract public class JType {
-
- private String mCppName;
- private String mJavaName;
- private String mMethodSuffix;
- private String mWrapper;
- private String mUnwrapMethod;
-
- /**
- * Creates a new instance of JType
- */
- JType(String cppname, String javaname, String suffix, String wrapper, String unwrap) {
- mCppName = cppname;
- mJavaName = javaname;
- mMethodSuffix = suffix;
- mWrapper = wrapper;
- mUnwrapMethod = unwrap;
- }
-
- abstract String getSignature();
-
- String genCppDecl(String fname) {
- return " "+mCppName+" m"+fname+";\n";
+
+ static String toCamelCase(String name) {
+ char firstChar = name.charAt(0);
+ if (Character.isLowerCase(firstChar)) {
+ return ""+Character.toUpperCase(firstChar) + name.substring(1);
+ }
+ return name;
+ }
+
+ JavaType javaType;
+ CppType cppType;
+ CType cType;
+
+ abstract class JavaType {
+ private String name;
+ private String methodSuffix;
+ private String wrapper;
+
+ JavaType(String javaname,
+ String suffix,
+ String wrapper) {
+ this.name = javaname;
+ this.methodSuffix = suffix;
+ this.wrapper = wrapper;
+ }
+
+ void genDecl(CodeBuffer cb, String fname) {
+ cb.append("private "+name+" "+fname+";\n");
+ }
+
+ void genConstructorParam(CodeBuffer cb, String fname) {
+ cb.append("final "+name+" "+fname);
+ }
+
+ void genGetSet(CodeBuffer cb, String fname) {
+ cb.append("public "+name+" get"+toCamelCase(fname)+"() {\n");
+ cb.append("return "+fname+";\n");
+ cb.append("}\n");
+ cb.append("public void set"+toCamelCase(fname)+"(final "+name+" "+fname+") {\n");
+ cb.append("this."+fname+"="+fname+";\n");
+ cb.append("}\n");
}
- String genJavaDecl (String fname) {
- return " private "+mJavaName+" m"+fname+";\n";
+ String getType() {
+ return name;
}
- String genJavaConstructorParam (int fIdx) {
- return " "+mJavaName+" m"+fIdx;
+ String getWrapperType() {
+ return wrapper;
}
- String genCppGetSet(String fname, int fIdx) {
- String getFunc = " virtual "+mCppName+" get"+fname+"() const {\n";
- getFunc += " return m"+fname+";\n";
- getFunc += " }\n";
- String setFunc = " virtual void set"+fname+"("+mCppName+" m_) {\n";
- setFunc += " m"+fname+"=m_;\n";
- setFunc += " }\n";
- return getFunc+setFunc;
+ String getMethodSuffix() {
+ return methodSuffix;
}
- String genJavaGetSet(String fname, int fIdx) {
- String getFunc = " public "+mJavaName+" get"+fname+"() {\n";
- getFunc += " return m"+fname+";\n";
- getFunc += " }\n";
- String setFunc = " public void set"+fname+"("+mJavaName+" m_) {\n";
- setFunc += " m"+fname+"=m_;\n";
- setFunc += " }\n";
- return getFunc+setFunc;
+ void genWriteMethod(CodeBuffer cb, String fname, String tag) {
+ cb.append("a_.write"+methodSuffix+"("+fname+",\""+tag+"\");\n");
}
- String getCppType() {
- return mCppName;
+ void genReadMethod(CodeBuffer cb, String fname, String tag, boolean decl) {
+ if (decl) {
+ cb.append(name+" "+fname+";\n");
+ }
+ cb.append(fname+"=a_.read"+methodSuffix+"(\""+tag+"\");\n");
}
- String getJavaType() {
- return mJavaName;
- }
-
- String getJavaWrapperType() {
- return mWrapper;
+ void genCompareTo(CodeBuffer cb, String fname, String other) {
+ cb.append("ret = ("+fname+" == "+other+")? 0 :(("+fname+"<"+other+
+ ")?-1:1);\n");
}
- String getMethodSuffix() {
- return mMethodSuffix;
- }
+ abstract void genCompareBytes(CodeBuffer cb);
- String genJavaWriteMethod(String fname, String tag) {
- return " a_.write"+mMethodSuffix+"("+fname+",\""+tag+"\");\n";
- }
+ abstract void genSlurpBytes(CodeBuffer cb, String b, String s, String l);
- String genJavaReadMethod(String fname, String tag) {
- return " "+fname+"=a_.read"+mMethodSuffix+"(\""+tag+"\");\n";
+ void genEquals(CodeBuffer cb, String fname, String peer) {
+ cb.append("ret = ("+fname+"=="+peer+");\n");
}
- String genJavaReadWrapper(String fname, String tag, boolean decl) {
- String ret = "";
- if (decl) {
- ret = " "+mWrapper+" "+fname+";\n";
- }
- return ret + " "+fname+"=new "+mWrapper+"(a_.read"+mMethodSuffix+"(\""+tag+"\"));\n";
+ void genHashCode(CodeBuffer cb, String fname) {
+ cb.append("ret = (int)"+fname+";\n");
}
- String genJavaWriteWrapper(String fname, String tag) {
- return " a_.write"+mMethodSuffix+"("+fname+"."+mUnwrapMethod+"(),\""+tag+"\");\n";
+ void genConstructorSet(CodeBuffer cb, String fname) {
+ cb.append("this."+fname+" = "+fname+";\n");
}
- String genJavaCompareToWrapper(String fname, String other) {
- StringBuffer sb = new StringBuffer();
- sb.append(" {\n");
- sb.append(" "+mJavaName+" ee1 = ("+fname+"."+mUnwrapMethod+"();\n");
- sb.append(" "+mJavaName+" ee2 = ("+other+"."+mUnwrapMethod+"();\n");
- sb.append(" ret = (ee1 == ee2)? 0 :((ee1<ee2)?-1:1);\n");
- sb.append(" }\n");
- return sb.toString();
+ void genClone(CodeBuffer cb, String fname) {
+ cb.append("other."+fname+" = this."+fname+";\n");
}
+ }
+
+ class CppType {
+ private String name;
- String genJavaCompareTo(String fname, String other) {
- return " ret = ("+fname+" == "+other+")? 0 :(("+fname+"<"+other+")?-1:1);\n";
+ CppType(String cppname) {
+ name = cppname;
}
- String genJavaCompareBytes() {
- return " // throw new IOException(\"Not Implemented yet!\");\n";
+ void genDecl(CodeBuffer cb, String fname) {
+ cb.append(name+" "+fname+";\n");
}
- String genJavaSlurpBytes(String b, String s, String l) {
- return " // throw new IOException(\"Not Implemented yet!\");\n";
+ void genGetSet(CodeBuffer cb, String fname) {
+ cb.append("virtual "+name+" get"+toCamelCase(fname)+"() const {\n");
+ cb.append("return "+fname+";\n");
+ cb.append("}\n");
+ cb.append("virtual void set"+toCamelCase(fname)+"("+name+" m_) {\n");
+ cb.append(fname+"=m_;\n");
+ cb.append("}\n");
}
- String genJavaEquals(String fname, String peer) {
- return " ret = ("+fname+"=="+peer+");\n";
+ String getType() {
+ return name;
}
+ }
+
+ class CType {
- String genJavaHashCode(String fname) {
- return " ret = (int)"+fname+";\n";
- }
-
- String genJavaConstructorSet(String fname, int fIdx) {
- return " m"+fname+"=m"+fIdx+";\n";
- }
+ }
+
+ abstract String getSignature();
+
+ void setJavaType(JavaType jType) {
+ this.javaType = jType;
+ }
+
+ JavaType getJavaType() {
+ return javaType;
+ }
+
+ void setCppType(CppType cppType) {
+ this.cppType = cppType;
+ }
+
+ CppType getCppType() {
+ return cppType;
+ }
+
+ void setCType(CType cType) {
+ this.cType = cType;
+ }
+
+ CType getCType() {
+ return cType;
+ }
}
Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/record/compiler/JVector.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/record/compiler/JVector.java?view=diff&rev=513122&r1=513121&r2=513122
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/record/compiler/JVector.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/record/compiler/JVector.java Wed Feb 28 19:47:27 2007
@@ -18,141 +18,136 @@
package org.apache.hadoop.record.compiler;
+import org.apache.hadoop.record.compiler.JCompType.CCompType;
+import org.apache.hadoop.record.compiler.JCompType.CppCompType;
+
/**
*
* @author Milind Bhandarkar
*/
public class JVector extends JCompType {
+
+ static private int level = 0;
+
+ static private String getId(String id) { return id+getLevel(); }
+
+ static private String getLevel() { return Integer.toString(level); }
+
+ static private void incrLevel() { level++; }
+
+ static private void decrLevel() { level--; }
+
+ private JType type;
+
+ class JavaVector extends JavaCompType {
+
+ private JType.JavaType element;
+
+ JavaVector(JType.JavaType t) {
+ super("java.util.ArrayList<"+t.getWrapperType()+">",
+ "Vector", "java.util.ArrayList<"+t.getWrapperType()+">");
+ element = t;
+ }
+
+ void genCompareTo(CodeBuffer cb, String fname, String other) {
+ cb.append("{\n");
+ cb.append("int "+getId("len1")+" = "+fname+".size();\n");
+ cb.append("int "+getId("len2")+" = "+other+".size();\n");
+ cb.append("for(int "+getId("vidx")+" = 0; "+getId("vidx")+"<"+
+ getId("len1")+" && "+getId("vidx")+"<"+getId("len2")+"; "+
+ getId("vidx")+"++) {\n");
+ cb.append(element.getType()+" "+getId("e1")+
+ " = "+fname+
+ ".get("+getId("vidx")+");\n");
+ cb.append(element.getType()+" "+getId("e2")+
+ " = "+other+
+ ".get("+getId("vidx")+");\n");
+ element.genCompareTo(cb, getId("e1"), getId("e2"));
+ cb.append("if (ret != 0) { return ret; }\n");
+ cb.append("}\n");
+ cb.append("ret = ("+getId("len1")+" - "+getId("len2")+");\n");
+ cb.append("}\n");
+ }
- static private int level = 0;
-
- static private String getId(String id) { return id+getLevel(); }
-
- static private String getLevel() { return Integer.toString(level); }
-
- static private void incrLevel() { level++; }
-
- static private void decrLevel() { level--; }
-
- private JType mElement;
-
- /** Creates a new instance of JVector */
- public JVector(JType t) {
- super(" ::std::vector<"+t.getCppType()+">", "java.util.ArrayList", "Vector", "java.util.ArrayList");
- mElement = t;
+ void genReadMethod(CodeBuffer cb, String fname, String tag, boolean decl) {
+ if (decl) {
+ cb.append(getType()+" "+fname+";\n");
+ }
+ cb.append("{\n");
+ incrLevel();
+ cb.append("org.apache.hadoop.record.Index "+getId("vidx")+" = a_.startVector(\""+tag+"\");\n");
+ cb.append(fname+"=new "+getType()+"();\n");
+ cb.append("for (; !"+getId("vidx")+".done(); "+getId("vidx")+".incr()) {\n");
+ element.genReadMethod(cb, getId("e"), getId("e"), true);
+ cb.append(fname+".add("+getId("e")+");\n");
+ cb.append("}\n");
+ cb.append("a_.endVector(\""+tag+"\");\n");
+ decrLevel();
+ cb.append("}\n");
}
- public String getSignature() {
- return "[" + mElement.getSignature() + "]";
+ void genWriteMethod(CodeBuffer cb, String fname, String tag) {
+ cb.append("{\n");
+ incrLevel();
+ cb.append("a_.startVector("+fname+",\""+tag+"\");\n");
+ cb.append("int "+getId("len")+" = "+fname+".size();\n");
+ cb.append("for(int "+getId("vidx")+" = 0; "+getId("vidx")+"<"+getId("len")+"; "+getId("vidx")+"++) {\n");
+ cb.append(element.getType()+" "+getId("e")+" = "+fname+".get("+getId("vidx")+");\n");
+ element.genWriteMethod(cb, getId("e"), getId("e"));
+ cb.append("}\n");
+ cb.append("a_.endVector("+fname+",\""+tag+"\");\n");
+ cb.append("}\n");
+ decrLevel();
}
- public String genJavaCompareTo(String fname, String other) {
- StringBuffer sb = new StringBuffer();
- sb.append(" {\n");
- sb.append(" int "+getId("len1")+" = "+fname+".size();\n");
- sb.append(" int "+getId("len2")+" = "+other+".size();\n");
- sb.append(" for(int "+getId("vidx")+" = 0; "+getId("vidx")+"<"+
- getId("len1")+" && "+getId("vidx")+"<"+getId("len2")+"; "+
- getId("vidx")+"++) {\n");
- sb.append(" "+mElement.getJavaWrapperType()+" "+getId("e1")+
- " = ("+mElement.getJavaWrapperType()+") "+fname+
- ".get("+getId("vidx")+");\n");
- sb.append(" "+mElement.getJavaWrapperType()+" "+getId("e2")+
- " = ("+mElement.getJavaWrapperType()+") "+other+
- ".get("+getId("vidx")+");\n");
- sb.append(mElement.genJavaCompareToWrapper(getId("e1"), getId("e2")));
- sb.append(" if (ret != 0) { return ret; }\n");
- sb.append(" }\n");
- sb.append(" ret = ("+getId("len1")+" - "+getId("len2")+");\n");
- sb.append(" }\n");
- return sb.toString();
- }
-
- public String genJavaCompareToWrapper(String fname, String other) {
- return genJavaCompareTo(fname, other);
- }
-
- public String genJavaReadWrapper(String fname, String tag, boolean decl) {
- StringBuffer ret = new StringBuffer("");
- if (decl) {
- ret.append(" java.util.ArrayList "+fname+";\n");
- }
- ret.append(" {\n");
- incrLevel();
- ret.append(" org.apache.hadoop.record.Index "+getId("vidx")+" = a_.startVector(\""+tag+"\");\n");
- ret.append(" "+fname+"=new java.util.ArrayList();\n");
- ret.append(" for (; !"+getId("vidx")+".done(); "+getId("vidx")+".incr()) {\n");
- ret.append(mElement.genJavaReadWrapper(getId("e"), getId("e"), true));
- ret.append(" "+fname+".add("+getId("e")+");\n");
- ret.append(" }\n");
- ret.append(" a_.endVector(\""+tag+"\");\n");
- decrLevel();
- ret.append(" }\n");
- return ret.toString();
- }
-
- public String genJavaReadMethod(String fname, String tag) {
- return genJavaReadWrapper(fname, tag, false);
- }
-
- public String genJavaWriteWrapper(String fname, String tag) {
- StringBuffer ret = new StringBuffer(" {\n");
- incrLevel();
- ret.append(" a_.startVector("+fname+",\""+tag+"\");\n");
- ret.append(" int "+getId("len")+" = "+fname+".size();\n");
- ret.append(" for(int "+getId("vidx")+" = 0; "+getId("vidx")+"<"+getId("len")+"; "+getId("vidx")+"++) {\n");
- ret.append(" "+mElement.getJavaWrapperType()+" "+getId("e")+" = ("+mElement.getJavaWrapperType()+") "+fname+".get("+getId("vidx")+");\n");
- ret.append(mElement.genJavaWriteWrapper(getId("e"), getId("e")));
- ret.append(" }\n");
- ret.append(" a_.endVector("+fname+",\""+tag+"\");\n");
- ret.append(" }\n");
- decrLevel();
- return ret.toString();
- }
-
- public String genJavaWriteMethod(String fname, String tag) {
- return genJavaWriteWrapper(fname, tag);
- }
-
- public String genJavaSlurpBytes(String b, String s, String l) {
- StringBuffer sb = new StringBuffer();
- sb.append(" {\n");
+ void genSlurpBytes(CodeBuffer cb, String b, String s, String l) {
+ cb.append("{\n");
incrLevel();
- sb.append(" int "+getId("vi")+
- " = WritableComparator.readVInt("+b+", "+s+");\n");
- sb.append(" int "+getId("vz")+
- " = WritableUtils.getVIntSize("+getId("vi")+");\n");
- sb.append(" "+s+"+="+getId("vz")+"; "+l+"-="+getId("vz")+";\n");
- sb.append(" for (int "+getId("vidx")+" = 0; "+getId("vidx")+
+ cb.append("int "+getId("vi")+
+ " = org.apache.hadoop.record.Utils.readVInt("+b+", "+s+");\n");
+ cb.append("int "+getId("vz")+
+ " = org.apache.hadoop.record.Utils.getVIntSize("+getId("vi")+");\n");
+ cb.append(s+"+="+getId("vz")+"; "+l+"-="+getId("vz")+";\n");
+ cb.append("for (int "+getId("vidx")+" = 0; "+getId("vidx")+
" < "+getId("vi")+"; "+getId("vidx")+"++)");
- sb.append(mElement.genJavaSlurpBytes(b,s,l));
+ element.genSlurpBytes(cb, b,s,l);
decrLevel();
- sb.append(" }\n");
- return sb.toString();
+ cb.append("}\n");
}
- public String genJavaCompareBytes() {
- StringBuffer sb = new StringBuffer();
- sb.append(" {\n");
+ void genCompareBytes(CodeBuffer cb) {
+ cb.append("{\n");
incrLevel();
- sb.append(" int "+getId("vi1")+
- " = WritableComparator.readVInt(b1, s1);\n");
- sb.append(" int "+getId("vi2")+
- " = WritableComparator.readVInt(b2, s2);\n");
- sb.append(" int "+getId("vz1")+
- " = WritableUtils.getVIntSize("+getId("vi1")+");\n");
- sb.append(" int "+getId("vz2")+
- " = WritableUtils.getVIntSize("+getId("vi2")+");\n");
- sb.append(" s1+="+getId("vz1")+"; s2+="+getId("vz2")+
+ cb.append("int "+getId("vi1")+
+ " = org.apache.hadoop.record.Utils.readVInt(b1, s1);\n");
+ cb.append("int "+getId("vi2")+
+ " = org.apache.hadoop.record.Utils.readVInt(b2, s2);\n");
+ cb.append("int "+getId("vz1")+
+ " = org.apache.hadoop.record.Utils.getVIntSize("+getId("vi1")+");\n");
+ cb.append("int "+getId("vz2")+
+ " = org.apache.hadoop.record.Utils.getVIntSize("+getId("vi2")+");\n");
+ cb.append("s1+="+getId("vz1")+"; s2+="+getId("vz2")+
"; l1-="+getId("vz1")+"; l2-="+getId("vz2")+";\n");
- sb.append(" for (int "+getId("vidx")+" = 0; "+getId("vidx")+
+ cb.append("for (int "+getId("vidx")+" = 0; "+getId("vidx")+
" < "+getId("vi1")+" && "+getId("vidx")+" < "+getId("vi2")+
"; "+getId("vidx")+"++)");
- sb.append(mElement.genJavaCompareBytes());
- sb.append(" if ("+getId("vi1")+" != "+getId("vi2")+
+ element.genCompareBytes(cb);
+ cb.append("if ("+getId("vi1")+" != "+getId("vi2")+
") { return ("+getId("vi1")+"<"+getId("vi2")+")?-1:0; }\n");
decrLevel();
- sb.append(" }\n");
- return sb.toString();
+ cb.append("}\n");
}
+ }
+
+ /** Creates a new instance of JVector */
+ public JVector(JType t) {
+ type = t;
+ setJavaType(new JavaVector(t.getJavaType()));
+ setCppType(new CppCompType(" ::std::vector<"+t.getCppType().getType()+">"));
+ setCType(new CCompType());
+ }
+
+ String getSignature() {
+ return "[" + type.getSignature() + "]";
+ }
}
Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/record/compiler/JavaGenerator.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/record/compiler/JavaGenerator.java?view=diff&rev=513122&r1=513121&r2=513122
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/record/compiler/JavaGenerator.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/record/compiler/JavaGenerator.java Wed Feb 28 19:47:27 2007
@@ -19,8 +19,6 @@
package org.apache.hadoop.record.compiler;
import java.util.ArrayList;
-import java.io.File;
-import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
@@ -29,34 +27,26 @@
*
* @author Milind Bhandarkar
*/
-class JavaGenerator {
- private String mName;
- private String destDir;
- private ArrayList mInclFiles;
- private ArrayList mRecList;
-
- /** Creates a new instance of JavaGenerator
- *
- * @param name possibly full pathname to the file
- * @param incl included files (as JFile)
- * @param records List of records defined within this file
- * @param destDir output directory
- */
- JavaGenerator(String name, ArrayList incl, ArrayList records, String destDir) {
- mName = name;
- mInclFiles = incl;
- mRecList = records;
- this.destDir = destDir;
- }
-
- /**
- * Generate Java code for records. This method is only a front-end to
- * JRecord, since one file is generated for each record.
- */
- void genCode() throws IOException {
- for (Iterator i = mRecList.iterator(); i.hasNext(); ) {
- JRecord rec = (JRecord) i.next();
- rec.genJavaCode(destDir);
- }
+class JavaGenerator extends CodeGenerator {
+
+ JavaGenerator() {
+ }
+
+ /**
+ * Generate Java code for records. This method is only a front-end to
+ * JRecord, since one file is generated for each record.
+ *
+ * @param name possibly full pathname to the file
+ * @param ilist included files (as JFile)
+ * @param rlist List of records defined within this file
+ * @param destDir output directory
+ */
+ void genCode(String name, ArrayList<JFile> ilist,
+ ArrayList<JRecord> rlist, String destDir, ArrayList<String> options)
+ throws IOException {
+ for (Iterator<JRecord> iter = rlist.iterator(); iter.hasNext(); ) {
+ JRecord rec = iter.next();
+ rec.genJavaCode(destDir, options);
}
+ }
}
Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/record/compiler/ant/RccTask.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/record/compiler/ant/RccTask.java?view=diff&rev=513122&r1=513121&r2=513122
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/record/compiler/ant/RccTask.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/record/compiler/ant/RccTask.java Wed Feb 28 19:47:27 2007
@@ -16,7 +16,7 @@
package org.apache.hadoop.record.compiler.ant;
import java.io.File;
-import java.util.Vector;
+import java.util.ArrayList;
import org.apache.hadoop.record.compiler.generated.Rcc;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.DirectoryScanner;
@@ -52,7 +52,7 @@
private String language = "java";
private File src;
private File dest = new File(".");
- private final Vector<FileSet> filesets = new Vector<FileSet>();
+ private final ArrayList<FileSet> filesets = new ArrayList<FileSet>();
private boolean failOnError = true;
/** Creates a new instance of RccTask */
@@ -111,7 +111,7 @@
}
Project myProject = getProject();
for (int i = 0; i < filesets.size(); i++) {
- FileSet fs = filesets.elementAt(i);
+ FileSet fs = filesets.get(i);
DirectoryScanner ds = fs.getDirectoryScanner(myProject);
File dir = fs.getDir(myProject);
String[] srcs = ds.getIncludedFiles();