| 14 | } |
| 15 | |
| 16 | uint8_t MoveToFront::Transform(uint8_t b) |
| 17 | { |
| 18 | auto const it = std::find(m_order.begin(), m_order.end(), b); |
| 19 | ASSERT(it != m_order.end(), ()); |
| 20 | |
| 21 | size_t const result = std::distance(m_order.begin(), it); |
| 22 | ASSERT_LESS(result, kNumBytes, ()); |
| 23 | |
| 24 | std::rotate(m_order.begin(), it, it + 1); |
| 25 | ASSERT_EQUAL(m_order[0], b, ()); |
| 26 | return static_cast<uint8_t>(result); |
| 27 | } |
| 28 | } // namespace coding |