| 49 | }; |
| 50 | |
| 51 | int Legacy64ExactMatch(const LegacyUnit64* arr, const char* key, size_t len) { |
| 52 | size_t pos = 0; |
| 53 | for (size_t i = 0; i < len; ++i) { |
| 54 | uint64_t c = static_cast<unsigned char>(key[i]); |
| 55 | pos ^= static_cast<size_t>(arr[pos].offset() ^ c); |
| 56 | if (arr[pos].label() != c) return -1; |
| 57 | } |
| 58 | if (!arr[pos].has_leaf()) return -1; |
| 59 | return arr[pos ^ static_cast<size_t>(arr[pos].offset())].value(); |
| 60 | } |
| 61 | |
| 62 | // Returns number of matches found; fills results[] with values (shortest to |
| 63 | // longest). Mirror of Darts::DoubleArray::commonPrefixSearch value-only form. |