diff options
author | Gordon Sim <gsim@apache.org> | 2007-08-22 08:54:54 +0000 |
---|---|---|
committer | Gordon Sim <gsim@apache.org> | 2007-08-22 08:54:54 +0000 |
commit | 4a362885479d9d8de7d922db60ca220c537afa11 (patch) | |
tree | cae7eeb5a43f87b5e5fce41a0e46f79c01ec56ea | |
parent | 9ef0c3dc8bc5ef4af668a3c19f8e254fb5e01ada (diff) | |
download | qpid-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.rb | 4 | ||||
-rw-r--r-- | cpp/rubygen/templates/structs.rb | 39 | ||||
-rw-r--r-- | cpp/src/qpid/framing/AMQMethodBody.cpp | 15 | ||||
-rw-r--r-- | cpp/src/qpid/framing/AMQMethodBody.h | 4 |
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; |