| 56 | |
| 57 | template <typename Sink> |
| 58 | static void EncodeAndWrite(Params const & params, Sink & sink, size_t n, uint8_t const * s) |
| 59 | { |
| 60 | CHECK(params.m_blockSize != 0, ()); |
| 61 | CHECK_GREATER(n + params.m_blockSize, n, ()); |
| 62 | |
| 63 | BufferT bwtBuffer; |
| 64 | |
| 65 | size_t const numBlocks = (n + params.m_blockSize - 1) / params.m_blockSize; |
| 66 | WriteVarUint(sink, numBlocks); |
| 67 | for (size_t i = 0; i < n; i += params.m_blockSize) |
| 68 | { |
| 69 | auto const m = std::min(n - i, params.m_blockSize); |
| 70 | EncodeAndWriteBlock(sink, m, s + i, bwtBuffer); |
| 71 | } |
| 72 | } |
| 73 | |
| 74 | template <typename Source> |
| 75 | static void ReadAndDecodeBlock(Source & source, BufferT & bwtBuffer, BufferT & revBuffer) |