cityhash 0.8.1 → 0.9.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 964373c4e613cd8d4c996f8499e24bb50a919b00
4
+ data.tar.gz: 743d17ddff4ba29d11209c89af5bfdfc11ba7e8e
5
+ SHA512:
6
+ metadata.gz: ae99d60b87a15463974003da1ff1f625edb70ba39f40627dd2c6326cad9749a9f5366ea6fbdb79540a5c34557e87dcbf8f0d02b351cd91d92b8f23cb41abe4f5
7
+ data.tar.gz: ea0f0ae415a26d2ea7828c8347bb7d430bd5ed34dd1584ca27a329577f5ed13511e8aab9238cb6953d99664cb2a5919c4c98f1993ed256c2df5ac5462b51727c
@@ -1,6 +1,6 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.8.7
4
- - 1.9.2
5
- - 1.9.3
6
- - 2.0.0
3
+ - 2.0
4
+ - 2.1
5
+ - 2.2
6
+ - 2.3
@@ -1,3 +1,11 @@
1
+ ## 0.9.0 (October 11, 2017) ##
2
+
3
+ ### enhancements
4
+ * update cityhash lib version
5
+ * ditch old rubies. support only Ruby 2.0+
6
+ * let the environment dictate the arch
7
+ * do not define CRC methods if it's not supported by system
8
+
1
9
  ## 0.8.1 (May 18, 2013) ##
2
10
 
3
11
  ### bugfixes
data/README.md CHANGED
@@ -6,10 +6,6 @@ Ruby wrapper for google's cityhash.
6
6
 
7
7
  gem install cityhash
8
8
 
9
- Since OSX uses `llvm-gcc-4.2` that doesn't support `-march=native` flag you have to compile `cityhash` lib with `clang++` compiler:
10
-
11
- CXX=/usr/bin/clang++ gem install cityhash
12
-
13
9
  ### Usage
14
10
 
15
11
  ```ruby
@@ -30,6 +26,12 @@ CityHash.hash128crc(text, seed1) # => 101668641288246442316643001405184598611
30
26
  CityHash.hash256crc(text) # => 11964743055457135893972873789222488394617411264226841264756
31
27
  ```
32
28
 
