| Mark Slee | f5f2be4 | 2006-09-05 21:05:31 +0000 | [diff] [blame] | 1 | #ifndef _THRIFT_PROTOCOL_TBINARYPROTOCOL_H_ | 
 | 2 | #define _THRIFT_PROTOCOL_TBINARYPROTOCOL_H_ 1 | 
| Mark Slee | e854063 | 2006-05-30 09:24:40 +0000 | [diff] [blame] | 3 |  | 
| Marc Slemko | d42a2c2 | 2006-08-10 03:30:18 +0000 | [diff] [blame] | 4 | #include "TProtocol.h" | 
| Marc Slemko | 1669885 | 2006-08-04 03:16:10 +0000 | [diff] [blame] | 5 |  | 
 | 6 | #include <boost/shared_ptr.hpp> | 
| Mark Slee | e854063 | 2006-05-30 09:24:40 +0000 | [diff] [blame] | 7 |  | 
| Marc Slemko | 6f038a7 | 2006-08-03 18:58:09 +0000 | [diff] [blame] | 8 | namespace facebook { namespace thrift { namespace protocol {  | 
 | 9 |  | 
| Marc Slemko | 1669885 | 2006-08-04 03:16:10 +0000 | [diff] [blame] | 10 | using namespace boost; | 
 | 11 |  | 
| Mark Slee | e854063 | 2006-05-30 09:24:40 +0000 | [diff] [blame] | 12 | /** | 
 | 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 Slemko | 0b4ffa9 | 2006-08-11 02:49:29 +0000 | [diff] [blame] | 18 |     class TBinaryProtocol : public TProtocol { | 
 | 19 |  public: | 
| Aditya Agarwal | 9abb0d6 | 2007-01-24 22:53:54 +0000 | [diff] [blame] | 20 |   TBinaryProtocol(shared_ptr<TTransport> trans) : | 
 | 21 |     TProtocol(trans) {} | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 22 |  | 
| Mark Slee | e854063 | 2006-05-30 09:24:40 +0000 | [diff] [blame] | 23 |   ~TBinaryProtocol() {} | 
 | 24 |  | 
| Mark Slee | 8d7e1f6 | 2006-06-07 06:48:56 +0000 | [diff] [blame] | 25 |   /** | 
 | 26 |    * Writing functions. | 
 | 27 |    */ | 
| Mark Slee | e854063 | 2006-05-30 09:24:40 +0000 | [diff] [blame] | 28 |  | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 29 |   virtual uint32_t writeMessageBegin(const std::string name, | 
| Marc Slemko | 1669885 | 2006-08-04 03:16:10 +0000 | [diff] [blame] | 30 | 				     const TMessageType messageType, | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 31 | 				     const int32_t seqid); | 
| Marc Slemko | 1669885 | 2006-08-04 03:16:10 +0000 | [diff] [blame] | 32 |  | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 33 |   virtual uint32_t writeMessageEnd(); | 
| Marc Slemko | 1669885 | 2006-08-04 03:16:10 +0000 | [diff] [blame] | 34 |  | 
 | 35 |  | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 36 |   uint32_t writeStructBegin(const std::string& name); | 
| Mark Slee | e854063 | 2006-05-30 09:24:40 +0000 | [diff] [blame] | 37 |  | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 38 |   uint32_t writeStructEnd(); | 
| Mark Slee | e854063 | 2006-05-30 09:24:40 +0000 | [diff] [blame] | 39 |  | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 40 |   uint32_t writeFieldBegin(const std::string& name, | 
 | 41 |                            const TType fieldType, | 
 | 42 |                            const int16_t fieldId); | 
| Mark Slee | 8d7e1f6 | 2006-06-07 06:48:56 +0000 | [diff] [blame] | 43 |  | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 44 |   uint32_t writeFieldEnd(); | 
| Mark Slee | 8d7e1f6 | 2006-06-07 06:48:56 +0000 | [diff] [blame] | 45 |  | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 46 |   uint32_t writeFieldStop(); | 
| Mark Slee | 8d7e1f6 | 2006-06-07 06:48:56 +0000 | [diff] [blame] | 47 |                                         | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 48 |   uint32_t writeMapBegin(const TType keyType, | 
 | 49 |                          const TType valType, | 
 | 50 |                          const uint32_t size); | 
| Mark Slee | 8d7e1f6 | 2006-06-07 06:48:56 +0000 | [diff] [blame] | 51 |  | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 52 |   uint32_t writeMapEnd(); | 
| Mark Slee | 8d7e1f6 | 2006-06-07 06:48:56 +0000 | [diff] [blame] | 53 |  | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 54 |   uint32_t writeListBegin(const TType elemType, | 
 | 55 |                           const uint32_t size); | 
| Mark Slee | 8d7e1f6 | 2006-06-07 06:48:56 +0000 | [diff] [blame] | 56 |  | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 57 |   uint32_t writeListEnd(); | 
| Mark Slee | 8d7e1f6 | 2006-06-07 06:48:56 +0000 | [diff] [blame] | 58 |  | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 59 |   uint32_t writeSetBegin(const TType elemType, | 
 | 60 |                          const uint32_t size); | 
| Mark Slee | 8d7e1f6 | 2006-06-07 06:48:56 +0000 | [diff] [blame] | 61 |  | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 62 |   uint32_t writeSetEnd(); | 
| Mark Slee | 8d7e1f6 | 2006-06-07 06:48:56 +0000 | [diff] [blame] | 63 |  | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 64 |   uint32_t writeBool(const bool value); | 
| Mark Slee | 8d7e1f6 | 2006-06-07 06:48:56 +0000 | [diff] [blame] | 65 |  | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 66 |   uint32_t writeByte(const int8_t byte); | 
| Mark Slee | 8d7e1f6 | 2006-06-07 06:48:56 +0000 | [diff] [blame] | 67 |  | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 68 |   uint32_t writeI16(const int16_t i16); | 
| Mark Slee | 8d7e1f6 | 2006-06-07 06:48:56 +0000 | [diff] [blame] | 69 |  | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 70 |   uint32_t writeI32(const int32_t i32); | 
| Marc Slemko | 0b4ffa9 | 2006-08-11 02:49:29 +0000 | [diff] [blame] | 71 |  | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 72 |   uint32_t writeI64(const int64_t i64); | 
| Marc Slemko | 0b4ffa9 | 2006-08-11 02:49:29 +0000 | [diff] [blame] | 73 |  | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 74 |   uint32_t writeDouble(const double dub); | 
| Mark Slee | c98d050 | 2006-09-06 02:42:25 +0000 | [diff] [blame] | 75 |  | 
 | 76 |  | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 77 |   uint32_t writeString(const std::string& str); | 
| Mark Slee | 8d7e1f6 | 2006-06-07 06:48:56 +0000 | [diff] [blame] | 78 |  | 
 | 79 |   /** | 
 | 80 |    * Reading functions | 
 | 81 |    */ | 
 | 82 |  | 
| Marc Slemko | 1669885 | 2006-08-04 03:16:10 +0000 | [diff] [blame] | 83 |  | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 84 |   uint32_t readMessageBegin(std::string& name, | 
| Marc Slemko | e6889de | 2006-08-12 00:32:53 +0000 | [diff] [blame] | 85 | 			    TMessageType& messageType, | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 86 | 			    int32_t& seqid); | 
| Marc Slemko | 1669885 | 2006-08-04 03:16:10 +0000 | [diff] [blame] | 87 |  | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 88 |   uint32_t readMessageEnd(); | 
| Marc Slemko | 1669885 | 2006-08-04 03:16:10 +0000 | [diff] [blame] | 89 |  | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 90 |   uint32_t readStructBegin(std::string& name); | 
| Mark Slee | 8d7e1f6 | 2006-06-07 06:48:56 +0000 | [diff] [blame] | 91 |  | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 92 |   uint32_t readStructEnd(); | 
| Mark Slee | 8d7e1f6 | 2006-06-07 06:48:56 +0000 | [diff] [blame] | 93 |  | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 94 |   uint32_t readFieldBegin(std::string& name, | 
 | 95 | 			  TType& fieldType, | 
 | 96 | 			  int16_t& fieldId); | 
| Mark Slee | 8d7e1f6 | 2006-06-07 06:48:56 +0000 | [diff] [blame] | 97 |    | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 98 |   uint32_t readFieldEnd(); | 
| Mark Slee | 8d7e1f6 | 2006-06-07 06:48:56 +0000 | [diff] [blame] | 99 |   | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 100 |   uint32_t readMapBegin(TType& keyType, | 
 | 101 | 			TType& valType, | 
 | 102 | 			uint32_t& size); | 
| Mark Slee | 8d7e1f6 | 2006-06-07 06:48:56 +0000 | [diff] [blame] | 103 |  | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 104 |   uint32_t readMapEnd(); | 
| Mark Slee | 8d7e1f6 | 2006-06-07 06:48:56 +0000 | [diff] [blame] | 105 |  | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 106 |   uint32_t readListBegin(TType& elemType, | 
 | 107 |                          uint32_t& size); | 
| Mark Slee | 8d7e1f6 | 2006-06-07 06:48:56 +0000 | [diff] [blame] | 108 |    | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 109 |   uint32_t readListEnd(); | 
| Mark Slee | 8d7e1f6 | 2006-06-07 06:48:56 +0000 | [diff] [blame] | 110 |  | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 111 |   uint32_t readSetBegin(TType& elemType, | 
 | 112 | 			uint32_t& size); | 
| Mark Slee | 8d7e1f6 | 2006-06-07 06:48:56 +0000 | [diff] [blame] | 113 |  | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 114 |   uint32_t readSetEnd(); | 
| Mark Slee | 8d7e1f6 | 2006-06-07 06:48:56 +0000 | [diff] [blame] | 115 |  | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 116 |   uint32_t readBool(bool& value); | 
| Mark Slee | 8d7e1f6 | 2006-06-07 06:48:56 +0000 | [diff] [blame] | 117 |  | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 118 |   uint32_t readByte(int8_t& byte); | 
| Mark Slee | 8d7e1f6 | 2006-06-07 06:48:56 +0000 | [diff] [blame] | 119 |  | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 120 |   uint32_t readI16(int16_t& i16); | 
| Mark Slee | 8d7e1f6 | 2006-06-07 06:48:56 +0000 | [diff] [blame] | 121 |  | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 122 |   uint32_t readI32(int32_t& i32); | 
| Mark Slee | 8d7e1f6 | 2006-06-07 06:48:56 +0000 | [diff] [blame] | 123 |  | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 124 |   uint32_t readI64(int64_t& i64); | 
| Marc Slemko | 0b4ffa9 | 2006-08-11 02:49:29 +0000 | [diff] [blame] | 125 |  | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 126 |   uint32_t readDouble(double& dub); | 
| Mark Slee | c98d050 | 2006-09-06 02:42:25 +0000 | [diff] [blame] | 127 |  | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 128 |   uint32_t readString(std::string& str); | 
 | 129 | }; | 
 | 130 |  | 
 | 131 | /** | 
 | 132 |  * Constructs binary protocol handlers | 
 | 133 |  */ | 
 | 134 | class TBinaryProtocolFactory : public TProtocolFactory { | 
 | 135 |  public: | 
 | 136 |   TBinaryProtocolFactory() {} | 
 | 137 |  | 
 | 138 |   virtual ~TBinaryProtocolFactory() {} | 
 | 139 |  | 
| Aditya Agarwal | 9abb0d6 | 2007-01-24 22:53:54 +0000 | [diff] [blame] | 140 |   boost::shared_ptr<TProtocol> getProtocol(boost::shared_ptr<TTransport> trans) { | 
 | 141 |     return boost::shared_ptr<TProtocol>(new TBinaryProtocol(trans)); | 
| Mark Slee | 4af6ed7 | 2006-10-25 19:02:49 +0000 | [diff] [blame] | 142 |   } | 
| Mark Slee | e854063 | 2006-05-30 09:24:40 +0000 | [diff] [blame] | 143 | }; | 
 | 144 |  | 
| Marc Slemko | 6f038a7 | 2006-08-03 18:58:09 +0000 | [diff] [blame] | 145 | }}} // facebook::thrift::protocol | 
 | 146 |  | 
| Mark Slee | f5f2be4 | 2006-09-05 21:05:31 +0000 | [diff] [blame] | 147 | #endif // #ifndef _THRIFT_PROTOCOL_TBINARYPROTOCOL_H_ | 
 | 148 |  | 
| Marc Slemko | 6f038a7 | 2006-08-03 18:58:09 +0000 | [diff] [blame] | 149 |  |