blob: 480182d5ee3e120cd1780d7daf1088d0b4bcd6e3 [file] [log] [blame]
Mark Sleee8540632006-05-30 09:24:40 +00001#ifndef T_BINARY_PROTOCOL_H
2#define T_BINARY_PROTOCOL_H
3
Marc Slemkod42a2c22006-08-10 03:30:18 +00004#include "TProtocol.h"
Marc Slemko16698852006-08-04 03:16:10 +00005
6#include <boost/shared_ptr.hpp>
Mark Sleee8540632006-05-30 09:24:40 +00007
Marc Slemko6f038a72006-08-03 18:58:09 +00008namespace facebook { namespace thrift { namespace protocol {
9
Marc Slemko16698852006-08-04 03:16:10 +000010using namespace boost;
11
Mark Sleee8540632006-05-30 09:24:40 +000012/**
13 * The default binary protocol for thrift. Writes all data in a very basic
14 * binary format, essentially just spitting out the raw bytes.
15 *
16 * @author Mark Slee <mcslee@facebook.com>
17 */
Marc Slemko0b4ffa92006-08-11 02:49:29 +000018 class TBinaryProtocol : public TProtocol {
19 public:
Mark Sleee8540632006-05-30 09:24:40 +000020 TBinaryProtocol() {}
21 ~TBinaryProtocol() {}
22
Mark Slee8d7e1f62006-06-07 06:48:56 +000023 /**
24 * Writing functions.
25 */
Mark Sleee8540632006-05-30 09:24:40 +000026
Marc Slemko16698852006-08-04 03:16:10 +000027 virtual uint32_t writeMessageBegin(shared_ptr<TTransport> out,
Marc Slemko91f67482006-08-11 23:58:57 +000028 const std::string name,
Marc Slemko16698852006-08-04 03:16:10 +000029 const TMessageType messageType,
30 const uint32_t seqid) const;
31
Marc Slemko0b4ffa92006-08-11 02:49:29 +000032 virtual uint32_t writeMessageEnd(shared_ptr<TTransport> out) const;
Marc Slemko16698852006-08-04 03:16:10 +000033
34
Marc Slemko0b4ffa92006-08-11 02:49:29 +000035 uint32_t writeStructBegin(shared_ptr<TTransport> out,
36 const std::string& name) const;
Mark Sleee8540632006-05-30 09:24:40 +000037
Marc Slemko0b4ffa92006-08-11 02:49:29 +000038 uint32_t writeStructEnd(shared_ptr<TTransport> out) const;
Mark Sleee8540632006-05-30 09:24:40 +000039
Marc Slemko0b4ffa92006-08-11 02:49:29 +000040 uint32_t writeFieldBegin(shared_ptr<TTransport> out,
41 const std::string& name,
42 const TType fieldType,
43 const int16_t fieldId) const;
Mark Slee8d7e1f62006-06-07 06:48:56 +000044
Marc Slemko0b4ffa92006-08-11 02:49:29 +000045 uint32_t writeFieldEnd(shared_ptr<TTransport> out) const;
Mark Slee8d7e1f62006-06-07 06:48:56 +000046
Marc Slemko0b4ffa92006-08-11 02:49:29 +000047 uint32_t writeFieldStop(shared_ptr<TTransport> out) const;
Mark Slee8d7e1f62006-06-07 06:48:56 +000048
Marc Slemko0b4ffa92006-08-11 02:49:29 +000049 uint32_t writeMapBegin(shared_ptr<TTransport> out,
50 const TType keyType,
51 const TType valType,
52 const int32_t size) const;
Mark Slee8d7e1f62006-06-07 06:48:56 +000053
Marc Slemko0b4ffa92006-08-11 02:49:29 +000054 uint32_t writeMapEnd(shared_ptr<TTransport> out) const;
Mark Slee8d7e1f62006-06-07 06:48:56 +000055
Marc Slemko0b4ffa92006-08-11 02:49:29 +000056 uint32_t writeListBegin(shared_ptr<TTransport> out,
57 const TType elemType,
58 const int32_t size) const;
Mark Slee8d7e1f62006-06-07 06:48:56 +000059
Marc Slemko0b4ffa92006-08-11 02:49:29 +000060 uint32_t writeListEnd(shared_ptr<TTransport> out) const;
Mark Slee8d7e1f62006-06-07 06:48:56 +000061
Marc Slemko0b4ffa92006-08-11 02:49:29 +000062 uint32_t writeSetBegin(shared_ptr<TTransport> out,
63 const TType elemType,
64 const int32_t size) const;
Mark Slee8d7e1f62006-06-07 06:48:56 +000065
Marc Slemko0b4ffa92006-08-11 02:49:29 +000066 uint32_t writeSetEnd(shared_ptr<TTransport> out) const;
Mark Slee8d7e1f62006-06-07 06:48:56 +000067
Marc Slemko0b4ffa92006-08-11 02:49:29 +000068 uint32_t writeBool(shared_ptr<TTransport> out,
69 const bool value) const;
Mark Slee8d7e1f62006-06-07 06:48:56 +000070
Marc Slemko0b4ffa92006-08-11 02:49:29 +000071 uint32_t writeByte(shared_ptr<TTransport> out,
72 const uint8_t byte) const;
Mark Slee8d7e1f62006-06-07 06:48:56 +000073
Marc Slemko0b4ffa92006-08-11 02:49:29 +000074 uint32_t writeU16(shared_ptr<TTransport> out,
75 const uint16_t u16) const;
Mark Slee8d7e1f62006-06-07 06:48:56 +000076
Marc Slemko0b4ffa92006-08-11 02:49:29 +000077 uint32_t writeI16(shared_ptr<TTransport> out,
78 const int16_t i16) const;
Mark Slee8d7e1f62006-06-07 06:48:56 +000079
Marc Slemko0b4ffa92006-08-11 02:49:29 +000080 uint32_t writeU32(shared_ptr<TTransport> out,
81 const uint32_t u32) const;
Mark Slee8d7e1f62006-06-07 06:48:56 +000082
Marc Slemko0b4ffa92006-08-11 02:49:29 +000083 uint32_t writeI32(shared_ptr<TTransport> out,
84 const int32_t i32) const;
85
86 uint32_t writeU64(shared_ptr<TTransport> out,
87 const uint64_t u64) const;
88
89 uint32_t writeI64(shared_ptr<TTransport> out,
90 const int64_t i64) const;
91
92 uint32_t writeString(shared_ptr<TTransport> out,
93 const std::string& str) const;
Mark Slee8d7e1f62006-06-07 06:48:56 +000094
95 /**
96 * Reading functions
97 */
98
Marc Slemko16698852006-08-04 03:16:10 +000099
Marc Slemkoe6889de2006-08-12 00:32:53 +0000100 uint32_t readMessageBegin(shared_ptr<TTransport> in,
101 std::string& name,
102 TMessageType& messageType,
103 uint32_t& seqid) const;
Marc Slemko16698852006-08-04 03:16:10 +0000104
Marc Slemko0b4ffa92006-08-11 02:49:29 +0000105 uint32_t readMessageEnd(shared_ptr<TTransport> in) const;
Marc Slemko16698852006-08-04 03:16:10 +0000106
Marc Slemko0b4ffa92006-08-11 02:49:29 +0000107 uint32_t readStructBegin(shared_ptr<TTransport> in,
108 std::string& name) const;
Mark Slee8d7e1f62006-06-07 06:48:56 +0000109
Marc Slemko0b4ffa92006-08-11 02:49:29 +0000110 uint32_t readStructEnd(shared_ptr<TTransport> in) const;
Mark Slee8d7e1f62006-06-07 06:48:56 +0000111
Marc Slemko0b4ffa92006-08-11 02:49:29 +0000112 uint32_t readFieldBegin(shared_ptr<TTransport> in,
113 std::string& name,
114 TType& fieldType,
115 int16_t& fieldId) const;
Mark Slee8d7e1f62006-06-07 06:48:56 +0000116
Marc Slemko0b4ffa92006-08-11 02:49:29 +0000117 uint32_t readFieldEnd(shared_ptr<TTransport> in) const;
Mark Slee8d7e1f62006-06-07 06:48:56 +0000118
Marc Slemko0b4ffa92006-08-11 02:49:29 +0000119 uint32_t readMapBegin(shared_ptr<TTransport> in,
120 TType& keyType,
121 TType& valType,
122 int32_t& size) const;
Mark Slee8d7e1f62006-06-07 06:48:56 +0000123
Marc Slemko0b4ffa92006-08-11 02:49:29 +0000124 uint32_t readMapEnd(shared_ptr<TTransport> in) const;
Mark Slee8d7e1f62006-06-07 06:48:56 +0000125
Marc Slemko0b4ffa92006-08-11 02:49:29 +0000126 uint32_t readListBegin(shared_ptr<TTransport> in,
127 TType& elemType,
128 int32_t& size) const;
Mark Slee8d7e1f62006-06-07 06:48:56 +0000129
Marc Slemko0b4ffa92006-08-11 02:49:29 +0000130 uint32_t readListEnd(shared_ptr<TTransport> in) const;
Mark Slee8d7e1f62006-06-07 06:48:56 +0000131
Marc Slemko0b4ffa92006-08-11 02:49:29 +0000132 uint32_t readSetBegin(shared_ptr<TTransport> in,
133 TType& elemType,
134 int32_t& size) const;
Mark Slee8d7e1f62006-06-07 06:48:56 +0000135
Marc Slemko0b4ffa92006-08-11 02:49:29 +0000136 uint32_t readSetEnd(shared_ptr<TTransport> in) const;
Mark Slee8d7e1f62006-06-07 06:48:56 +0000137
Marc Slemko0b4ffa92006-08-11 02:49:29 +0000138 uint32_t readBool(shared_ptr<TTransport> in,
139 bool& value) const;
Mark Slee8d7e1f62006-06-07 06:48:56 +0000140
Marc Slemko0b4ffa92006-08-11 02:49:29 +0000141 uint32_t readByte(shared_ptr<TTransport> in,
142 uint8_t& byte) const;
Mark Slee8d7e1f62006-06-07 06:48:56 +0000143
Marc Slemko0b4ffa92006-08-11 02:49:29 +0000144 uint32_t readU16(shared_ptr<TTransport> in,
145 uint16_t& u16) const;
Mark Slee8d7e1f62006-06-07 06:48:56 +0000146
Marc Slemko0b4ffa92006-08-11 02:49:29 +0000147 uint32_t readI16(shared_ptr<TTransport> in,
148 int16_t& i16) const;
Mark Slee8d7e1f62006-06-07 06:48:56 +0000149
Marc Slemko0b4ffa92006-08-11 02:49:29 +0000150 uint32_t readU32(shared_ptr<TTransport> in,
151 uint32_t& u32) const;
Mark Slee8d7e1f62006-06-07 06:48:56 +0000152
Marc Slemko0b4ffa92006-08-11 02:49:29 +0000153 uint32_t readI32(shared_ptr<TTransport> in,
154 int32_t& i32) const;
Mark Slee8d7e1f62006-06-07 06:48:56 +0000155
Marc Slemko0b4ffa92006-08-11 02:49:29 +0000156 uint32_t readU64(shared_ptr<TTransport> in,
157 uint64_t& u64) const;
158
159 uint32_t readI64(shared_ptr<TTransport> in,
160 int64_t& i64) const;
161
162 uint32_t readString(shared_ptr<TTransport> in,
163 std::string& str) const;
Mark Sleee8540632006-05-30 09:24:40 +0000164};
165
Marc Slemko6f038a72006-08-03 18:58:09 +0000166}}} // facebook::thrift::protocol
167
Mark Sleee8540632006-05-30 09:24:40 +0000168#endif
Marc Slemko6f038a72006-08-03 18:58:09 +0000169