grayphash 0.0.3 → 0.0.4

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.
Files changed (2) hide show
  1. data/ext/grayhash/grayphash.c +11 -6
  2. metadata +1 -1
@@ -30,12 +30,17 @@ VALUE method_hamming(int argc, VALUE * argv, VALUE self) {
30
30
  }
31
31
  unsigned long long hash1 = rb_num2ull(argv[0]);
32
32
  unsigned long long hash2 = rb_num2ull(argv[1]);
33
- int* (*phash_func)();
34
- phash_func = dlsym(sdl_library, "ph_hamming_distance");
35
33
 
36
- return INT2FIX(
37
- ((*phash_func)(hash1, hash2))
38
- );
34
+
35
+ ulong64 x = hash1^hash2;
36
+ const ulong64 m1 = 0x5555555555555555ULL;
37
+ const ulong64 m2 = 0x3333333333333333ULL;
38
+ const ulong64 h01 = 0x0101010101010101ULL;
39
+ const ulong64 m4 = 0x0f0f0f0f0f0f0f0fULL;
40
+ x -= (x >> 1) & m1;
41
+ x = (x & m2) + ((x >> 2) & m2);
42
+ x = (x + (x >> 4)) & m4;
43
+ return INT2FIX((x * h01)>>56);
39
44
  }
40
45
 
41
46
 
@@ -60,7 +65,7 @@ VALUE method_close(VALUE self) {
60
65
  }
61
66
 
62
67
  VALUE method_about(VALUE self) {
63
- return rb_str_new_cstr("pHash 0.9.4. Copyright 2008-2010 Aetilius, Inc. Included only some image functions.");
68
+ return rb_str_new_cstr("pHash 0.9.4. Copyright 2008-2010 Aetilius, Inc. Included only some image functions (grayphash v-0.0.4).");
64
69
  //char* (*about)();
65
70
  //about = dlsym(sdl_library, "ph_about");
66
71
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grayphash
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: