From f82c2029963a67ee6586ab03c7f5ef3f2a728c0b Mon Sep 17 00:00:00 2001 From: Alan Conway Date: Thu, 9 Aug 2007 22:31:59 +0000 Subject: * src/qpid/framing/MethodHolder.h, .cpp: Replace boost::variant with Blob. * rubygen/templates/MethodHolder.rb: Generate support files for Blob-based MethodHolder. * src/Makefile.am: generate MethodHolder suppport files. * rubygen/cppgen.rb: Minor fixes/enhancements. git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@564409 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/framing/MethodHolder.cpp | 59 +++++++---------------------------- 1 file changed, 11 insertions(+), 48 deletions(-) (limited to 'cpp/src/qpid/framing/MethodHolder.cpp') diff --git a/cpp/src/qpid/framing/MethodHolder.cpp b/cpp/src/qpid/framing/MethodHolder.cpp index 27046af43c..cc0800a1e8 100644 --- a/cpp/src/qpid/framing/MethodHolder.cpp +++ b/cpp/src/qpid/framing/MethodHolder.cpp @@ -20,74 +20,37 @@ */ #include "MethodHolder.h" -#include "amqp_types.h" +#include "qpid/framing/AMQMethodBody.h" #include "qpid/framing/Buffer.h" #include "qpid/framing/variant.h" +// Note: MethodHolder::construct is in a separate generated file +// MethodHolder_construct.cpp + using namespace boost; namespace qpid { namespace framing { -struct SetVariantVisitor : public NoBlankVisitor<> { - QPID_USING_NOBLANK(); - MethodId id; - SetVariantVisitor(MethodId m) : id(m) {} - template void operator()(T& t) const { setVariant(t, id); } -}; - -inline void setVariant(MethodVariant& var, ClassId c, MethodId m) { - setVariant(var,c); - boost::apply_visitor(SetVariantVisitor(m), var); -} - -void MethodHolder::setMethod(ClassId c, MethodId m) { - setVariant(method, c, m); -} - -MethodHolder::MethodHolder(ClassId c, MethodId m) { - setMethod(c,m); -} - -struct GetClassId : public NoBlankVisitor { - QPID_USING_NOBLANK(ClassId); - template ClassId operator()(const T&) const { - return T::CLASS_ID; - } -}; - -struct GetMethodId : public NoBlankVisitor { - QPID_USING_NOBLANK(ClassId); - template MethodId operator()(const T&) const { - return T::METHOD_ID; - } -}; - void MethodHolder::encode(Buffer& b) const { - const AMQMethodBody* body = getMethod(); + const AMQMethodBody* body = get(); b.putShort(body->amqpClassId()); b.putShort(body->amqpMethodId()); body->encodeContent(b); } void MethodHolder::decode(Buffer& b) { - ClassId classId = b.getShort(); - ClassId methodId = b.getShort(); - setVariant(method, classId, methodId); - getMethod()->decodeContent(b); + construct(std::make_pair(b.getShort(), b.getShort())); + get()->decodeContent(b); } uint32_t MethodHolder::size() const { - return sizeof(ClassId)+sizeof(MethodId)+getMethod()->size(); -} - - -AMQMethodBody* MethodHolder::getMethod() { - return applyApplyVisitor(AddressVisitor(), method); + return sizeof(Id)+get()->size(); } -const AMQMethodBody* MethodHolder::getMethod() const { - return const_cast(this)->getMethod(); +std::ostream& operator<<(std::ostream& out, const MethodHolder& h) { + h.get()->print(out); + return out; } }} // namespace qpid::framing -- cgit v1.2.1