00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <string>
00022 #include <ostream>
00023 #include <iostream>
00024 #include "qpid/framing/amqp_framing.h"
00025 #include "qpid/framing/AMQFrame.h"
00026 #include "qpid/framing/Buffer.h"
00027
00028 #ifndef _frame_functors_
00029 #define _frame_functors_
00030
00031 namespace qpid {
00032 namespace framing {
00033
00034 class SumFrameSize
00035 {
00036 uint64_t size;
00037 public:
00038 SumFrameSize() : size(0) {}
00039 void operator()(const AMQFrame& f) { size += f.size(); }
00040 uint64_t getSize() { return size; }
00041 };
00042
00043 class SumBodySize
00044 {
00045 uint64_t size;
00046 public:
00047 SumBodySize() : size(0) {}
00048 void operator()(const AMQFrame& f) { size += f.getBody()->size(); }
00049 uint64_t getSize() { return size; }
00050 };
00051
00052 class Count
00053 {
00054 uint count;
00055 public:
00056 Count() : count(0) {}
00057 void operator()(const AMQFrame&) { count++; }
00058 uint getCount() { return count; }
00059 };
00060
00061 class EncodeFrame
00062 {
00063 Buffer& buffer;
00064 public:
00065 EncodeFrame(Buffer& b) : buffer(b) {}
00066 void operator()(const AMQFrame& f) { f.encode(buffer); }
00067 };
00068
00069 class EncodeBody
00070 {
00071 Buffer& buffer;
00072 public:
00073 EncodeBody(Buffer& b) : buffer(b) {}
00074 void operator()(const AMQFrame& f) { f.getBody()->encode(buffer); }
00075 };
00076
00080 class Relay
00081 {
00082 FrameHandler& handler;
00083
00084 public:
00085 Relay(FrameHandler& h) : handler(h) {}
00086
00087 void operator()(const AMQFrame& f)
00088 {
00089 AMQFrame copy(f);
00090 handler.handle(copy);
00091 }
00092 };
00093
00094 class Print
00095 {
00096 std::ostream& out;
00097 public:
00098 Print(std::ostream& o) : out(o) {}
00099
00100 void operator()(const AMQFrame& f)
00101 {
00102 out << f << std::endl;
00103 }
00104 };
00105
00106 class MarkLastSegment
00107 {
00108 public:
00109 void operator()(AMQFrame& f) const { f.setEof(true); }
00110 };
00111
00112 }
00113 }
00114
00115
00116 #endif