| 251 | } |
| 252 | |
| 253 | bool CompressionStream::Next(void** data, int* size) { |
| 254 | if (rawInputBuffer.size() > compressionBlockSize) { |
| 255 | std::stringstream ss; |
| 256 | ss << "uncompressed data size " << rawInputBuffer.size() |
| 257 | << " is larger than compression block size " << compressionBlockSize; |
| 258 | throw CompressionError(ss.str()); |
| 259 | } |
| 260 | |
| 261 | // compress data in the rawInputBuffer when it is full |
| 262 | if (rawInputBuffer.size() == compressionBlockSize) { |
| 263 | compressInternal(); |
| 264 | } |
| 265 | |
| 266 | auto block = rawInputBuffer.getNextBlock(); |
| 267 | *data = block.data; |
| 268 | *size = static_cast<int>(block.size); |
| 269 | return true; |
| 270 | } |
| 271 | |
| 272 | class ZlibCompressionStream : public CompressionStream { |
| 273 | public: |