(key: &str, offset: u32, seed: u32)
| 782 | } |
| 783 | |
| 784 | pub fn hash_string_with_offset(key: &str, offset: u32, seed: u32) -> Id { |
| 785 | let mut base: u32 = seed; |
| 786 | for b in key.bytes() { |
| 787 | base = base.wrapping_add(b as u32); |
| 788 | base = base.wrapping_add(base << 10); |
| 789 | base ^= base >> 6; |
| 790 | } |
| 791 | let mut hash = base; |
| 792 | hash = hash.wrapping_add(offset); |
| 793 | hash = hash.wrapping_add(hash << 10); |
| 794 | hash ^= hash >> 6; |
| 795 | |
| 796 | hash = hash.wrapping_add(hash << 3); |
| 797 | base = base.wrapping_add(base << 3); |
| 798 | hash ^= hash >> 11; |
| 799 | base ^= base >> 11; |
| 800 | hash = hash.wrapping_add(hash << 15); |
| 801 | base = base.wrapping_add(base << 15); |
| 802 | Id { |
| 803 | id: hash.wrapping_add(1), |
| 804 | offset, |
| 805 | base_id: base.wrapping_add(1), |
| 806 | string_id: StringId::from_str(key), |
| 807 | } |
| 808 | } |
| 809 | |
| 810 | fn hash_number(offset: u32, seed: u32) -> Id { |
| 811 | let mut hash = seed; |
no test coverage detected