diff options
| author | Alan Conway <aconway@apache.org> | 2007-02-02 22:03:10 +0000 |
|---|---|---|
| committer | Alan Conway <aconway@apache.org> | 2007-02-02 22:03:10 +0000 |
| commit | b5c270f10496f522ef6a03a8fa60f85d55c9187d (patch) | |
| tree | 714e7abf7ba591d00232d821440e51461175cb9e /gentools/src | |
| parent | 750f272ac99e8c830807affb3ae68ab0beeca63f (diff) | |
| download | qpid-python-b5c270f10496f522ef6a03a8fa60f85d55c9187d.tar.gz | |
* cpp/lib/common/framing/MethodContext.h: Reduced MethodContext to
ChannelAdapter and Method Body. Request ID comes from body,
ChannelAdapter is used to send frames, not OutputHandler.
* cpp/lib/common/framing/ChannelAdapter.h,.cpp: Removed context member.
Context is per-method not per-channel.
* cpp/lib/broker/*: Replace direct use of OutputHandler and ChannelId
with MethodContext (for responses) or ChannelAdapter (for requests.)
Use context request-ID to construct responses, send all bodies via
ChannelAdapter.
* cpp/lib/broker/BrokerAdapter.cpp: Link broker::Channel to BrokerAdapter.
* cpp/lib/broker/*: Remove unnecessary ProtocolVersion parameters.
Fix bogus signatures: ProtocolVersion* -> const ProtocolVersion&
* Cosmetic changes, many files:
- fixed indentation, broke long lines.
- removed unnecessary qpid:: prefixes.
* broker/BrokerAdapter,BrokerChannel: Merged BrokerAdapter into
broker::channel.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/branches/qpid.0-9@502767 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'gentools/src')
| -rw-r--r-- | gentools/src/org/apache/qpid/gentools/AmqpMethod.java | 6 | ||||
| -rw-r--r-- | gentools/src/org/apache/qpid/gentools/CppGenerator.java | 40 |
2 files changed, 30 insertions, 16 deletions
diff --git a/gentools/src/org/apache/qpid/gentools/AmqpMethod.java b/gentools/src/org/apache/qpid/gentools/AmqpMethod.java index 0efa9ae260..f3c5bdd935 100644 --- a/gentools/src/org/apache/qpid/gentools/AmqpMethod.java +++ b/gentools/src/org/apache/qpid/gentools/AmqpMethod.java @@ -36,7 +36,7 @@ public class AmqpMethod implements Printable, NodeAware, VersionConsistencyCheck public AmqpFlagMap clientMethodFlagMap; // Method called on client (<chassis name="server"> in XML) public AmqpFlagMap serverMethodFlagMap; // Method called on server (<chassis name="client"> in XML) public AmqpFlagMap isResponseFlagMap; - + public AmqpMethod(String name, LanguageConverter converter) { this.name = name; @@ -49,6 +49,10 @@ public class AmqpMethod implements Printable, NodeAware, VersionConsistencyCheck isResponseFlagMap = new AmqpFlagMap(); } + public boolean isResponse(AmqpVersion version) { + return (version == null) ? isResponseFlagMap.isSet() : isResponseFlagMap.isSet(version); + } + /** Check if this method is named as a response by any other method in the class. */ public void checkForResponse(Element methodElement, AmqpVersion version) { Element clazz = (Element)methodElement.getParentNode(); diff --git a/gentools/src/org/apache/qpid/gentools/CppGenerator.java b/gentools/src/org/apache/qpid/gentools/CppGenerator.java index 122a5b0820..8b6a7eb49c 100644 --- a/gentools/src/org/apache/qpid/gentools/CppGenerator.java +++ b/gentools/src/org/apache/qpid/gentools/CppGenerator.java @@ -361,8 +361,7 @@ public class CppGenerator extends Generator } private String baseClass(AmqpMethod method, AmqpVersion version) { - boolean isResponse = (version == null) ? method.isResponseFlagMap.isSet() : method.isResponseFlagMap.isSet(version); - String base = isResponse ? "AMQResponseBody":"AMQRequestBody"; + String base = method.isResponse(version) ? "AMQResponseBody":"AMQRequestBody"; return base; } @@ -1009,7 +1008,7 @@ public class CppGenerator extends Generator sb.append(" // AMQP Version(s) " + versionSet); sb.append(cr); sb.append(indent + "{" + cr); - sb.append(generateMethodBodyCallContext(thisFieldMap, outerclassName, methodBodyClassName, + sb.append(generateMethodBodyCallContext(method, thisFieldMap, outerclassName, methodBodyClassName, versionConsistentFlag, versionSet, indentSize + tabSize, tabSize)); sb.append(indent + "}" + cr); sb.append(cr); @@ -1020,7 +1019,7 @@ public class CppGenerator extends Generator return sb.toString(); } - protected String generateMethodBodyCallContext(AmqpOrdinalFieldMap fieldMap, String outerclassName, + protected String generateMethodBodyCallContext(AmqpMethod method, AmqpOrdinalFieldMap fieldMap, String outerclassName, String methodBodyClassName, boolean versionConsistentFlag, AmqpVersionSet versionSet, int indentSize, int tabSize) throws AmqpTypeMappingException @@ -1030,7 +1029,7 @@ public class CppGenerator extends Generator StringBuffer sb = new StringBuffer(); if (versionConsistentFlag) { - sb.append(generateMethodBodyCall(fieldMap, methodBodyClassName, null, indentSize, tabSize)); + sb.append(generateMethodBodyCall(method, fieldMap, methodBodyClassName, null, indentSize, tabSize)); } else { @@ -1042,7 +1041,7 @@ public class CppGenerator extends Generator sb.append("else "); sb.append("if (" + generateVersionCheck(thisVersion) + ")" + cr); sb.append(indent + "{" + cr); - sb.append(generateMethodBodyCall(fieldMap, methodBodyClassName, thisVersion, + sb.append(generateMethodBodyCall(method, fieldMap, methodBodyClassName, thisVersion, indentSize + tabSize, tabSize)); sb.append(indent + "}" + cr); firstOverloadedMethodFlag = false; @@ -1059,7 +1058,7 @@ public class CppGenerator extends Generator return sb.toString(); } - protected String generateMethodBodyCall(AmqpOrdinalFieldMap fieldMap, String methodBodyClassName, + protected String generateMethodBodyCall(AmqpMethod method, AmqpOrdinalFieldMap fieldMap, String methodBodyClassName, AmqpVersion version, int indentSize, int tabSize) throws AmqpTypeMappingException { @@ -1067,9 +1066,12 @@ public class CppGenerator extends Generator String tab = Utils.createSpaces(tabSize); String namespace = version != null ? version.namespace() + "::" : ""; StringBuffer sb = new StringBuffer(); - sb.append(indent + tab + "(new " + namespace + methodBodyClassName + "( parent->getProtocolVersion()"); + sb.append(indent+tab+"context.channel->send(new "); + sb.append(namespace + methodBodyClassName + "( parent->getProtocolVersion()"); + if (method.isResponse(version)) + sb.append(", context.methodBody->getRequestId()"); sb.append(generateMethodParameterList(fieldMap, indentSize + (5*tabSize), true, false, true)); - sb.append("))->send(context);\n"); + sb.append("));\n"); return sb.toString(); } @@ -1425,14 +1427,22 @@ public class CppGenerator extends Generator String indent = Utils.createSpaces(indentSize); String tab = Utils.createSpaces(tabSize); StringBuffer sb = new StringBuffer(); - if (method.fieldMap.size() > 0) + if (method.fieldMap.size() > 0 || method.isResponse(version)) { sb.append(indent + thisClass.name + Utils.firstUpper(method.name) + "Body(const ProtocolVersion& version," + cr); - sb.append(generateFieldList(method.fieldMap, version, true, false, 8)); - sb.append(indent + tab + ") :" + cr); - sb.append(indent + tab + baseClass(method, version) + "(version)," + cr); - sb.append(generateFieldList(method.fieldMap, version, false, true, 8)); - sb.append(indent + "{ }" + cr); + if (method.isResponse(version)) { + sb.append(indent+tab+"RequestId toRequest"); + if (method.fieldMap.size() >0) + sb.append(",\n"); + } + sb.append(generateFieldList(method.fieldMap, version, true, false, 8)); + sb.append(indent + tab + ") : " + baseClass(method, version) + "(version"); + if (method.isResponse(version)) + sb.append(", 0, toRequest"); + sb.append(")"); + if (method.fieldMap.size() > 0) + sb.append(", \n" + generateFieldList(method.fieldMap, version, false, true, 8)); + sb.append(indent + "{ }\n"); } return sb.toString(); } |
