grayphash 0.0.4.2 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/ext/grayhash/extconf.rb +1 -1
- metadata +1 -2
- data/ext/grayhash/grayphash.c +0 -73
data/ext/grayhash/extconf.rb
CHANGED
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.
|
4
|
+
version: 0.0.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -19,7 +19,6 @@ extensions:
|
|
19
19
|
extra_rdoc_files: []
|
20
20
|
files:
|
21
21
|
- lib/grayphash.rb
|
22
|
-
- ext/grayhash/grayphash.c
|
23
22
|
- ext/grayhash/extconf.rb
|
24
23
|
homepage: http://github.com/tauraloke/grayphash
|
25
24
|
licenses:
|
data/ext/grayhash/grayphash.c
DELETED
@@ -1,73 +0,0 @@
|
|
1
|
-
// Include the Ruby headers and goodies
|
2
|
-
#include "ruby.h"
|
3
|
-
#include <dlfcn.h>
|
4
|
-
|
5
|
-
// Defining a space for information and references about the module to be stored internally
|
6
|
-
VALUE Grayphash = Qnil;
|
7
|
-
|
8
|
-
// Prototype for the initialization method - Ruby calls this, not you
|
9
|
-
void Init_grayphash();
|
10
|
-
|
11
|
-
VALUE method_about(VALUE self);
|
12
|
-
VALUE method_close(VALUE self);
|
13
|
-
VALUE method_image_phash(int argc, VALUE * argv, VALUE self);
|
14
|
-
VALUE method_hamming(int argc, VALUE * argv, VALUE self);
|
15
|
-
void* sdl_library = NULL;
|
16
|
-
|
17
|
-
// The initialization method for this module
|
18
|
-
void Init_grayphash() {
|
19
|
-
Grayphash = rb_define_module("Grayphash");
|
20
|
-
rb_define_method(Grayphash, "about", method_about, 0);
|
21
|
-
rb_define_method(Grayphash, "close", method_close, 0);
|
22
|
-
rb_define_method(Grayphash, "image_phash", &method_image_phash, -1);
|
23
|
-
rb_define_method(Grayphash, "hamming", &method_hamming, -1);
|
24
|
-
sdl_library = dlopen("/usr/lib/libpHash.so", RTLD_LAZY);
|
25
|
-
}
|
26
|
-
|
27
|
-
VALUE method_hamming(int argc, VALUE * argv, VALUE self) {
|
28
|
-
if (argc !=2) { // there should only be 1 or 2 arguments
|
29
|
-
rb_raise(rb_eArgError, "wrong number of arguments");
|
30
|
-
}
|
31
|
-
unsigned long long hash1 = rb_num2ull(argv[0]);
|
32
|
-
unsigned long long hash2 = rb_num2ull(argv[1]);
|
33
|
-
|
34
|
-
|
35
|
-
unsigned long long x = hash1^hash2;
|
36
|
-
const unsigned long long m1 = 0x5555555555555555ULL;
|
37
|
-
const unsigned long long m2 = 0x3333333333333333ULL;
|
38
|
-
const unsigned long long h01 = 0x0101010101010101ULL;
|
39
|
-
const unsigned long long 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);
|
44
|
-
}
|
45
|
-
|
46
|
-
|
47
|
-
VALUE method_image_phash(int argc, VALUE * argv, VALUE self) {
|
48
|
-
if(argc==0) return Qnil;
|
49
|
-
char* file = StringValuePtr(*argv);
|
50
|
-
unsigned long long hash = 0;
|
51
|
-
int* (*phash_func)();
|
52
|
-
phash_func = dlsym(sdl_library, "ph_dct_imagehash");
|
53
|
-
((*phash_func)(file, &hash));
|
54
|
-
|
55
|
-
return ULL2NUM(hash);
|
56
|
-
}
|
57
|
-
|
58
|
-
VALUE method_close(VALUE self) {
|
59
|
-
if(dlclose(sdl_library)==0) {
|
60
|
-
return Qtrue;
|
61
|
-
}
|
62
|
-
else {
|
63
|
-
return Qfalse;
|
64
|
-
}
|
65
|
-
}
|
66
|
-
|
67
|
-
VALUE method_about(VALUE self) {
|
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.2).");
|
69
|
-
//char* (*about)();
|
70
|
-
//about = dlsym(sdl_library, "ph_about");
|
71
|
-
|
72
|
-
//return rb_str_new_cstr((*about)());
|
73
|
-
}
|