| 102 | } |
| 103 | |
| 104 | uint64_t |
| 105 | read(const TSIOBufferReader &r, std::string &o, int64_t l = 0) |
| 106 | { |
| 107 | assert(r != nullptr); |
| 108 | TSIOBufferBlock block = TSIOBufferReaderStart(r); |
| 109 | |
| 110 | assert(l >= 0); |
| 111 | if (l == 0) { |
| 112 | l = TSIOBufferReaderAvail(r); |
| 113 | assert(l >= 0); |
| 114 | } |
| 115 | |
| 116 | uint64_t length = 0; |
| 117 | |
| 118 | for (; block && l > 0; block = TSIOBufferBlockNext(block)) { |
| 119 | int64_t size = 0; |
| 120 | const char *const pointer = TSIOBufferBlockReadStart(block, r, &size); |
| 121 | if (pointer != nullptr && size > 0) { |
| 122 | size = std::min(size, l); |
| 123 | o.append(pointer, size); |
| 124 | length += size; |
| 125 | l -= size; |
| 126 | } |
| 127 | } |
| 128 | |
| 129 | return length; |
| 130 | } |
| 131 | |
| 132 | uint64_t |
| 133 | read(const TSIOBuffer &b, std::string &o) |