put information into Type enum instead of static methods
diff --git a/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/recordmanagergenerator/RecordType.java b/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/recordmanagergenerator/RecordType.java
index 2ffa8be..d794c50 100644
--- a/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/recordmanagergenerator/RecordType.java
+++ b/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/recordmanagergenerator/RecordType.java
@@ -23,10 +23,26 @@
public class RecordType {
enum Type {
- BYTE,
- SHORT,
- INT,
- GLOBAL
+ BYTE (1, "byte", "get", "put", "(byte)0xde", "RecordManagerTypes.Byte.append"),
+ SHORT (2, "short", "getShort", "putShort", "(short)0xdead", "RecordManagerTypes.Short.append"),
+ INT (4, "int", "getInt", "putInt", "0xdeadbeef", "RecordManagerTypes.Int.append"),
+ GLOBAL(8, "long", "getLong", "putLong", "0xdeadbeefdeadbeefl", "RecordManagerTypes.Global.append");
+
+ Type(int size, String javaType, String bbGetter, String bbSetter, String deadMemInitializer, String appender) {
+ this.size = size;
+ this.javaType = javaType;
+ this.bbGetter = bbGetter;
+ this.bbSetter = bbSetter;
+ this.deadMemInitializer = deadMemInitializer;
+ this.appender = appender;
+ }
+
+ int size;
+ String javaType;
+ String bbGetter;
+ String bbSetter;
+ String deadMemInitializer;
+ String appender;
}
static class Field {
@@ -60,7 +76,7 @@
StringBuilder appendMemoryManagerGetMethod(StringBuilder sb, String indent, int level) {
sb = indent(sb, indent, level);
sb.append("public ")
- .append(javaType(type))
+ .append(type.javaType)
.append(' ')
.append(methodName("get"))
.append("(int slotNum) {\n");
@@ -72,7 +88,7 @@
sb.append("final ByteBuffer b = buf.bb;\n");
sb = indent(sb, indent, level + 1);
sb.append("return b.")
- .append(bbGetter(type))
+ .append(type.bbGetter)
.append("((slotNum % NO_SLOTS) * ITEM_SIZE + ")
.append(offsetName())
.append(");\n");
@@ -86,13 +102,13 @@
sb.append("public void ")
.append(methodName("set"))
.append("(int slotNum, ")
- .append(javaType(type))
+ .append(type.javaType)
.append(" value) {\n");
sb = indent(sb, indent, level + 1);
sb.append("final ByteBuffer b = buffers.get(slotNum / NO_SLOTS).bb;\n");
sb = indent(sb, indent, level + 1);
sb.append("b.")
- .append(bbSetter(type))
+ .append(type.bbSetter)
.append("((slotNum % NO_SLOTS) * ITEM_SIZE + ")
.append(offsetName())
.append(", value);\n");
@@ -104,7 +120,7 @@
StringBuilder appendArenaManagerGetMethod(StringBuilder sb, String indent, int level) {
sb = indent(sb, indent, level);
sb.append("public ")
- .append(javaType(type))
+ .append(type.javaType)
.append(' ')
.append(methodName("get"))
.append("(long slotNum) {\n");
@@ -130,7 +146,7 @@
sb.append("public void ")
.append(methodName("set"))
.append("(long slotNum, ")
- .append(javaType(type))
+ .append(type.javaType)
.append(" value) {\n");
if (initial != null) {
sb = indent(sb, indent, level + 1);
@@ -152,14 +168,14 @@
StringBuilder appendInitializers(StringBuilder sb, String indent, int level) {
sb = indent(sb, indent, level);
sb.append("bb.")
- .append(bbSetter(type))
+ .append(type.bbSetter)
.append("(slotNum * ITEM_SIZE + ")
.append(offsetName())
.append(", ");
if (initial != null) {
sb.append(initial);
} else {
- sb.append(deadMemInitializer(type));
+ sb.append(type.deadMemInitializer);
}
sb.append(");\n");
return sb;
@@ -171,11 +187,11 @@
}
sb = indent(sb, indent, level);
sb.append("if (bb.")
- .append(bbGetter(type))
+ .append(type.bbGetter)
.append("(itemOffset + ")
.append(offsetName())
.append(") == ")
- .append(deadMemInitializer(type))
+ .append(type.deadMemInitializer)
.append(") {\n");
sb = indent(sb, indent, level + 1);
sb.append("String msg = \"invalid value in field ")
@@ -242,7 +258,7 @@
private void calcOffsetsAndSize() {
Collections.sort(fields, new Comparator<Field>() {
public int compare(Field left, Field right) {
- return size(right.type) - size(left.type);
+ return right.type.size - left.type.size;
}
});
// sort fields by size and align the items
@@ -252,7 +268,7 @@
final Field field = fields.get(i);
assert field.offset == -1;
field.offset = totalSize;
- final int size = size(field.type);
+ final int size = field.type.size;
totalSize += size;
if (size > alignment) alignment = size;
}
@@ -265,66 +281,6 @@
return fields.size();
}
- static int size(Type t) {
- switch(t) {
- case BYTE: return 1;
- case SHORT: return 2;
- case INT: return 4;
- case GLOBAL: return 8;
- default: throw new IllegalArgumentException();
- }
- }
-
- static String javaType(Type t) {
- switch(t) {
- case BYTE: return "byte";
- case SHORT: return "short";
- case INT: return "int";
- case GLOBAL: return "long";
- default: throw new IllegalArgumentException();
- }
- }
-
- static String bbGetter(Type t) {
- switch(t) {
- case BYTE: return "get";
- case SHORT: return "getShort";
- case INT: return "getInt";
- case GLOBAL: return "getLong";
- default: throw new IllegalArgumentException();
- }
- }
-
- static String bbSetter(Type t) {
- switch(t) {
- case BYTE: return "put";
- case SHORT: return "putShort";
- case INT: return "putInt";
- case GLOBAL: return "putLong";
- default: throw new IllegalArgumentException();
- }
- }
-
- static String deadMemInitializer(Type t) {
- switch(t) {
- case BYTE: return "(byte)0xde";
- case SHORT: return "(short)0xdead";
- case INT: return "0xdeadbeef";
- case GLOBAL: return "0xdeadbeefdeadbeefl";
- default: throw new IllegalArgumentException();
- }
- }
-
- static String appender(Type t) {
- switch(t) {
- case BYTE: return "RecordManagerTypes.Byte.append";
- case SHORT: return "RecordManagerTypes.Short.append";
- case INT: return "RecordManagerTypes.Int.append";
- case GLOBAL: return "RecordManagerTypes.Global.append";
- default: throw new IllegalArgumentException();
- }
- }
-
static String padRight(String s, int n) {
return String.format("%1$-" + n + "s", s);
}
@@ -345,7 +301,7 @@
.append(field.offsetName())
.append(" = ")
.append(field.offset).append("; // size: ")
- .append(size(field.type)).append("\n");
+ .append(field.type.size).append("\n");
}
return sb;
}
@@ -367,15 +323,15 @@
sb = indent(sb, indent, level);
sb.append("for (int i = 0; i < NO_SLOTS; ++i) {\n");
sb = indent(sb, indent, level + 1);
- sb.append(javaType(field.type))
+ sb.append(field.type.javaType)
.append(" value = bb.")
- .append(bbGetter(field.type))
+ .append(field.type.bbGetter)
.append("(i * ITEM_SIZE + ")
.append(field.offsetName())
.append(");\n");
sb = indent(sb, indent, level + 1);
sb.append("sb = ")
- .append(appender(field.type))
+ .append(field.type.appender)
.append("(sb, value);\n");
sb = indent(sb, indent, level + 1);
sb.append("sb.append(\" | \");\n");