29
+ ### Important note
30
+
31
+ CityHash does not maintain backward compatibility with previous versions. You should not use CityHash for persitent storage, or else never upgrade it.
32
+
33
+ If you need backward compatibility please consider other hash functions like [xxHash](https://github.com/nashby/xxhash) or [MurmurHash](https://github.com/ksss/digest-murmurhash)
34
+
33
35
  ### Contributing to cityhash
34
36
 
35
37
  * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
@@ -59,6 +59,33 @@ static uint32 UNALIGNED_LOAD32(const char *p) {
59
59
  #define bswap_32(x) OSSwapInt32(x)
60
60
  #define bswap_64(x) OSSwapInt64(x)
61
61
 
62
+ #elif defined(__sun) || defined(sun)
63
+
64
+ #include <sys/byteorder.h>
65
+ #define bswap_32(x) BSWAP_32(x)
66
+ #define bswap_64(x) BSWAP_64(x)
67
+
68
+ #elif defined(__FreeBSD__)
69
+
70
+ #include <sys/endian.h>
71
+ #define bswap_32(x) bswap32(x)
72
+ #define bswap_64(x) bswap64(x)
73
+
74
+ #elif defined(__OpenBSD__)
75
+
76
+ #include <sys/types.h>
77
+ #define bswap_32(x) swap32(x)
78
+ #define bswap_64(x) swap64(x)
79
+
80
+ #elif defined(__NetBSD__)
81
+
82
+ #include <sys/types.h>
83
+ #include <machine/bswap.h>
84
+ #if defined(__BSWAP_RENAME) && !defined(__bswap_32)
85
+ #define bswap_32(x) bswap32(x)
86
+ #define bswap_64(x) bswap64(x)
87
+ #endif
88
+
62
89
  #else
63
90
 
64
91
  #include <byteswap.h>
@@ -95,8 +122,8 @@ static const uint64 k1 = 0xb492b66fbe98f273ULL;
95
122
  static const uint64 k2 = 0x9ae16a3b2f90404fULL;
96
123
 
97
124
  // Magic numbers for 32-bit hashing. Copied from Murmur3.
98
- static const uint32_t c1 = 0xcc9e2d51;
99
- static const uint32_t c2 = 0x1b873593;
125
+ static const uint32 c1 = 0xcc9e2d51;
126
+ static const uint32 c2 = 0x1b873593;
100
127
 
101
128
  // A 32-bit to 32-bit integer hash copied from Murmur3.
102
129
  static uint32 fmix(uint32 h)
@@ -142,8 +169,9 @@ static uint32 Hash32Len13to24(const char *s, size_t len) {
142
169
  static uint32 Hash32Len0to4(const char *s, size_t len) {
143
170
  uint32 b = 0;
144
171
  uint32 c = 9;
145
- for (int i = 0; i < len; i++) {
146
- b = b * c1 + s[i];
172
+ for (size_t i = 0; i < len; i++) {
173
+ signed char v = s[i];
174
+ b = b * c1 + v;
147
175
  c ^= b;
148
176
  }
149
177
  return fmix(Mur(b, Mur(len, c)));
@@ -16,27 +16,32 @@ extern "C" VALUE cityhash_hash32(VALUE mod, VALUE input)
16
16
 
17
17
  extern "C" VALUE cityhash_hash64(VALUE mod, VALUE input)
18
18
  {
19
+ Check_Type(input, T_STRING);
19
20
  return ULL2NUM(CityHash64(StringValuePtr(input), RSTRING_LEN(input)));
20
21
  }
21
22
 
22
23
  extern "C" VALUE cityhash_hash64_with_seed(VALUE mod, VALUE input, VALUE seed)
23
24
  {
25
+ Check_Type(input, T_STRING);
24
26
  return ULL2NUM(CityHash64WithSeed(StringValuePtr(input), RSTRING_LEN(input), NUM2ULL(seed)));
25
27
  }
26
28
 
27
29
  extern "C" VALUE cityhash_hash64_with_seeds(VALUE mod, VALUE input, VALUE seed1, VALUE seed2)
28
30
  {
31
+ Check_Type(input, T_STRING);
29
32
  return ULL2NUM(CityHash64WithSeeds(StringValuePtr(input), RSTRING_LEN(input), NUM2ULL(seed1), NUM2ULL(seed2)));
30
33
  }
31
34
 
32
35
  extern "C" VALUE cityhash_hash128(VALUE mod, VALUE input)
33
36
  {
37
+ Check_Type(input, T_STRING);
34
38
  uint128 hash = CityHash128(StringValuePtr(input), RSTRING_LEN(input));
35
39
  return rb_str_new((char *)&hash, sizeof(hash));
36
40
  }
37
41
 
38
42
  extern "C" VALUE cityhash_hash128_with_seed(VALUE mod, VALUE input, VALUE seed_string)
39
43
  {
44
+ Check_Type(input, T_STRING);
40
45
  uint128 seed = *(uint128 *)StringValuePtr(seed_string);
41
46
  uint128 hash = CityHash128WithSeed(StringValuePtr(input), RSTRING_LEN(input), seed);
42
47
  return rb_str_new((char *)&hash, sizeof(hash));
@@ -58,7 +63,7 @@ extern "C" VALUE cityhash_hashcrc128_with_seed(VALUE mod, VALUE input, VALUE see
58
63
 
59
64
  extern "C" VALUE cityhash_hashcrc256(VALUE mod, VALUE input)
60
65
  {
61
- uint64 hash[3] = {};
66
+ uint64 hash[4] = {};
62
67
  CityHashCrc256(StringValuePtr(input), RSTRING_LEN(input), hash);
63
68
  return rb_str_new((char *)&hash, sizeof(hash));
64
69
  }
@@ -1,8 +1,9 @@
1
1
  require 'mkmf'
2
2
 
3
- RbConfig::MAKEFILE_CONFIG['CXX'] = ENV['CXX'] if ENV['CXX']
3
+ cxx = ENV['CXX'] || with_config('CXX')
4
+ RbConfig::MAKEFILE_CONFIG['CXX'] = cxx if cxx
4
5
 
5
- %w{g O3 Wall march=native}.each do |flag|
6
+ %w{g O3 Wall}.each do |flag|
6
7
  flag = "-#{flag}"
7
8
  $CPPFLAGS += " #{flag}" unless $CPPFLAGS.split.include? flag
8
9
  end
@@ -31,23 +31,27 @@ module CityHash
31
31
  unpacked_digest(digest)
32
32
  end
33
33
 
34
- def self.hash128crc(input, seed=nil)
35
- input = input.to_s
34
+ if Internal.respond_to?(:hash128crc)
35
+ def self.hash128crc(input, seed=nil)
36
+ input = input.to_s
36
37
 
37
- digest = if seed
38
- Internal.hash128crc_with_seed(input, packed_seed(seed))
39
- else
40
- Internal.hash128crc(input)
41
- end
38
+ digest = if seed
39
+ Internal.hash128crc_with_seed(input, packed_seed(seed))
40
+ else
41
+ Internal.hash128crc(input)
42
+ end
42
43
 
43
- unpacked_digest(digest)
44
+ unpacked_digest(digest)
45
+ end
44
46
  end
45
47
 
46
- def self.hash256crc(input)
47
- input = input.to_s
48
- digest = Internal.hash256crc(input)
48
+ if Internal.respond_to?(:hash256crc)
49
+ def self.hash256crc(input)
50
+ input = input.to_s
51
+ digest = Internal.hash256crc(input)
49
52
 
50
- [0..7, 8..15, 16..23].map { |r| digest[r].unpack('Q').first.to_s }.join.to_i
53
+ [0..7, 8..15, 16..23].map { |r| digest[r].unpack('Q').first.to_s }.join.to_i
54
+ end
51
55
  end
52
56
 
53
57
  private
@@ -1,3 +1,3 @@
1
1
  module CityHash
2
- VERSION = "0.8.1"
2
+ VERSION = "0.9.0"
3
3
  end
@@ -27,19 +27,33 @@ describe CityHash do
27
27
  end
28
28
 
29
29
  it 'returns 128bit crc hash' do
30
+ skip unless CityHash.respond_to?(:hash128crc)
31
+
30
32
  assert_equal 124124989950401219618153994964897029896, CityHash.hash128crc("test")
31
33
  end
32
34
 
33
35
  it 'returns 128bit crc hash with seed' do
36
+ skip unless CityHash.respond_to?(:hash128crc)
37
+
34
38
  seed = (123 << 64) | 123
35
39
  assert_equal 1834994000056895780313918994795281207519, CityHash.hash128crc("test", seed)
36
40
  end
37
41
 
38
42
  it 'returns 256bit crc hash' do
43
+ skip unless CityHash.respond_to?(:hash256crc)
44
+
39
45
  assert_equal 11964743055457135893972873789222488394617411264226841264756, CityHash.hash256crc("test")
40
46
  end
41
47
 
42
48
  it 'converts input data to string' do
43
49
  assert_equal CityHash.hash128('1337'), CityHash.hash128(1337)
44
50
  end
51
+
52
+ it 'does not core when you pass it nil' do
53
+ assert_raises TypeError do
54
+ CityHash::Internal.hash64(nil)
55
+ end
56
+
57
+ CityHash.hash64(nil)
58
+ end
45
59
  end
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cityhash
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.1
5
- prerelease:
4
+ version: 0.9.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Vasiliy Ermolovich
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-05-17 00:00:00.000000000 Z
11
+ date: 2017-10-11 00:00:00.000000000 Z
13
12
  dependencies: []
14
13
  description: ruby bindings for google's cityhash
15
14
  email:
@@ -19,8 +18,8 @@ extensions:
19
18
  - ext/cityhash/extconf.rb
20
19
  extra_rdoc_files: []
21
20
  files:
22
- - .gitignore
23
- - .travis.yml
21
+ - ".gitignore"
22
+ - ".travis.yml"
24
23
  - CHANGELOG.md
25
24
  - Gemfile
26
25
  - LICENSE.txt
@@ -38,33 +37,26 @@ files:
38
37
  - test/test_helper.rb
39
38
  homepage: http://github.com/nashby/cityhash
40
39
  licenses: []
40
+ metadata: {}
41
41
  post_install_message:
42
42
  rdoc_options: []
43
43
  require_paths:
44
44
  - lib
45
45
  required_ruby_version: !ruby/object:Gem::Requirement
46
- none: false
47
46
  requirements:
48
- - - ! '>='
47
+ - - ">="
49
48
  - !ruby/object:Gem::Version
50
49
  version: '0'
51
- segments:
52
- - 0
53
- hash: 3315565900202712629
54
50
  required_rubygems_version: !ruby/object:Gem::Requirement
55
- none: false
56
51
  requirements:
57
- - - ! '>='
52
+ - - ">="
58
53
  - !ruby/object:Gem::Version
59
54
  version: '0'
60
- segments:
61
- - 0
62
- hash: 3315565900202712629
63
55
  requirements: []
64
56
  rubyforge_project: cityhash
65
- rubygems_version: 1.8.24
57
+ rubygems_version: 2.5.2.1
66
58
  signing_key:
67
- specification_version: 3
59
+ specification_version: 4
68
60
  summary: ruby bindings for google's cityhash
69
61
  test_files:
70
62
  - test/cityhash_test.rb