|
@@ -141,109 +141,116 @@ public class JRecord extends JCompType {
|
|
|
|
|
|
static HashMap<String, String> vectorStructs = new HashMap<String, String>();
|
|
static HashMap<String, String> vectorStructs = new HashMap<String, String>();
|
|
public void genCCode(FileWriter h, FileWriter c) throws IOException {
|
|
public void genCCode(FileWriter h, FileWriter c) throws IOException {
|
|
- for (JField f : mFields) {
|
|
|
|
- if (f.getType() instanceof JVector) {
|
|
|
|
- JVector jv = (JVector)f.getType();
|
|
|
|
- JType jvType = jv.getElementType();
|
|
|
|
- String struct_name = JVector.extractVectorName(jvType);
|
|
|
|
- if (vectorStructs.get(struct_name) == null) {
|
|
|
|
- vectorStructs.put(struct_name, struct_name);
|
|
|
|
- h.write("struct " + struct_name + " {\n int32_t count;\n" + jv.getElementType().genCDecl("*data") + "\n};\n");
|
|
|
|
- h.write("int serialize_" + struct_name + "(struct oarchive *out, const char *tag, struct " + struct_name + " *v);\n");
|
|
|
|
- h.write("int deserialize_" + struct_name + "(struct iarchive *in, const char *tag, struct " + struct_name + " *v);\n");
|
|
|
|
- h.write("int allocate_" + struct_name + "(struct " + struct_name + " *v, int32_t len);\n");
|
|
|
|
- h.write("int deallocate_" + struct_name + "(struct " + struct_name + " *v);\n");
|
|
|
|
- c.write("int allocate_" + struct_name + "(struct " + struct_name + " *v, int32_t len) {\n");
|
|
|
|
- c.write(" if (!len) {\n");
|
|
|
|
- c.write(" v->count = 0;\n");
|
|
|
|
- c.write(" v->data = 0;\n");
|
|
|
|
- c.write(" } else {\n");
|
|
|
|
- c.write(" v->count = len;\n");
|
|
|
|
- c.write(" v->data = calloc(sizeof(*v->data), len);\n");
|
|
|
|
- c.write(" }\n");
|
|
|
|
- c.write(" return 0;\n");
|
|
|
|
- c.write("}\n");
|
|
|
|
- c.write("int deallocate_" + struct_name + "(struct " + struct_name + " *v) {\n");
|
|
|
|
- c.write(" if (v->data) {\n");
|
|
|
|
- c.write(" int32_t i;\n");
|
|
|
|
- c.write(" for(i=0;i<v->count; i++) {\n");
|
|
|
|
- c.write(" deallocate_"+JRecord.extractMethodSuffix(jvType)+"(&v->data[i]);\n");
|
|
|
|
- c.write(" }\n");
|
|
|
|
- c.write(" free(v->data);\n");
|
|
|
|
- c.write(" v->data = 0;\n");
|
|
|
|
- c.write(" }\n");
|
|
|
|
- c.write(" return 0;\n");
|
|
|
|
- c.write("}\n");
|
|
|
|
- c.write("int serialize_" + struct_name + "(struct oarchive *out, const char *tag, struct " + struct_name + " *v)\n");
|
|
|
|
- c.write("{\n");
|
|
|
|
- c.write(" int32_t count = v->count;\n");
|
|
|
|
- c.write(" int rc = 0;\n");
|
|
|
|
- c.write(" int32_t i;\n");
|
|
|
|
- c.write(" rc = out->start_vector(out, tag, &count);\n");
|
|
|
|
- c.write(" for(i=0;i<v->count;i++) {\n");
|
|
|
|
- genSerialize(c, jvType, "data", "data[i]");
|
|
|
|
- c.write(" }\n");
|
|
|
|
- c.write(" rc = rc ? rc : out->end_vector(out, tag);\n");
|
|
|
|
- c.write(" return rc;\n");
|
|
|
|
- c.write("}\n");
|
|
|
|
- c.write("int deserialize_" + struct_name + "(struct iarchive *in, const char *tag, struct " + struct_name + " *v)\n");
|
|
|
|
- c.write("{\n");
|
|
|
|
- c.write(" int rc = 0;\n");
|
|
|
|
- c.write(" int32_t i;\n");
|
|
|
|
- c.write(" rc = in->start_vector(in, tag, &v->count);\n");
|
|
|
|
- c.write(" v->data = calloc(v->count, sizeof(*v->data));\n");
|
|
|
|
- c.write(" for(i=0;i<v->count;i++) {\n");
|
|
|
|
- genDeserialize(c, jvType, "value", "data[i]");
|
|
|
|
- c.write(" }\n");
|
|
|
|
- c.write(" rc = in->end_vector(in, tag);\n");
|
|
|
|
- c.write(" return rc;\n");
|
|
|
|
- c.write("}\n");
|
|
|
|
-
|
|
|
|
|
|
+ try {
|
|
|
|
+ for (JField f : mFields) {
|
|
|
|
+ if (f.getType() instanceof JVector) {
|
|
|
|
+ JVector jv = (JVector) f.getType();
|
|
|
|
+ JType jvType = jv.getElementType();
|
|
|
|
+ String struct_name = JVector.extractVectorName(jvType);
|
|
|
|
+ if (vectorStructs.get(struct_name) == null) {
|
|
|
|
+ vectorStructs.put(struct_name, struct_name);
|
|
|
|
+ h.write("struct " + struct_name + " {\n int32_t count;\n" + jv.getElementType().genCDecl("*data") + "\n};\n");
|
|
|
|
+ h.write("int serialize_" + struct_name + "(struct oarchive *out, const char *tag, struct " + struct_name + " *v);\n");
|
|
|
|
+ h.write("int deserialize_" + struct_name + "(struct iarchive *in, const char *tag, struct " + struct_name + " *v);\n");
|
|
|
|
+ h.write("int allocate_" + struct_name + "(struct " + struct_name + " *v, int32_t len);\n");
|
|
|
|
+ h.write("int deallocate_" + struct_name + "(struct " + struct_name + " *v);\n");
|
|
|
|
+ c.write("int allocate_" + struct_name + "(struct " + struct_name + " *v, int32_t len) {\n");
|
|
|
|
+ c.write(" if (!len) {\n");
|
|
|
|
+ c.write(" v->count = 0;\n");
|
|
|
|
+ c.write(" v->data = 0;\n");
|
|
|
|
+ c.write(" } else {\n");
|
|
|
|
+ c.write(" v->count = len;\n");
|
|
|
|
+ c.write(" v->data = calloc(sizeof(*v->data), len);\n");
|
|
|
|
+ c.write(" }\n");
|
|
|
|
+ c.write(" return 0;\n");
|
|
|
|
+ c.write("}\n");
|
|
|
|
+ c.write("int deallocate_" + struct_name + "(struct " + struct_name + " *v) {\n");
|
|
|
|
+ c.write(" if (v->data) {\n");
|
|
|
|
+ c.write(" int32_t i;\n");
|
|
|
|
+ c.write(" for(i=0;i<v->count; i++) {\n");
|
|
|
|
+ c.write(" deallocate_" + JRecord.extractMethodSuffix(jvType) + "(&v->data[i]);\n");
|
|
|
|
+ c.write(" }\n");
|
|
|
|
+ c.write(" free(v->data);\n");
|
|
|
|
+ c.write(" v->data = 0;\n");
|
|
|
|
+ c.write(" }\n");
|
|
|
|
+ c.write(" return 0;\n");
|
|
|
|
+ c.write("}\n");
|
|
|
|
+ c.write("int serialize_" + struct_name + "(struct oarchive *out, const char *tag, struct " + struct_name + " *v)\n");
|
|
|
|
+ c.write("{\n");
|
|
|
|
+ c.write(" int32_t count = v->count;\n");
|
|
|
|
+ c.write(" int rc = 0;\n");
|
|
|
|
+ c.write(" int32_t i;\n");
|
|
|
|
+ c.write(" rc = out->start_vector(out, tag, &count);\n");
|
|
|
|
+ c.write(" for(i=0;i<v->count;i++) {\n");
|
|
|
|
+ genSerialize(c, jvType, "data", "data[i]");
|
|
|
|
+ c.write(" }\n");
|
|
|
|
+ c.write(" rc = rc ? rc : out->end_vector(out, tag);\n");
|
|
|
|
+ c.write(" return rc;\n");
|
|
|
|
+ c.write("}\n");
|
|
|
|
+ c.write("int deserialize_" + struct_name + "(struct iarchive *in, const char *tag, struct " + struct_name + " *v)\n");
|
|
|
|
+ c.write("{\n");
|
|
|
|
+ c.write(" int rc = 0;\n");
|
|
|
|
+ c.write(" int32_t i;\n");
|
|
|
|
+ c.write(" rc = in->start_vector(in, tag, &v->count);\n");
|
|
|
|
+ c.write(" v->data = calloc(v->count, sizeof(*v->data));\n");
|
|
|
|
+ c.write(" for(i=0;i<v->count;i++) {\n");
|
|
|
|
+ genDeserialize(c, jvType, "value", "data[i]");
|
|
|
|
+ c.write(" }\n");
|
|
|
|
+ c.write(" rc = in->end_vector(in, tag);\n");
|
|
|
|
+ c.write(" return rc;\n");
|
|
|
|
+ c.write("}\n");
|
|
|
|
+
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- }
|
|
|
|
- String rec_name = getName();
|
|
|
|
- h.write("struct " + rec_name + " {\n");
|
|
|
|
- for (JField f : mFields) {
|
|
|
|
- h.write(f.genCDecl());
|
|
|
|
- }
|
|
|
|
- h.write("};\n");
|
|
|
|
- h.write("int serialize_" + rec_name + "(struct oarchive *out, const char *tag, struct " + rec_name + " *v);\n");
|
|
|
|
- h.write("int deserialize_" + rec_name + "(struct iarchive *in, const char *tag, struct " + rec_name + "*v);\n");
|
|
|
|
- h.write("void deallocate_" + rec_name + "(struct " + rec_name + "*);\n");
|
|
|
|
- c.write("int serialize_" + rec_name + "(struct oarchive *out, const char *tag, struct " + rec_name + " *v)");
|
|
|
|
- c.write("{\n");
|
|
|
|
- c.write(" int rc;\n");
|
|
|
|
- c.write(" rc = out->start_record(out, tag);\n");
|
|
|
|
- for(JField f : mFields) {
|
|
|
|
- genSerialize(c, f.getType(), f.getTag(), f.getName());
|
|
|
|
- }
|
|
|
|
- c.write(" rc = rc ? rc : out->end_record(out, tag);\n");
|
|
|
|
- c.write(" return rc;\n");
|
|
|
|
- c.write("}\n");
|
|
|
|
- c.write("int deserialize_" + rec_name + "(struct iarchive *in, const char *tag, struct " + rec_name + "*v)");
|
|
|
|
- c.write("{\n");
|
|
|
|
- c.write(" int rc;\n");
|
|
|
|
- c.write(" rc = in->start_record(in, tag);\n");
|
|
|
|
- for(JField f : mFields) {
|
|
|
|
- genDeserialize(c, f.getType(), f.getTag(), f.getName());
|
|
|
|
- }
|
|
|
|
- c.write(" rc = rc ? rc : in->end_record(in, tag);\n");
|
|
|
|
- c.write(" return rc;\n");
|
|
|
|
- c.write("}\n");
|
|
|
|
- c.write("void deallocate_" + rec_name + "(struct " + rec_name + "*v)");
|
|
|
|
- c.write("{\n");
|
|
|
|
- for(JField f : mFields) {
|
|
|
|
- if (f.getType() instanceof JRecord) {
|
|
|
|
- c.write(" deallocate_" + extractStructName(f.getType()) + "(&v->" + f.getName() + ");\n");
|
|
|
|
- } else if (f.getType() instanceof JVector) {
|
|
|
|
- JVector vt = (JVector)f.getType();
|
|
|
|
- c.write(" deallocate_" + JVector.extractVectorName(vt.getElementType())+ "(&v->"+f.getName()+");\n");
|
|
|
|
- } else if (f.getType() instanceof JCompType) {
|
|
|
|
- c.write(" deallocate_" + extractMethodSuffix(f.getType()) + "(&v->"+f.getName()+");\n");
|
|
|
|
|
|
+ String rec_name = getName();
|
|
|
|
+ h.write("struct " + rec_name + " {\n");
|
|
|
|
+ for (JField f : mFields) {
|
|
|
|
+ h.write(f.genCDecl());
|
|
|
|
+ }
|
|
|
|
+ h.write("};\n");
|
|
|
|
+ h.write("int serialize_" + rec_name + "(struct oarchive *out, const char *tag, struct " + rec_name + " *v);\n");
|
|
|
|
+ h.write("int deserialize_" + rec_name + "(struct iarchive *in, const char *tag, struct " + rec_name + "*v);\n");
|
|
|
|
+ h.write("void deallocate_" + rec_name + "(struct " + rec_name + "*);\n");
|
|
|
|
+ c.write("int serialize_" + rec_name + "(struct oarchive *out, const char *tag, struct " + rec_name + " *v)");
|
|
|
|
+ c.write("{\n");
|
|
|
|
+ c.write(" int rc;\n");
|
|
|
|
+ c.write(" rc = out->start_record(out, tag);\n");
|
|
|
|
+ for (JField f : mFields) {
|
|
|
|
+ genSerialize(c, f.getType(), f.getTag(), f.getName());
|
|
|
|
+ }
|
|
|
|
+ c.write(" rc = rc ? rc : out->end_record(out, tag);\n");
|
|
|
|
+ c.write(" return rc;\n");
|
|
|
|
+ c.write("}\n");
|
|
|
|
+ c.write("int deserialize_" + rec_name + "(struct iarchive *in, const char *tag, struct " + rec_name + "*v)");
|
|
|
|
+ c.write("{\n");
|
|
|
|
+ c.write(" int rc;\n");
|
|
|
|
+ c.write(" rc = in->start_record(in, tag);\n");
|
|
|
|
+ for (JField f : mFields) {
|
|
|
|
+ genDeserialize(c, f.getType(), f.getTag(), f.getName());
|
|
|
|
+ }
|
|
|
|
+ c.write(" rc = rc ? rc : in->end_record(in, tag);\n");
|
|
|
|
+ c.write(" return rc;\n");
|
|
|
|
+ c.write("}\n");
|
|
|
|
+ c.write("void deallocate_" + rec_name + "(struct " + rec_name + "*v)");
|
|
|
|
+ c.write("{\n");
|
|
|
|
+ for (JField f : mFields) {
|
|
|
|
+ if (f.getType() instanceof JRecord) {
|
|
|
|
+ c.write(" deallocate_" + extractStructName(f.getType()) + "(&v->" + f.getName() + ");\n");
|
|
|
|
+ } else if (f.getType() instanceof JVector) {
|
|
|
|
+ JVector vt = (JVector) f.getType();
|
|
|
|
+ c.write(" deallocate_" + JVector.extractVectorName(vt.getElementType()) + "(&v->" + f.getName() + ");\n");
|
|
|
|
+ } else if (f.getType() instanceof JCompType) {
|
|
|
|
+ c.write(" deallocate_" + extractMethodSuffix(f.getType()) + "(&v->" + f.getName() + ");\n");
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
+ c.write("}\n");
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ throw e;
|
|
|
|
+ } finally {
|
|
|
|
+ h.close();
|
|
|
|
+ c.close();
|
|
}
|
|
}
|
|
- c.write("}\n");
|
|
|
|
}
|
|
}
|
|
|
|
|
|
private void genSerialize(FileWriter c, JType type, String tag, String name) throws IOException {
|
|
private void genSerialize(FileWriter c, JType type, String tag, String name) throws IOException {
|
|
@@ -403,168 +410,165 @@ public class JRecord extends JCompType {
|
|
} else if (!pkgdir.isDirectory()) {
|
|
} else if (!pkgdir.isDirectory()) {
|
|
throw new IOException(pkgpath + " is 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("/**\n");
|
|
|
|
- jj.write("* Licensed to the Apache Software Foundation (ASF) under one\n");
|
|
|
|
- jj.write("* or more contributor license agreements. See the NOTICE file\n");
|
|
|
|
- jj.write("* distributed with this work for additional information\n");
|
|
|
|
- jj.write("* regarding copyright ownership. The ASF licenses this file\n");
|
|
|
|
- jj.write("* to you under the Apache License, Version 2.0 (the\n");
|
|
|
|
- jj.write("* \"License\"); you may not use this file except in compliance\n");
|
|
|
|
- jj.write("* with the License. You may obtain a copy of the License at\n");
|
|
|
|
- jj.write("*\n");
|
|
|
|
- jj.write("* http://www.apache.org/licenses/LICENSE-2.0\n");
|
|
|
|
- jj.write("*\n");
|
|
|
|
- jj.write("* Unless required by applicable law or agreed to in writing, software\n");
|
|
|
|
- jj.write("* distributed under the License is distributed on an \"AS IS\" BASIS,\n");
|
|
|
|
- jj.write("* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n");
|
|
|
|
- jj.write("* See the License for the specific language governing permissions and\n");
|
|
|
|
- jj.write("* limitations under the License.\n");
|
|
|
|
- jj.write("*/\n");
|
|
|
|
- jj.write("\n");
|
|
|
|
- jj.write("package "+getJavaPackage()+";\n\n");
|
|
|
|
- jj.write("import org.apache.jute.*;\n");
|
|
|
|
- jj.write("public class "+getName()+" implements Record {\n");
|
|
|
|
- for (Iterator<JField> i = mFields.iterator(); i.hasNext();) {
|
|
|
|
- JField jf = i.next();
|
|
|
|
- jj.write(jf.genJavaDecl());
|
|
|
|
- }
|
|
|
|
- jj.write(" public "+getName()+"() {\n");
|
|
|
|
- jj.write(" }\n");
|
|
|
|
|
|
+ try (FileWriter jj = new FileWriter(new File(pkgdir, getName()+".java"))) {
|
|
|
|
+ jj.write("// File generated by hadoop record compiler. Do not edit.\n");
|
|
|
|
+ jj.write("/**\n");
|
|
|
|
+ jj.write("* Licensed to the Apache Software Foundation (ASF) under one\n");
|
|
|
|
+ jj.write("* or more contributor license agreements. See the NOTICE file\n");
|
|
|
|
+ jj.write("* distributed with this work for additional information\n");
|
|
|
|
+ jj.write("* regarding copyright ownership. The ASF licenses this file\n");
|
|
|
|
+ jj.write("* to you under the Apache License, Version 2.0 (the\n");
|
|
|
|
+ jj.write("* \"License\"); you may not use this file except in compliance\n");
|
|
|
|
+ jj.write("* with the License. You may obtain a copy of the License at\n");
|
|
|
|
+ jj.write("*\n");
|
|
|
|
+ jj.write("* http://www.apache.org/licenses/LICENSE-2.0\n");
|
|
|
|
+ jj.write("*\n");
|
|
|
|
+ jj.write("* Unless required by applicable law or agreed to in writing, software\n");
|
|
|
|
+ jj.write("* distributed under the License is distributed on an \"AS IS\" BASIS,\n");
|
|
|
|
+ jj.write("* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n");
|
|
|
|
+ jj.write("* See the License for the specific language governing permissions and\n");
|
|
|
|
+ jj.write("* limitations under the License.\n");
|
|
|
|
+ jj.write("*/\n");
|
|
|
|
+ jj.write("\n");
|
|
|
|
+ jj.write("package " + getJavaPackage() + ";\n\n");
|
|
|
|
+ jj.write("import org.apache.jute.*;\n");
|
|
|
|
+ jj.write("public class " + getName() + " implements Record {\n");
|
|
|
|
+ for (Iterator<JField> i = mFields.iterator(); i.hasNext(); ) {
|
|
|
|
+ JField jf = i.next();
|
|
|
|
+ jj.write(jf.genJavaDecl());
|
|
|
|
+ }
|
|
|
|
+ jj.write(" public " + getName() + "() {\n");
|
|
|
|
+ jj.write(" }\n");
|
|
|
|
|
|
- jj.write(" public "+getName()+"(\n");
|
|
|
|
- int fIdx = 0;
|
|
|
|
- int fLen = mFields.size();
|
|
|
|
- for (Iterator<JField> i = mFields.iterator(); i.hasNext(); fIdx++) {
|
|
|
|
- JField jf = i.next();
|
|
|
|
- jj.write(jf.genJavaConstructorParam(jf.getName()));
|
|
|
|
- jj.write((fLen-1 == fIdx)?"":",\n");
|
|
|
|
- }
|
|
|
|
- jj.write(") {\n");
|
|
|
|
- fIdx = 0;
|
|
|
|
- for (Iterator<JField> i = mFields.iterator(); i.hasNext(); fIdx++) {
|
|
|
|
- JField jf = i.next();
|
|
|
|
- jj.write(jf.genJavaConstructorSet(jf.getName()));
|
|
|
|
- }
|
|
|
|
- jj.write(" }\n");
|
|
|
|
- fIdx = 0;
|
|
|
|
- for (Iterator<JField> i = mFields.iterator(); i.hasNext(); fIdx++) {
|
|
|
|
- JField jf = i.next();
|
|
|
|
- jj.write(jf.genJavaGetSet(fIdx));
|
|
|
|
- }
|
|
|
|
- jj.write(" public void serialize(OutputArchive a_, String tag) throws java.io.IOException {\n");
|
|
|
|
- jj.write(" a_.startRecord(this,tag);\n");
|
|
|
|
- fIdx = 0;
|
|
|
|
- for (Iterator<JField> i = mFields.iterator(); i.hasNext(); fIdx++) {
|
|
|
|
- JField jf = i.next();
|
|
|
|
- jj.write(jf.genJavaWriteMethodName());
|
|
|
|
- }
|
|
|
|
- jj.write(" a_.endRecord(this,tag);\n");
|
|
|
|
- jj.write(" }\n");
|
|
|
|
|
|
+ jj.write(" public " + getName() + "(\n");
|
|
|
|
+ int fIdx = 0;
|
|
|
|
+ int fLen = mFields.size();
|
|
|
|
+ for (Iterator<JField> i = mFields.iterator(); i.hasNext(); fIdx++) {
|
|
|
|
+ JField jf = i.next();
|
|
|
|
+ jj.write(jf.genJavaConstructorParam(jf.getName()));
|
|
|
|
+ jj.write((fLen - 1 == fIdx) ? "" : ",\n");
|
|
|
|
+ }
|
|
|
|
+ jj.write(") {\n");
|
|
|
|
+ fIdx = 0;
|
|
|
|
+ for (Iterator<JField> i = mFields.iterator(); i.hasNext(); fIdx++) {
|
|
|
|
+ JField jf = i.next();
|
|
|
|
+ jj.write(jf.genJavaConstructorSet(jf.getName()));
|
|
|
|
+ }
|
|
|
|
+ jj.write(" }\n");
|
|
|
|
+ fIdx = 0;
|
|
|
|
+ for (Iterator<JField> i = mFields.iterator(); i.hasNext(); fIdx++) {
|
|
|
|
+ JField jf = i.next();
|
|
|
|
+ jj.write(jf.genJavaGetSet(fIdx));
|
|
|
|
+ }
|
|
|
|
+ jj.write(" public void serialize(OutputArchive a_, String tag) throws java.io.IOException {\n");
|
|
|
|
+ jj.write(" a_.startRecord(this,tag);\n");
|
|
|
|
+ fIdx = 0;
|
|
|
|
+ for (Iterator<JField> i = mFields.iterator(); i.hasNext(); fIdx++) {
|
|
|
|
+ JField jf = i.next();
|
|
|
|
+ jj.write(jf.genJavaWriteMethodName());
|
|
|
|
+ }
|
|
|
|
+ jj.write(" a_.endRecord(this,tag);\n");
|
|
|
|
+ jj.write(" }\n");
|
|
|
|
|
|
- jj.write(" public void deserialize(InputArchive a_, String tag) throws java.io.IOException {\n");
|
|
|
|
- jj.write(" a_.startRecord(tag);\n");
|
|
|
|
- fIdx = 0;
|
|
|
|
- for (Iterator<JField> i = mFields.iterator(); i.hasNext(); fIdx++) {
|
|
|
|
- JField jf = 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(" CsvOutputArchive a_ = \n");
|
|
|
|
- jj.write(" new CsvOutputArchive(s);\n");
|
|
|
|
- jj.write(" a_.startRecord(this,\"\");\n");
|
|
|
|
- fIdx = 0;
|
|
|
|
- for (Iterator<JField> i = mFields.iterator(); i.hasNext(); fIdx++) {
|
|
|
|
- JField jf = 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(" ex.printStackTrace();\n");
|
|
|
|
- jj.write(" }\n");
|
|
|
|
- jj.write(" return \"ERROR\";\n");
|
|
|
|
- jj.write(" }\n");
|
|
|
|
-
|
|
|
|
- jj.write(" public void write(java.io.DataOutput out) throws java.io.IOException {\n");
|
|
|
|
- jj.write(" BinaryOutputArchive archive = new 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(" BinaryInputArchive archive = new BinaryInputArchive(in);\n");
|
|
|
|
- jj.write(" deserialize(archive, \"\");\n");
|
|
|
|
- jj.write(" }\n");
|
|
|
|
-
|
|
|
|
- jj.write(" public int compareTo (Object peer_) throws ClassCastException {\n");
|
|
|
|
- boolean unimplemented = false;
|
|
|
|
- for (JField f : mFields) {
|
|
|
|
- if ((f.getType() instanceof JMap)
|
|
|
|
- || (f.getType() instanceof JVector))
|
|
|
|
- {
|
|
|
|
- unimplemented = true;
|
|
|
|
|
|
+ jj.write(" public void deserialize(InputArchive a_, String tag) throws java.io.IOException {\n");
|
|
|
|
+ jj.write(" a_.startRecord(tag);\n");
|
|
|
|
+ fIdx = 0;
|
|
|
|
+ for (Iterator<JField> i = mFields.iterator(); i.hasNext(); fIdx++) {
|
|
|
|
+ JField jf = i.next();
|
|
|
|
+ jj.write(jf.genJavaReadMethodName());
|
|
}
|
|
}
|
|
- }
|
|
|
|
- if (unimplemented) {
|
|
|
|
- jj.write(" throw new UnsupportedOperationException(\"comparing "
|
|
|
|
- + getName() + " is unimplemented\");\n");
|
|
|
|
- } else {
|
|
|
|
- jj.write(" if (!(peer_ instanceof "+getName()+")) {\n");
|
|
|
|
- jj.write(" throw new ClassCastException(\"Comparing different types of records.\");\n");
|
|
|
|
|
|
+ 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(" CsvOutputArchive a_ = \n");
|
|
|
|
+ jj.write(" new CsvOutputArchive(s);\n");
|
|
|
|
+ jj.write(" a_.startRecord(this,\"\");\n");
|
|
|
|
+ fIdx = 0;
|
|
|
|
+ for (Iterator<JField> i = mFields.iterator(); i.hasNext(); fIdx++) {
|
|
|
|
+ JField jf = 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(" ex.printStackTrace();\n");
|
|
jj.write(" }\n");
|
|
jj.write(" }\n");
|
|
- jj.write(" "+getName()+" peer = ("+getName()+") peer_;\n");
|
|
|
|
- jj.write(" int ret = 0;\n");
|
|
|
|
|
|
+ jj.write(" return \"ERROR\";\n");
|
|
|
|
+ jj.write(" }\n");
|
|
|
|
+
|
|
|
|
+ jj.write(" public void write(java.io.DataOutput out) throws java.io.IOException {\n");
|
|
|
|
+ jj.write(" BinaryOutputArchive archive = new 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(" BinaryInputArchive archive = new BinaryInputArchive(in);\n");
|
|
|
|
+ jj.write(" deserialize(archive, \"\");\n");
|
|
|
|
+ jj.write(" }\n");
|
|
|
|
+
|
|
|
|
+ jj.write(" public int compareTo (Object peer_) throws ClassCastException {\n");
|
|
|
|
+ boolean unimplemented = false;
|
|
|
|
+ for (JField f : mFields) {
|
|
|
|
+ if ((f.getType() instanceof JMap)
|
|
|
|
+ || (f.getType() instanceof JVector)) {
|
|
|
|
+ unimplemented = true;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (unimplemented) {
|
|
|
|
+ jj.write(" throw new UnsupportedOperationException(\"comparing "
|
|
|
|
+ + getName() + " is unimplemented\");\n");
|
|
|
|
+ } else {
|
|
|
|
+ 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<JField> i = mFields.iterator(); i.hasNext(); fIdx++) {
|
|
|
|
+ JField jf = 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<JField> i = mFields.iterator(); i.hasNext(); fIdx++) {
|
|
for (Iterator<JField> i = mFields.iterator(); i.hasNext(); fIdx++) {
|
|
JField jf = i.next();
|
|
JField jf = i.next();
|
|
- jj.write(jf.genJavaCompareTo());
|
|
|
|
- jj.write(" if (ret != 0) return ret;\n");
|
|
|
|
|
|
+ jj.write(jf.genJavaEquals());
|
|
|
|
+ jj.write(" if (!ret) return ret;\n");
|
|
}
|
|
}
|
|
jj.write(" 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<JField> i = mFields.iterator(); i.hasNext(); fIdx++) {
|
|
|
|
- JField jf = i.next();
|
|
|
|
- jj.write(jf.genJavaEquals());
|
|
|
|
- jj.write(" if (!ret) return ret;\n");
|
|
|
|
- }
|
|
|
|
- jj.write(" return ret;\n");
|
|
|
|
- jj.write(" }\n");
|
|
|
|
|
|
+ jj.write(" }\n");
|
|
|
|
|
|
- jj.write(" public int hashCode() {\n");
|
|
|
|
- jj.write(" int result = 17;\n");
|
|
|
|
- jj.write(" int ret;\n");
|
|
|
|
- for (Iterator<JField> i = mFields.iterator(); i.hasNext(); fIdx++) {
|
|
|
|
- JField jf = 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("}\n");
|
|
|
|
|
|
+ jj.write(" public int hashCode() {\n");
|
|
|
|
+ jj.write(" int result = 17;\n");
|
|
|
|
+ jj.write(" int ret;\n");
|
|
|
|
+ for (Iterator<JField> i = mFields.iterator(); i.hasNext(); fIdx++) {
|
|
|
|
+ JField jf = 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.close();
|
|
|
|
|
|
+ jj.write("}\n");
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
public void genCsharpCode(File outputDirectory) throws IOException {
|
|
public void genCsharpCode(File outputDirectory) throws IOException {
|
|
@@ -576,174 +580,174 @@ public class JRecord extends JCompType {
|
|
} else if (!outputDirectory.isDirectory()) {
|
|
} else if (!outputDirectory.isDirectory()) {
|
|
throw new IOException(outputDirectory + " is not a directory.");
|
|
throw new IOException(outputDirectory + " is not a directory.");
|
|
}
|
|
}
|
|
- File csharpFile = new File(outputDirectory, getName()+".cs");
|
|
|
|
- FileWriter cs = new FileWriter(csharpFile);
|
|
|
|
- cs.write("// File generated by hadoop record compiler. Do not edit.\n");
|
|
|
|
- cs.write("/**\n");
|
|
|
|
- cs.write("* Licensed to the Apache Software Foundation (ASF) under one\n");
|
|
|
|
- cs.write("* or more contributor license agreements. See the NOTICE file\n");
|
|
|
|
- cs.write("* distributed with this work for additional information\n");
|
|
|
|
- cs.write("* regarding copyright ownership. The ASF licenses this file\n");
|
|
|
|
- cs.write("* to you under the Apache License, Version 2.0 (the\n");
|
|
|
|
- cs.write("* \"License\"); you may not use this file except in compliance\n");
|
|
|
|
- cs.write("* with the License. You may obtain a copy of the License at\n");
|
|
|
|
- cs.write("*\n");
|
|
|
|
- cs.write("* http://www.apache.org/licenses/LICENSE-2.0\n");
|
|
|
|
- cs.write("*\n");
|
|
|
|
- cs.write("* Unless required by applicable law or agreed to in writing, software\n");
|
|
|
|
- cs.write("* distributed under the License is distributed on an \"AS IS\" BASIS,\n");
|
|
|
|
- cs.write("* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n");
|
|
|
|
- cs.write("* See the License for the specific language governing permissions and\n");
|
|
|
|
- cs.write("* limitations under the License.\n");
|
|
|
|
- cs.write("*/\n");
|
|
|
|
- cs.write("\n");
|
|
|
|
- cs.write("using System;\n");
|
|
|
|
- cs.write("using Org.Apache.Jute;\n");
|
|
|
|
- cs.write("\n");
|
|
|
|
- cs.write("namespace "+getCsharpNameSpace()+"\n");
|
|
|
|
- cs.write("{\n");
|
|
|
|
-
|
|
|
|
- String className = getCsharpName();
|
|
|
|
- cs.write("public class "+className+" : IRecord, IComparable \n");
|
|
|
|
- cs.write("{\n");
|
|
|
|
- cs.write(" public "+ className +"() {\n");
|
|
|
|
- cs.write(" }\n");
|
|
|
|
-
|
|
|
|
- cs.write(" public "+className+"(\n");
|
|
|
|
- int fIdx = 0;
|
|
|
|
- int fLen = mFields.size();
|
|
|
|
- for (Iterator<JField> i = mFields.iterator(); i.hasNext(); fIdx++) {
|
|
|
|
- JField jf = i.next();
|
|
|
|
- cs.write(jf.genCsharpConstructorParam(jf.getCsharpName()));
|
|
|
|
- cs.write((fLen-1 == fIdx)?"":",\n");
|
|
|
|
- }
|
|
|
|
- cs.write(") {\n");
|
|
|
|
- fIdx = 0;
|
|
|
|
- for (Iterator<JField> i = mFields.iterator(); i.hasNext(); fIdx++) {
|
|
|
|
- JField jf = i.next();
|
|
|
|
- cs.write(jf.genCsharpConstructorSet(jf.getCsharpName()));
|
|
|
|
- }
|
|
|
|
- cs.write(" }\n");
|
|
|
|
- fIdx = 0;
|
|
|
|
- for (Iterator<JField> i = mFields.iterator(); i.hasNext(); fIdx++) {
|
|
|
|
- JField jf = i.next();
|
|
|
|
- cs.write(jf.genCsharpGetSet(fIdx));
|
|
|
|
|
|
+
|
|
|
|
+ try (FileWriter cs = new FileWriter(new File(outputDirectory, getName() + ".cs"));) {
|
|
|
|
+ cs.write("// File generated by hadoop record compiler. Do not edit.\n");
|
|
|
|
+ cs.write("/**\n");
|
|
|
|
+ cs.write("* Licensed to the Apache Software Foundation (ASF) under one\n");
|
|
|
|
+ cs.write("* or more contributor license agreements. See the NOTICE file\n");
|
|
|
|
+ cs.write("* distributed with this work for additional information\n");
|
|
|
|
+ cs.write("* regarding copyright ownership. The ASF licenses this file\n");
|
|
|
|
+ cs.write("* to you under the Apache License, Version 2.0 (the\n");
|
|
|
|
+ cs.write("* \"License\"); you may not use this file except in compliance\n");
|
|
|
|
+ cs.write("* with the License. You may obtain a copy of the License at\n");
|
|
|
|
+ cs.write("*\n");
|
|
|
|
+ cs.write("* http://www.apache.org/licenses/LICENSE-2.0\n");
|
|
|
|
+ cs.write("*\n");
|
|
|
|
+ cs.write("* Unless required by applicable law or agreed to in writing, software\n");
|
|
|
|
+ cs.write("* distributed under the License is distributed on an \"AS IS\" BASIS,\n");
|
|
|
|
+ cs.write("* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n");
|
|
|
|
+ cs.write("* See the License for the specific language governing permissions and\n");
|
|
|
|
+ cs.write("* limitations under the License.\n");
|
|
|
|
+ cs.write("*/\n");
|
|
cs.write("\n");
|
|
cs.write("\n");
|
|
- }
|
|
|
|
- cs.write(" public void Serialize(IOutputArchive a_, String tag) {\n");
|
|
|
|
- cs.write(" a_.StartRecord(this,tag);\n");
|
|
|
|
- fIdx = 0;
|
|
|
|
- for (Iterator<JField> i = mFields.iterator(); i.hasNext(); fIdx++) {
|
|
|
|
- JField jf = i.next();
|
|
|
|
- cs.write(jf.genCsharpWriteMethodName());
|
|
|
|
- }
|
|
|
|
- cs.write(" a_.EndRecord(this,tag);\n");
|
|
|
|
- cs.write(" }\n");
|
|
|
|
|
|
+ cs.write("using System;\n");
|
|
|
|
+ cs.write("using Org.Apache.Jute;\n");
|
|
|
|
+ cs.write("\n");
|
|
|
|
+ cs.write("namespace " + getCsharpNameSpace() + "\n");
|
|
|
|
+ cs.write("{\n");
|
|
|
|
+
|
|
|
|
+ String className = getCsharpName();
|
|
|
|
+ cs.write("public class " + className + " : IRecord, IComparable \n");
|
|
|
|
+ cs.write("{\n");
|
|
|
|
+ cs.write(" public " + className + "() {\n");
|
|
|
|
+ cs.write(" }\n");
|
|
|
|
+
|
|
|
|
+ cs.write(" public " + className + "(\n");
|
|
|
|
+ int fIdx = 0;
|
|
|
|
+ int fLen = mFields.size();
|
|
|
|
+ for (Iterator<JField> i = mFields.iterator(); i.hasNext(); fIdx++) {
|
|
|
|
+ JField jf = i.next();
|
|
|
|
+ cs.write(jf.genCsharpConstructorParam(jf.getCsharpName()));
|
|
|
|
+ cs.write((fLen - 1 == fIdx) ? "" : ",\n");
|
|
|
|
+ }
|
|
|
|
+ cs.write(") {\n");
|
|
|
|
+ fIdx = 0;
|
|
|
|
+ for (Iterator<JField> i = mFields.iterator(); i.hasNext(); fIdx++) {
|
|
|
|
+ JField jf = i.next();
|
|
|
|
+ cs.write(jf.genCsharpConstructorSet(jf.getCsharpName()));
|
|
|
|
+ }
|
|
|
|
+ cs.write(" }\n");
|
|
|
|
+ fIdx = 0;
|
|
|
|
+ for (Iterator<JField> i = mFields.iterator(); i.hasNext(); fIdx++) {
|
|
|
|
+ JField jf = i.next();
|
|
|
|
+ cs.write(jf.genCsharpGetSet(fIdx));
|
|
|
|
+ cs.write("\n");
|
|
|
|
+ }
|
|
|
|
+ cs.write(" public void Serialize(IOutputArchive a_, String tag) {\n");
|
|
|
|
+ cs.write(" a_.StartRecord(this,tag);\n");
|
|
|
|
+ fIdx = 0;
|
|
|
|
+ for (Iterator<JField> i = mFields.iterator(); i.hasNext(); fIdx++) {
|
|
|
|
+ JField jf = i.next();
|
|
|
|
+ cs.write(jf.genCsharpWriteMethodName());
|
|
|
|
+ }
|
|
|
|
+ cs.write(" a_.EndRecord(this,tag);\n");
|
|
|
|
+ cs.write(" }\n");
|
|
|
|
|
|
- cs.write(" public void Deserialize(IInputArchive a_, String tag) {\n");
|
|
|
|
- cs.write(" a_.StartRecord(tag);\n");
|
|
|
|
- fIdx = 0;
|
|
|
|
- for (Iterator<JField> i = mFields.iterator(); i.hasNext(); fIdx++) {
|
|
|
|
- JField jf = i.next();
|
|
|
|
- cs.write(jf.genCsharpReadMethodName());
|
|
|
|
- }
|
|
|
|
- cs.write(" a_.EndRecord(tag);\n");
|
|
|
|
- cs.write("}\n");
|
|
|
|
-
|
|
|
|
- cs.write(" public override String ToString() {\n");
|
|
|
|
- cs.write(" try {\n");
|
|
|
|
- cs.write(" System.IO.MemoryStream ms = new System.IO.MemoryStream();\n");
|
|
|
|
- cs.write(" MiscUtil.IO.EndianBinaryWriter writer =\n");
|
|
|
|
- cs.write(" new MiscUtil.IO.EndianBinaryWriter(MiscUtil.Conversion.EndianBitConverter.Big, ms, System.Text.Encoding.UTF8);\n");
|
|
|
|
- cs.write(" BinaryOutputArchive a_ = \n");
|
|
|
|
- cs.write(" new BinaryOutputArchive(writer);\n");
|
|
|
|
- cs.write(" a_.StartRecord(this,\"\");\n");
|
|
|
|
- fIdx = 0;
|
|
|
|
- for (Iterator<JField> i = mFields.iterator(); i.hasNext(); fIdx++) {
|
|
|
|
- JField jf = i.next();
|
|
|
|
- cs.write(jf.genCsharpWriteMethodName());
|
|
|
|
- }
|
|
|
|
- cs.write(" a_.EndRecord(this,\"\");\n");
|
|
|
|
- cs.write(" ms.Position = 0;\n");
|
|
|
|
- cs.write(" return System.Text.Encoding.UTF8.GetString(ms.ToArray());\n");
|
|
|
|
- cs.write(" } catch (Exception ex) {\n");
|
|
|
|
- cs.write(" Console.WriteLine(ex.StackTrace);\n");
|
|
|
|
- cs.write(" }\n");
|
|
|
|
- cs.write(" return \"ERROR\";\n");
|
|
|
|
- cs.write(" }\n");
|
|
|
|
-
|
|
|
|
- cs.write(" public void Write(MiscUtil.IO.EndianBinaryWriter writer) {\n");
|
|
|
|
- cs.write(" BinaryOutputArchive archive = new BinaryOutputArchive(writer);\n");
|
|
|
|
- cs.write(" Serialize(archive, \"\");\n");
|
|
|
|
- cs.write(" }\n");
|
|
|
|
-
|
|
|
|
- cs.write(" public void ReadFields(MiscUtil.IO.EndianBinaryReader reader) {\n");
|
|
|
|
- cs.write(" BinaryInputArchive archive = new BinaryInputArchive(reader);\n");
|
|
|
|
- cs.write(" Deserialize(archive, \"\");\n");
|
|
|
|
- cs.write(" }\n");
|
|
|
|
-
|
|
|
|
- cs.write(" public int CompareTo (object peer_) {\n");
|
|
|
|
- boolean unimplemented = false;
|
|
|
|
- for (JField f : mFields) {
|
|
|
|
- if ((f.getType() instanceof JMap)
|
|
|
|
- || (f.getType() instanceof JVector))
|
|
|
|
- {
|
|
|
|
- unimplemented = true;
|
|
|
|
|
|
+ cs.write(" public void Deserialize(IInputArchive a_, String tag) {\n");
|
|
|
|
+ cs.write(" a_.StartRecord(tag);\n");
|
|
|
|
+ fIdx = 0;
|
|
|
|
+ for (Iterator<JField> i = mFields.iterator(); i.hasNext(); fIdx++) {
|
|
|
|
+ JField jf = i.next();
|
|
|
|
+ cs.write(jf.genCsharpReadMethodName());
|
|
}
|
|
}
|
|
- }
|
|
|
|
- if (unimplemented) {
|
|
|
|
- cs.write(" throw new InvalidOperationException(\"comparing "
|
|
|
|
- + getCsharpName() + " is unimplemented\");\n");
|
|
|
|
- } else {
|
|
|
|
- cs.write(" if (!(peer_ is "+getCsharpName()+")) {\n");
|
|
|
|
- cs.write(" throw new InvalidOperationException(\"Comparing different types of records.\");\n");
|
|
|
|
|
|
+ cs.write(" a_.EndRecord(tag);\n");
|
|
|
|
+ cs.write("}\n");
|
|
|
|
+
|
|
|
|
+ cs.write(" public override String ToString() {\n");
|
|
|
|
+ cs.write(" try {\n");
|
|
|
|
+ cs.write(" System.IO.MemoryStream ms = new System.IO.MemoryStream();\n");
|
|
|
|
+ cs.write(" MiscUtil.IO.EndianBinaryWriter writer =\n");
|
|
|
|
+ cs.write(" new MiscUtil.IO.EndianBinaryWriter(MiscUtil.Conversion.EndianBitConverter.Big, ms, System.Text.Encoding.UTF8);\n");
|
|
|
|
+ cs.write(" BinaryOutputArchive a_ = \n");
|
|
|
|
+ cs.write(" new BinaryOutputArchive(writer);\n");
|
|
|
|
+ cs.write(" a_.StartRecord(this,\"\");\n");
|
|
|
|
+ fIdx = 0;
|
|
|
|
+ for (Iterator<JField> i = mFields.iterator(); i.hasNext(); fIdx++) {
|
|
|
|
+ JField jf = i.next();
|
|
|
|
+ cs.write(jf.genCsharpWriteMethodName());
|
|
|
|
+ }
|
|
|
|
+ cs.write(" a_.EndRecord(this,\"\");\n");
|
|
|
|
+ cs.write(" ms.Position = 0;\n");
|
|
|
|
+ cs.write(" return System.Text.Encoding.UTF8.GetString(ms.ToArray());\n");
|
|
|
|
+ cs.write(" } catch (Exception ex) {\n");
|
|
|
|
+ cs.write(" Console.WriteLine(ex.StackTrace);\n");
|
|
cs.write(" }\n");
|
|
cs.write(" }\n");
|
|
- cs.write(" "+getCsharpName()+" peer = ("+getCsharpName()+") peer_;\n");
|
|
|
|
- cs.write(" int ret = 0;\n");
|
|
|
|
|
|
+ cs.write(" return \"ERROR\";\n");
|
|
|
|
+ cs.write(" }\n");
|
|
|
|
+
|
|
|
|
+ cs.write(" public void Write(MiscUtil.IO.EndianBinaryWriter writer) {\n");
|
|
|
|
+ cs.write(" BinaryOutputArchive archive = new BinaryOutputArchive(writer);\n");
|
|
|
|
+ cs.write(" Serialize(archive, \"\");\n");
|
|
|
|
+ cs.write(" }\n");
|
|
|
|
+
|
|
|
|
+ cs.write(" public void ReadFields(MiscUtil.IO.EndianBinaryReader reader) {\n");
|
|
|
|
+ cs.write(" BinaryInputArchive archive = new BinaryInputArchive(reader);\n");
|
|
|
|
+ cs.write(" Deserialize(archive, \"\");\n");
|
|
|
|
+ cs.write(" }\n");
|
|
|
|
+
|
|
|
|
+ cs.write(" public int CompareTo (object peer_) {\n");
|
|
|
|
+ boolean unimplemented = false;
|
|
|
|
+ for (JField f : mFields) {
|
|
|
|
+ if ((f.getType() instanceof JMap)
|
|
|
|
+ || (f.getType() instanceof JVector)) {
|
|
|
|
+ unimplemented = true;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (unimplemented) {
|
|
|
|
+ cs.write(" throw new InvalidOperationException(\"comparing "
|
|
|
|
+ + getCsharpName() + " is unimplemented\");\n");
|
|
|
|
+ } else {
|
|
|
|
+ cs.write(" if (!(peer_ is " + getCsharpName() + ")) {\n");
|
|
|
|
+ cs.write(" throw new InvalidOperationException(\"Comparing different types of records.\");\n");
|
|
|
|
+ cs.write(" }\n");
|
|
|
|
+ cs.write(" " + getCsharpName() + " peer = (" + getCsharpName() + ") peer_;\n");
|
|
|
|
+ cs.write(" int ret = 0;\n");
|
|
|
|
+ for (Iterator<JField> i = mFields.iterator(); i.hasNext(); fIdx++) {
|
|
|
|
+ JField jf = i.next();
|
|
|
|
+ cs.write(jf.genCsharpCompareTo());
|
|
|
|
+ cs.write(" if (ret != 0) return ret;\n");
|
|
|
|
+ }
|
|
|
|
+ cs.write(" return ret;\n");
|
|
|
|
+ }
|
|
|
|
+ cs.write(" }\n");
|
|
|
|
+
|
|
|
|
+ cs.write(" public override bool Equals(object peer_) {\n");
|
|
|
|
+ cs.write(" if (!(peer_ is " + getCsharpName() + ")) {\n");
|
|
|
|
+ cs.write(" return false;\n");
|
|
|
|
+ cs.write(" }\n");
|
|
|
|
+ cs.write(" if (peer_ == this) {\n");
|
|
|
|
+ cs.write(" return true;\n");
|
|
|
|
+ cs.write(" }\n");
|
|
|
|
+ cs.write(" bool ret = false;\n");
|
|
|
|
+ cs.write(" " + getCsharpName() + " peer = (" + getCsharpName() + ")peer_;\n");
|
|
for (Iterator<JField> i = mFields.iterator(); i.hasNext(); fIdx++) {
|
|
for (Iterator<JField> i = mFields.iterator(); i.hasNext(); fIdx++) {
|
|
JField jf = i.next();
|
|
JField jf = i.next();
|
|
- cs.write(jf.genCsharpCompareTo());
|
|
|
|
- cs.write(" if (ret != 0) return ret;\n");
|
|
|
|
|
|
+ cs.write(jf.genCsharpEquals());
|
|
|
|
+ cs.write(" if (!ret) return ret;\n");
|
|
}
|
|
}
|
|
cs.write(" return ret;\n");
|
|
cs.write(" return ret;\n");
|
|
- }
|
|
|
|
- cs.write(" }\n");
|
|
|
|
-
|
|
|
|
- cs.write(" public override bool Equals(object peer_) {\n");
|
|
|
|
- cs.write(" if (!(peer_ is "+getCsharpName()+")) {\n");
|
|
|
|
- cs.write(" return false;\n");
|
|
|
|
- cs.write(" }\n");
|
|
|
|
- cs.write(" if (peer_ == this) {\n");
|
|
|
|
- cs.write(" return true;\n");
|
|
|
|
- cs.write(" }\n");
|
|
|
|
- cs.write(" bool ret = false;\n");
|
|
|
|
- cs.write(" " + getCsharpName() + " peer = (" + getCsharpName() + ")peer_;\n");
|
|
|
|
- for (Iterator<JField> i = mFields.iterator(); i.hasNext(); fIdx++) {
|
|
|
|
- JField jf = i.next();
|
|
|
|
- cs.write(jf.genCsharpEquals());
|
|
|
|
- cs.write(" if (!ret) return ret;\n");
|
|
|
|
- }
|
|
|
|
- cs.write(" return ret;\n");
|
|
|
|
- cs.write(" }\n");
|
|
|
|
|
|
+ cs.write(" }\n");
|
|
|
|
|
|
- cs.write(" public override int GetHashCode() {\n");
|
|
|
|
- cs.write(" int result = 17;\n");
|
|
|
|
- cs.write(" int ret;\n");
|
|
|
|
- for (Iterator<JField> i = mFields.iterator(); i.hasNext(); fIdx++) {
|
|
|
|
- JField jf = i.next();
|
|
|
|
- cs.write(jf.genCsharpHashCode());
|
|
|
|
- cs.write(" result = 37*result + ret;\n");
|
|
|
|
- }
|
|
|
|
- cs.write(" return result;\n");
|
|
|
|
- cs.write(" }\n");
|
|
|
|
- cs.write(" public static string Signature() {\n");
|
|
|
|
- cs.write(" return \""+getSignature()+"\";\n");
|
|
|
|
- cs.write(" }\n");
|
|
|
|
|
|
+ cs.write(" public override int GetHashCode() {\n");
|
|
|
|
+ cs.write(" int result = 17;\n");
|
|
|
|
+ cs.write(" int ret;\n");
|
|
|
|
+ for (Iterator<JField> i = mFields.iterator(); i.hasNext(); fIdx++) {
|
|
|
|
+ JField jf = i.next();
|
|
|
|
+ cs.write(jf.genCsharpHashCode());
|
|
|
|
+ cs.write(" result = 37*result + ret;\n");
|
|
|
|
+ }
|
|
|
|
+ cs.write(" return result;\n");
|
|
|
|
+ cs.write(" }\n");
|
|
|
|
+ cs.write(" public static string Signature() {\n");
|
|
|
|
+ cs.write(" return \"" + getSignature() + "\";\n");
|
|
|
|
+ cs.write(" }\n");
|
|
|
|
|
|
- cs.write("}\n");
|
|
|
|
- cs.write("}\n");
|
|
|
|
|
|
+ cs.write("}\n");
|
|
|
|
+ cs.write("}\n");
|
|
|
|
|
|
- cs.close();
|
|
|
|
|
|
+ cs.close();
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
public static String getCsharpFQName(String name) {
|
|
public static String getCsharpFQName(String name) {
|