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()
     {