summaryrefslogtreecommitdiff
path: root/cpp/managementgen/qmfgen/schema.py
diff options
context:
space:
mode:
authorTed Ross <tross@apache.org>2010-02-03 13:35:58 +0000
committerTed Ross <tross@apache.org>2010-02-03 13:35:58 +0000
commita3b1f4cf9b875eea454fdc883c391393d45363b7 (patch)
treef8bdf8bb71db05306272e0df5da38014d3a273cc /cpp/managementgen/qmfgen/schema.py
parentb5d89088886b2d745c8bbdab747463bcd8679893 (diff)
downloadqpid-python-a3b1f4cf9b875eea454fdc883c391393d45363b7.tar.gz
Changes to management code generation:
1) Added readProperties(Buffer) method to ManagementObject to help in the serialization and unserialization of data for cluster replication. 2) Added hooks to ManagementObject and ObjectId to prepare for QMFv2 object naming. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@906038 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/managementgen/qmfgen/schema.py')
-rwxr-xr-xcpp/managementgen/qmfgen/schema.py33
1 files changed, 33 insertions, 0 deletions
diff --git a/cpp/managementgen/qmfgen/schema.py b/cpp/managementgen/qmfgen/schema.py
index 3b53830c69..51466c7860 100755
--- a/cpp/managementgen/qmfgen/schema.py
+++ b/cpp/managementgen/qmfgen/schema.py
@@ -58,6 +58,7 @@ class SchemaType:
self.encode = None
self.decode = None
self.style = "normal"
+ self.stream = "#"
self.accessor = None
self.init = "0"
self.perThread = False
@@ -85,6 +86,9 @@ class SchemaType:
elif key == 'style':
self.style = val
+ elif key == 'stream':
+ self.stream = val
+
elif key == 'accessor':
self.accessor = val
@@ -200,6 +204,9 @@ class SchemaType:
stream.write (" threadStats->" + varName + "Min = std::numeric_limits<" + cpptype + ">::max();\n")
stream.write (" threadStats->" + varName + "Max = std::numeric_limits<" + cpptype + ">::min();\n")
+ def genRead (self, stream, varName, indent=" "):
+ stream.write(indent + self.decode.replace("@", "buf").replace("#", varName) + ";\n")
+
def genWrite (self, stream, varName, indent=" "):
if self.style != "mma":
stream.write (indent + self.encode.replace ("@", "buf").replace ("#", varName) + ";\n")
@@ -381,6 +388,15 @@ class SchemaProperty:
stream.write (" ft.setString (DESC, \"" + self.desc + "\");\n")
stream.write (" buf.put (ft);\n\n")
+ def genRead (self, stream):
+ indent = " "
+ if self.isOptional:
+ stream.write(" if (presenceMask[presenceByte_%s] & presenceMask_%s) {\n" % (self.name, self.name))
+ indent = " "
+ self.type.type.genRead (stream, self.name, indent)
+ if self.isOptional:
+ stream.write(" }\n")
+
def genWrite (self, stream):
indent = " "
if self.isOptional:
@@ -1054,6 +1070,19 @@ class SchemaClass:
if element.type.type.perThread:
element.genDeclaration (stream, " ")
+ def genPrimaryKey (self, stream, variables):
+ first = 1
+ for prop in self.properties:
+ if prop.isIndex == 1:
+ if first:
+ first = None
+ else:
+ stream.write(" << \",\";\n")
+ var = prop.type.type.stream.replace("#", prop.getName())
+ stream.write(" key << %s" % var)
+ if not first:
+ stream.write(";")
+
def genNamespace (self, stream, variables):
stream.write("::".join(self.packageName.split(".")))
@@ -1182,6 +1211,10 @@ class SchemaClass:
if inst.type.type.perThread:
inst.genAssign (stream)
+ def genReadProperties (self, stream, variables):
+ for prop in self.properties:
+ prop.genRead (stream)
+
def genWriteProperties (self, stream, variables):
for prop in self.properties:
prop.genWrite (stream)