You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rh...@apache.org on 2008/05/15 19:52:22 UTC
svn commit: r656760 - in /incubator/qpid/trunk/qpid/java/common:
Composite.tpl genutil.py
src/main/java/org/apache/qpidity/transport/Struct.java
Author: rhs
Date: Thu May 15 10:52:22 2008
New Revision: 656760
URL: http://svn.apache.org/viewvc?rev=656760&view=rev
Log:
QPID-1062: phase 1 of improvements to 0-10 encode/decode; this inlines the read/write method of structs into generated code resulting in roughly a 2x improvement
Modified:
incubator/qpid/trunk/qpid/java/common/Composite.tpl
incubator/qpid/trunk/qpid/java/common/genutil.py
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/transport/Struct.java
Modified: incubator/qpid/trunk/qpid/java/common/Composite.tpl
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/Composite.tpl?rev=656760&r1=656759&r2=656760&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/common/Composite.tpl (original)
+++ incubator/qpid/trunk/qpid/java/common/Composite.tpl Thu May 15 10:52:22 2008
@@ -170,4 +170,66 @@
});
}
""")
-}}
+}
+
+ public void write(Encoder enc)
+ {
+${
+flag_count = 8*int(pack)
+reserved_count = flag_count - len(fields)
+
+if pack > 0:
+ for f in fields:
+ if f.type == "boolean":
+ out(" enc.writeBit(this.$(f.name));\n")
+ else:
+ out(" enc.writeBit(this.has_$(f.name));\n")
+ for i in range(reserved_count):
+ out(" enc.writeBit(false);\n")
+
+for f in fields:
+ if f.type == "boolean":
+ continue
+ if pack > 0:
+ out(" if (this.has_$(f.name))\n ")
+ pre = ""
+ post = ""
+ if f.type_node.name == "struct":
+ pre = "%s.TYPE, " % cname(f.type_node)
+ elif f.type_node.name == "domain":
+ post = ".getValue()"
+ out(" enc.write$(f.coder)($(pre)this.$(f.name)$(post));\n")
+}
+ }
+
+ public void read(Decoder dec)
+ {
+${
+if pack > 0:
+ for f in fields:
+ if f.type == "boolean":
+ out(" this.$(f.name) = dec.readBit();\n")
+ else:
+ out(" this.has_$(f.name) = dec.readBit();\n")
+ for i in range(reserved_count):
+ out(" dec.readBit();\n")
+
+for f in fields:
+ if f.type == "boolean":
+ continue
+ if pack > 0:
+ out(" if (this.has_$(f.name))\n ")
+ pre = ""
+ post = ""
+ arg = ""
+ if f.type_node.name == "struct":
+ pre = "(%s)" % cname(f.type_node)
+ arg = "%s.TYPE" % cname(f.type_node)
+ elif f.type_node.name == "domain":
+ pre = "%s.get(" % cname(f.type_node)
+ post = ")"
+ out(" this.$(f.name) = $(pre)dec.read$(f.coder)($(arg))$(post);\n")
+}
+ }
+
+}
Modified: incubator/qpid/trunk/qpid/java/common/genutil.py
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/genutil.py?rev=656760&r1=656759&r2=656760&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/common/genutil.py (original)
+++ incubator/qpid/trunk/qpid/java/common/genutil.py Thu May 15 10:52:22 2008
@@ -147,20 +147,21 @@
def __init__(self, index, nd):
self.index = index
self.name = camel(1, nd["@name"])
- type_node = resolve_type(nd)
- tname = cname(type_node)
- if type_node.name == "struct":
+ self.type_node = resolve_type(nd)
+ tname = cname(self.type_node)
+ if self.type_node.name == "struct":
self.read = "(%s) dec.readStruct(%s.TYPE)" % (tname, tname)
self.write = "enc.writeStruct(%s.TYPE, check(struct).%s)" % (tname, self.name)
- elif type_node.name == "domain":
- coder = camel(0, resolve_type(type_node)["@name"])
- self.read = "%s.get(dec.read%s())" % (tname, coder)
- self.write = "enc.write%s(check(struct).%s.getValue())" % (coder, self.name)
+ self.coder = "Struct"
+ elif self.type_node.name == "domain":
+ self.coder = camel(0, resolve_type(self.type_node)["@name"])
+ self.read = "%s.get(dec.read%s())" % (tname, self.coder)
+ self.write = "enc.write%s(check(struct).%s.getValue())" % (self.coder, self.name)
else:
- coder = camel(0, type_node["@name"])
- self.read = "dec.read%s()" % coder
- self.write = "enc.write%s(check(struct).%s)" % (coder, self.name)
- self.type = jtype(type_node)
+ self.coder = camel(0, self.type_node["@name"])
+ self.read = "dec.read%s()" % self.coder
+ self.write = "enc.write%s(check(struct).%s)" % (self.coder, self.name)
+ self.type = jtype(self.type_node)
self.default = DEFAULTS.get(self.type, "null")
self.has = camel(1, "has", self.name)
self.get = camel(1, "get", self.name)
Modified: incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/transport/Struct.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/transport/Struct.java?rev=656760&r1=656759&r2=656760&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/transport/Struct.java (original)
+++ incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/transport/Struct.java Thu May 15 10:52:22 2008
@@ -108,79 +108,9 @@
return getFlagCount() - getFields().size();
}
- public final void read(Decoder dec)
- {
- List<Field<?,?>> fields = getFields();
-
- assert fields.size() <= getFlagCount();
-
- if (packed())
- {
- for (Field<?,?> f : fields)
- {
- if (isBit(f))
- {
- f.has(this, true);
- f.read(dec, this);
- }
- else
- {
- f.has(this, dec.readBit());
- }
- }
-
- for (int i = 0; i < getReservedFlagCount(); i++)
- {
- if (dec.readBit())
- {
- throw new IllegalStateException("reserved flag true");
- }
- }
- }
-
- for (Field<?,?> f : fields)
- {
- if (encoded(f))
- {
- f.read(dec, this);
- }
- }
- }
-
- public final void write(Encoder enc)
- {
- List<Field<?,?>> fields = getFields();
+ public abstract void read(Decoder dec);
- assert fields.size() <= getFlagCount();
-
- if (packed())
- {
- for (Field<?,?> f : fields)
- {
- if (isBit(f))
- {
- f.write(enc, this);
- }
- else
- {
- enc.writeBit(f.has(this));
- }
- }
-
- for (int i = 0; i < getReservedFlagCount(); i++)
- {
- enc.writeBit(false);
- }
- }
-
- for (Field<?,?> f : fields)
- {
- if (encoded(f))
- {
- f.write(enc, this);
- }
- }
- }
+ public abstract void write(Encoder enc);
public String toString()
{