mmh3 0.3.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/CHANGELOG.md +5 -0
 - data/README.md +13 -6
 - data/lib/mmh3.rb +16 -5
 - data/lib/mmh3/version.rb +1 -1
 - metadata +2 -4
 - data/bin/console +0 -14
 - data/bin/setup +0 -8
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 9b1702ed3a4591c78df8c10a33e20c5d1a64c8a10603119f7ce445e00d1f9fa7
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 4007d57ada806c9856470c365837cda90329eae0876f2583ccef5451763aa0ad
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: d48d67b0d0b56410512a1c55eaeab3af85068ca269b869dd6bf53f91cbc51ca003ec83daf7822567bcb62dd8de2c717a5cb16f797c79f89a3e8bc15949e7c1f2
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 90ac92b83d9ed6c04da3832c226988792b9362a164c7baa7695cb2201dbd8ac5cb4e8f275300b0403711fd15075d128103da589053c5335326787c6903993662
         
     | 
    
        data/CHANGELOG.md
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | 
         @@ -1,7 +1,8 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # Mmh3
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            
         
     | 
| 
      
 3 
     | 
    
         
            +
            [](https://github.com/yoshoku/mmh3/actions?query=workflow%3ARuby)
         
     | 
| 
       4 
4 
     | 
    
         
             
            [](https://badge.fury.io/rb/mmh3)
         
     | 
| 
      
 5 
     | 
    
         
            +
            [](https://rubydoc.info/gems/mmh3)
         
     | 
| 
       5 
6 
     | 
    
         | 
| 
       6 
7 
     | 
    
         
             
            A pure Ruby implementation of [MurmurHash3](https://en.wikipedia.org/wiki/MurmurHash).
         
     | 
| 
       7 
8 
     | 
    
         | 
| 
         @@ -24,11 +25,17 @@ Or install it yourself as: 
     | 
|
| 
       24 
25 
     | 
    
         
             
            ## Usage
         
     | 
| 
       25 
26 
     | 
    
         | 
| 
       26 
27 
     | 
    
         
             
            ```ruby
         
     | 
| 
       27 
     | 
    
         
            -
            require 'mmh3'
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
      
 28 
     | 
    
         
            +
            irb(main):001:0> require 'mmh3'
         
     | 
| 
      
 29 
     | 
    
         
            +
            => true
         
     | 
| 
      
 30 
     | 
    
         
            +
            irb(main):002:0> Mmh3.hash32('Hello, world', seed: 3)
         
     | 
| 
      
 31 
     | 
    
         
            +
            => 1659891412
         
     | 
| 
      
 32 
     | 
    
         
            +
            irb(main):003:0> Mmh3.hash128('Hello, world', seed: 8)
         
     | 
| 
      
 33 
     | 
    
         
            +
            => 87198040132278428547135563345531192982
         
     | 
| 
      
 34 
     | 
    
         
            +
            irb(main):004:0> Mmh3.hash32('Hello, world')
         
     | 
| 
      
 35 
     | 
    
         
            +
            => 1785891924
         
     | 
| 
      
 36 
     | 
    
         
            +
            irb(main):005:0> Mmh3.hash32('Hello, world', seed: 0)
         
     | 
| 
      
 37 
     | 
    
         
            +
            => 1785891924
         
     | 
| 
      
 38 
     | 
    
         
            +
            irb(main):006:0>
         
     | 
| 
       32 
39 
     | 
    
         
             
            ```
         
     | 
| 
       33 
40 
     | 
    
         | 
| 
       34 
41 
     | 
    
         
             
            ## Contributing
         
     | 
    
        data/lib/mmh3.rb
    CHANGED
    
    | 
         @@ -10,18 +10,23 @@ module Mmh3 
     | 
|
| 
       10 
10 
     | 
    
         | 
| 
       11 
11 
     | 
    
         
             
              # Generate a 32-bit hash value.
         
     | 
| 
       12 
12 
     | 
    
         
             
              #
         
     | 
| 
      
 13 
     | 
    
         
            +
              # @example
         
     | 
| 
      
 14 
     | 
    
         
            +
              #   require 'mmh3'
         
     | 
| 
      
 15 
     | 
    
         
            +
              #
         
     | 
| 
      
 16 
     | 
    
         
            +
              #   puts Mmh3.hash32('Hello, world') # => 1785891924
         
     | 
| 
      
 17 
     | 
    
         
            +
              #
         
     | 
| 
       13 
18 
     | 
    
         
             
              # @param key [String] Key for hash value.
         
     | 
| 
       14 
19 
     | 
    
         
             
              # @param seed [Integer] Seed for hash value.
         
     | 
| 
       15 
20 
     | 
    
         
             
              #
         
     | 
| 
       16 
21 
     | 
    
         
             
              # @return [Integer] Returns hash value.
         
     | 
| 
       17 
     | 
    
         
            -
              def hash32(key, seed  
     | 
| 
      
 22 
     | 
    
         
            +
              def hash32(key, seed: 0)
         
     | 
| 
       18 
23 
     | 
    
         
             
                keyb = key.to_s.bytes
         
     | 
| 
       19 
24 
     | 
    
         
             
                key_len = keyb.size
         
     | 
| 
       20 
25 
     | 
    
         
             
                n_blocks = key_len / 4
         
     | 
| 
       21 
26 
     | 
    
         | 
| 
       22 
27 
     | 
    
         
             
                h = seed
         
     | 
| 
       23 
28 
     | 
    
         
             
                (0...n_blocks * 4).step(4) do |bstart|
         
     | 
| 
       24 
     | 
    
         
            -
                  k = keyb 
     | 
| 
      
 29 
     | 
    
         
            +
                  k = block32(keyb, bstart, 0)
         
     | 
| 
       25 
30 
     | 
    
         
             
                  h ^= scramble32(k)
         
     | 
| 
       26 
31 
     | 
    
         
             
                  h = rotl32(h, 13)
         
     | 
| 
       27 
32 
     | 
    
         
             
                  h = (h * 5 + 0xe6546b64) & 0xFFFFFFFF
         
     | 
| 
         @@ -32,8 +37,9 @@ module Mmh3 
     | 
|
| 
       32 
37 
     | 
    
         | 
| 
       33 
38 
     | 
    
         
             
                k = 0
         
     | 
| 
       34 
39 
     | 
    
         
             
                k ^= keyb[tail_id + 2] << 16 if tail_sz >= 3
         
     | 
| 
       35 
     | 
    
         
            -
                k ^= keyb[tail_id + 1] << 
     | 
| 
       36 
     | 
    
         
            -
                k ^= keyb[tail_id + 0] 
     | 
| 
      
 40 
     | 
    
         
            +
                k ^= keyb[tail_id + 1] <<  8 if tail_sz >= 2
         
     | 
| 
      
 41 
     | 
    
         
            +
                k ^= keyb[tail_id + 0]       if tail_sz >= 1
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
       37 
43 
     | 
    
         
             
                h ^= scramble32(k) if tail_sz.positive?
         
     | 
| 
       38 
44 
     | 
    
         | 
| 
       39 
45 
     | 
    
         
             
                h = fmix32(h ^ key_len)
         
     | 
| 
         @@ -47,12 +53,17 @@ module Mmh3 
     | 
|
| 
       47 
53 
     | 
    
         | 
| 
       48 
54 
     | 
    
         
             
              # Generate a 128-bit hash value.
         
     | 
| 
       49 
55 
     | 
    
         
             
              #
         
     | 
| 
      
 56 
     | 
    
         
            +
              # @example
         
     | 
| 
      
 57 
     | 
    
         
            +
              #   require 'mmh3'
         
     | 
| 
      
 58 
     | 
    
         
            +
              #
         
     | 
| 
      
 59 
     | 
    
         
            +
              #   puts Mmh3.hash128('Hello, world') # => 87198040132278428547135563345531192982
         
     | 
| 
      
 60 
     | 
    
         
            +
              #
         
     | 
| 
       50 
61 
     | 
    
         
             
              # @param key [String] Key for hash value.
         
     | 
| 
       51 
62 
     | 
    
         
             
              # @param seed [Integer] Seed for hash value.
         
     | 
| 
       52 
63 
     | 
    
         
             
              # @param x64arch [Boolean] Flag indicating whether to generate hash value for x64 architecture.
         
     | 
| 
       53 
64 
     | 
    
         
             
              #
         
     | 
| 
       54 
65 
     | 
    
         
             
              # @return [Integer] Returns hash value.
         
     | 
| 
       55 
     | 
    
         
            -
              def hash128(key, seed  
     | 
| 
      
 66 
     | 
    
         
            +
              def hash128(key, seed: 0, x64arch: true)
         
     | 
| 
       56 
67 
     | 
    
         
             
                return hash128_x86(key, seed) if x64arch == false
         
     | 
| 
       57 
68 
     | 
    
         | 
| 
       58 
69 
     | 
    
         
             
                hash128_x64(key, seed)
         
     | 
    
        data/lib/mmh3/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: mmh3
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 1.0.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - yoshoku
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: exe
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2020- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2020-05-02 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies: []
         
     | 
| 
       13 
13 
     | 
    
         
             
            description: A pure Ruby implementation of MurmurHash3
         
     | 
| 
       14 
14 
     | 
    
         
             
            email:
         
     | 
| 
         @@ -25,8 +25,6 @@ files: 
     | 
|
| 
       25 
25 
     | 
    
         
             
            - LICENSE.txt
         
     | 
| 
       26 
26 
     | 
    
         
             
            - README.md
         
     | 
| 
       27 
27 
     | 
    
         
             
            - Rakefile
         
     | 
| 
       28 
     | 
    
         
            -
            - bin/console
         
     | 
| 
       29 
     | 
    
         
            -
            - bin/setup
         
     | 
| 
       30 
28 
     | 
    
         
             
            - lib/mmh3.rb
         
     | 
| 
       31 
29 
     | 
    
         
             
            - lib/mmh3/version.rb
         
     | 
| 
       32 
30 
     | 
    
         
             
            - mmh3.gemspec
         
     | 
    
        data/bin/console
    DELETED
    
    | 
         @@ -1,14 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            #!/usr/bin/env ruby
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            require "bundler/setup"
         
     | 
| 
       4 
     | 
    
         
            -
            require "mmh3"
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
            # You can add fixtures and/or initialization code here to make experimenting
         
     | 
| 
       7 
     | 
    
         
            -
            # with your gem easier. You can also use a different console, if you like.
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
            # (If you use this, don't forget to add pry to your Gemfile!)
         
     | 
| 
       10 
     | 
    
         
            -
            # require "pry"
         
     | 
| 
       11 
     | 
    
         
            -
            # Pry.start
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
            require "irb"
         
     | 
| 
       14 
     | 
    
         
            -
            IRB.start(__FILE__)
         
     |