mirror of https://github.com/dnomd343/klotski.git
Dnomd343
3 weeks ago
6 changed files with 47 additions and 43 deletions
@ -0,0 +1,22 @@ |
|||
#pragma once |
|||
|
|||
#include <algorithm> |
|||
|
|||
namespace klotski::codec { |
|||
|
|||
KLSK_INLINE_H uint32_t ShortCode::fast_encode(uint64_t common_code) { |
|||
auto head = common_code >> 32; |
|||
const auto &ranges = (*cases_).ranges(head); // match available ranges |
|||
// TODO: try to narrow the scope by prefix |
|||
auto target = std::lower_bound(ranges.begin(), ranges.end(), (uint32_t)common_code); |
|||
return cases::ALL_CASES_OFFSET[head] + (target - ranges.begin()); |
|||
} |
|||
|
|||
KLSK_INLINE_H uint64_t ShortCode::fast_decode(uint32_t short_code) { |
|||
auto offset = std::upper_bound(cases::ALL_CASES_OFFSET.begin(), cases::ALL_CASES_OFFSET.end(), short_code) - 1; |
|||
uint64_t head = offset - cases::ALL_CASES_OFFSET.begin(); |
|||
// return (head << 32) | AllCases::instance().fetch()[head][short_code - *offset]; |
|||
return (head << 32) | (*cases_).ranges(head)[short_code - *offset]; |
|||
} |
|||
|
|||
} // namespace klotski::codec |
Loading…
Reference in new issue