mtf.hpp 470 B

1234567891011121314151617181920212223242526
  1. #pragma once
  2. //move to front
  3. namespace nall::Decode {
  4. inline auto MTF(array_view<uint8_t> input) -> vector<uint8_t> {
  5. vector<uint8_t> output;
  6. output.resize(input.size());
  7. uint8_t order[256];
  8. for(uint n : range(256)) order[n] = n;
  9. for(uint offset : range(input.size())) {
  10. uint data = input[offset];
  11. uint value = order[data];
  12. output[offset] = value;
  13. memory::move(&order[1], &order[0], data);
  14. order[0] = value;
  15. }
  16. return output;
  17. }
  18. }