| 49 | }; |
| 50 | |
| 51 | int main() { |
| 52 | using namespace thrift::test::debug; |
| 53 | using namespace apache::thrift::transport; |
| 54 | using namespace apache::thrift::protocol; |
| 55 | using std::cout; |
| 56 | |
| 57 | OneOfEach ooe; |
| 58 | ooe.im_true = true; |
| 59 | ooe.im_false = false; |
| 60 | ooe.a_bite = 0x7f; |
| 61 | ooe.integer16 = 27000; |
| 62 | ooe.integer32 = 1 << 24; |
| 63 | ooe.integer64 = (uint64_t)6000 * 1000 * 1000; |
| 64 | ooe.double_precision = M_PI; |
| 65 | ooe.some_characters = "JSON THIS! \"\1"; |
| 66 | ooe.zomg_unicode = "\xd7\n\a\t"; |
| 67 | ooe.base64 = "\1\2\3\255"; |
| 68 | ooe.rfc4122_uuid = apache::thrift::TUuid{"{5e2ab188-1726-4e75-a04f-1ed9a6a89c4c}"}; |
| 69 | |
| 70 | int num = 100000; |
| 71 | std::shared_ptr<TMemoryBuffer> buf(new TMemoryBuffer(num*1000)); |
| 72 | |
| 73 | uint8_t* data = nullptr; |
| 74 | uint32_t datasize = 0; |
| 75 | |
| 76 | { |
| 77 | buf->resetBuffer(); |
| 78 | TBinaryProtocolT<TMemoryBuffer> prot(buf); |
| 79 | double elapsed = 0.0; |
| 80 | Timer timer; |
| 81 | |
| 82 | for (int i = 0; i < num; i++) { |
| 83 | ooe.write(&prot); |
| 84 | } |
| 85 | elapsed = timer.frame(); |
| 86 | cout << "Write big endian: " << num / (1000 * elapsed) << " kHz" << '\n'; |
| 87 | } |
| 88 | |
| 89 | buf->getBuffer(&data, &datasize); |
| 90 | |
| 91 | { |
| 92 | std::shared_ptr<TMemoryBuffer> buf2(new TMemoryBuffer(data, datasize)); |
| 93 | TBinaryProtocolT<TMemoryBuffer> prot(buf2); |
| 94 | OneOfEach ooe2; |
| 95 | double elapsed = 0.0; |
| 96 | Timer timer; |
| 97 | |
| 98 | for (int i = 0; i < num; i++) { |
| 99 | ooe2.read(&prot); |
| 100 | } |
| 101 | elapsed = timer.frame(); |
| 102 | cout << " Read big endian: " << num / (1000 * elapsed) << " kHz" << '\n'; |
| 103 | } |
| 104 | |
| 105 | { |
| 106 | buf->resetBuffer(); |
| 107 | TBinaryProtocolT<TMemoryBuffer, TNetworkLittleEndian> prot(buf); |
| 108 | double elapsed = 0.0; |