| 241 | } |
| 242 | |
| 243 | std::span<const std::byte> SawyerStreamWriter::encode(SawyerEncoding encoding, std::span<const std::byte> data) |
| 244 | { |
| 245 | switch (encoding) |
| 246 | { |
| 247 | case SawyerEncoding::uncompressed: |
| 248 | return data; |
| 249 | case SawyerEncoding::runLengthSingle: |
| 250 | _encodeBuffer.clear(); |
| 251 | _encodeBuffer.reserve(data.size()); |
| 252 | encodeRunLengthSingle(_encodeBuffer, data); |
| 253 | return _encodeBuffer.getSpan(); |
| 254 | case SawyerEncoding::runLengthMulti: |
| 255 | _encodeBuffer.clear(); |
| 256 | _encodeBuffer.reserve(data.size()); |
| 257 | encodeRunLengthMulti(_encodeBuffer, data); |
| 258 | |
| 259 | _encodeBuffer2.clear(); |
| 260 | _encodeBuffer2.reserve(_encodeBuffer.getLength()); |
| 261 | encodeRunLengthSingle(_encodeBuffer2, _encodeBuffer.getSpan()); |
| 262 | return _encodeBuffer2.getSpan(); |
| 263 | case SawyerEncoding::rotate: |
| 264 | _encodeBuffer.clear(); |
| 265 | _encodeBuffer.reserve(data.size()); |
| 266 | encodeRotate(_encodeBuffer, data); |
| 267 | return _encodeBuffer.getSpan(); |
| 268 | default: |
| 269 | throw Exception::RuntimeError(exceptionUnknownEncoding); |
| 270 | } |
| 271 | } |
| 272 | |
| 273 | void SawyerStreamWriter::encodeRunLengthSingle(MemoryStream& buffer, std::span<const std::byte> data) |
| 274 | { |