summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2007-08-22 08:54:54 +0000
committerGordon Sim <gsim@apache.org>2007-08-22 08:54:54 +0000
commit4a362885479d9d8de7d922db60ca220c537afa11 (patch)
treecae7eeb5a43f87b5e5fce41a0e46f79c01ec56ea
parent9ef0c3dc8bc5ef4af668a3c19f8e254fb5e01ada (diff)
downloadqpid-python-4a362885479d9d8de7d922db60ca220c537afa11.tar.gz
Reapply rev 568249 with the changes made to the generator this time, rather than the generated file itself.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@568517 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--cpp/rubygen/templates/InvocationVisitor.rb4
-rw-r--r--cpp/rubygen/templates/structs.rb39
-rw-r--r--cpp/src/qpid/framing/AMQMethodBody.cpp15
-rw-r--r--cpp/src/qpid/framing/AMQMethodBody.h4
4 files changed, 19 insertions, 43 deletions
diff --git a/cpp/rubygen/templates/InvocationVisitor.rb b/cpp/rubygen/templates/InvocationVisitor.rb
index f3ac03ece2..7017872176 100644
--- a/cpp/rubygen/templates/InvocationVisitor.rb
+++ b/cpp/rubygen/templates/InvocationVisitor.rb
@@ -71,8 +71,8 @@ EOS
}
genl "public:"
indent {
- genl "InvocationVisitor(AMQP_ServerOperations* _ops) : ops(_ops), invocable(0) {}"
- genl "InvocationVisitor(Invocable* _invocable) : ops(0), invocable(_invocable) {}"
+ genl "InvocationVisitor(AMQP_ServerOperations* _ops) : ops(_ops), invocable(0), succeeded(false) {}"
+ genl "InvocationVisitor(Invocable* _invocable) : ops(0), invocable(_invocable), succeeded(false) {}"
genl "const std::string& getResult() const { return result; }"
genl "const bool hasResult() const { return !result.empty(); }"
genl "bool wasHandled() const { return succeeded; }"
diff --git a/cpp/rubygen/templates/structs.rb b/cpp/rubygen/templates/structs.rb
index 972a0386b9..571a85b827 100644
--- a/cpp/rubygen/templates/structs.rb
+++ b/cpp/rubygen/templates/structs.rb
@@ -129,45 +129,6 @@ class StructGen < CppGen
inline ClassId amqpClassId() const { return CLASS_ID; }
inline MethodId amqpMethodId() const { return METHOD_ID; }
EOS
- if (s.is_server_method?)
- gen <<EOS
- void invoke(AMQP_ServerOperations& target)
- {
- target.get#{s.amqp_parent.cppname}Handler()->#{s.cppname}
- (
-EOS
- if (s.amqp_parent.name == "message" && (s.name == "transfer" || s.name == "append"))
- indent(4) { genl "*this" }
- else
- indent(4) { genl s.param_names.join(",\n") }
- end
-
- genl <<EOS
- );
- }
-
- bool invoke(Invocable* target)
- {
- AMQP_ServerOperations::#{s.amqp_parent.cppname}Handler* ptr
- = dynamic_cast<AMQP_ServerOperations::#{s.amqp_parent.cppname}Handler*>(target);
- if (ptr) {
- ptr->#{s.cppname}(
-EOS
- if (s.amqp_parent.name == "message" && (s.name == "transfer" || s.name == "append"))
- indent(5) { genl "*this" }
- else
- indent(5) { genl s.param_names.join(",\n") }
- end
-
- gen <<EOS
- );
- return true;
- } else {
- return false;
- }
- }
-EOS
- end
end
def define_constructor(name, s)
diff --git a/cpp/src/qpid/framing/AMQMethodBody.cpp b/cpp/src/qpid/framing/AMQMethodBody.cpp
index 924d906d43..48b50763fc 100644
--- a/cpp/src/qpid/framing/AMQMethodBody.cpp
+++ b/cpp/src/qpid/framing/AMQMethodBody.cpp
@@ -19,10 +19,25 @@
*
*/
#include "AMQMethodBody.h"
+#include "qpid/framing/InvocationVisitor.h"
namespace qpid {
namespace framing {
AMQMethodBody::~AMQMethodBody() {}
+void AMQMethodBody::invoke(AMQP_ServerOperations& ops)
+{
+ InvocationVisitor v(&ops);
+ accept(v);
+ assert(v.wasHandled());
+}
+
+bool AMQMethodBody::invoke(Invocable* invocable)
+{
+ InvocationVisitor v(invocable);
+ accept(v);
+ return v.wasHandled();
+}
+
}} // namespace qpid::framing
diff --git a/cpp/src/qpid/framing/AMQMethodBody.h b/cpp/src/qpid/framing/AMQMethodBody.h
index 9c776e143b..5acb3a7b66 100644
--- a/cpp/src/qpid/framing/AMQMethodBody.h
+++ b/cpp/src/qpid/framing/AMQMethodBody.h
@@ -50,8 +50,8 @@ class AMQMethodBody : public AMQBody {
virtual MethodId amqpMethodId() const = 0;
virtual ClassId amqpClassId() const = 0;
- virtual void invoke(AMQP_ServerOperations&) { assert(0); }
- virtual bool invoke(Invocable*) { return false; }
+ void invoke(AMQP_ServerOperations&);
+ bool invoke(Invocable*);
template <class T> bool isA() const {
return amqpClassId()==T::CLASS_ID && amqpMethodId()==T::METHOD_ID;