sfh 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.
@@ -0,0 +1,5 @@
1
+ require 'sfh'
2
+
3
+ 1000000.times {
4
+ Sfh.hash("asdf", 4)
5
+ }
@@ -0,0 +1,32 @@
1
+ require 'rake'
2
+ require 'mkmf'
3
+
4
+ SPEC = Gem::Specification.new do |spec|
5
+ spec.name = "sfh"
6
+ spec.version = "1.0.0"
7
+ spec.summary = "A gem for SuperFastHash (http://www.azillionmonkeys.com/qed/hash.html)"
8
+ spec.author = "Jonathan Wilkins"
9
+ spec.email = "jwilkins[at]nospam[dot]bitland[dot]net"
10
+ spec.has_rdoc = true
11
+ spec.extra_rdoc_files = ["README"]
12
+ spec.require_path = "."
13
+ spec.autorequire = "sfh.rb"
14
+
15
+ unfiltered_files = FileList['*', 'examples/*', 'bin/*', 'ext/*']
16
+ spec.files = unfiltered_files.delete_if do |filename|
17
+ filename.include?(".gem") || filename.include?("Makefile") ||
18
+ filename.include?(".so") || filename.include?(".o")
19
+ end
20
+ spec.executables = ['sfhsum']
21
+
22
+ # optional native component
23
+ if cc_command
24
+ spec.extensions << 'ext/extconf.rb'
25
+ end
26
+
27
+ puts "Building gem w/ "
28
+ spec.files.each do |f|
29
+ puts "- #{f}"
30
+ end
31
+
32
+ end
data/sfh.rb ADDED
@@ -0,0 +1,66 @@
1
+ require 'rubygems'
2
+ require 'inline'
3
+
4
+ class Sfh
5
+ inline(:C) do |builder|
6
+ builder.include '<stdio.h>'
7
+ builder.include '<sys/types.h>'
8
+ builder.include '<stdint.h>'
9
+
10
+ builder.c '
11
+ unsigned int hash(const char * data, int len)
12
+ {
13
+ unsigned int hash = len, tmp;
14
+ int rem;
15
+
16
+ if (len <= 0 || data == NULL) return 0;
17
+
18
+ rem = len & 3;
19
+ len >>= 2;
20
+
21
+ /* Main loop */
22
+ for (;len > 0; len--) {
23
+ hash += (*((const uint16_t *) (data)));
24
+ tmp = ((*((const uint16_t *) (data+2))) << 11) ^ hash;
25
+ hash = (hash << 16) ^ tmp;
26
+ data += 2*sizeof (unsigned short);
27
+ hash += hash >> 11;
28
+ }
29
+
30
+ /* Handle end cases */
31
+ switch (rem) {
32
+ case 3: hash += (*((const uint16_t *) (data)));
33
+ hash ^= hash << 16;
34
+ hash ^= data[sizeof (unsigned short)] << 18;
35
+ hash += hash >> 11;
36
+ break;
37
+ case 2: hash += (*((const uint16_t *) (data)));
38
+ hash ^= hash << 11;
39
+ hash += hash >> 17;
40
+ break;
41
+ case 1: hash += *data;
42
+ hash ^= hash << 10;
43
+ hash += hash >> 1;
44
+ }
45
+
46
+ /* Force "avalanching" of final 127 bits */
47
+ hash ^= hash << 3;
48
+ hash += hash >> 5;
49
+ hash ^= hash << 4;
50
+ hash += hash >> 17;
51
+ hash ^= hash << 25;
52
+ hash += hash >> 6;
53
+
54
+ return hash;
55
+ }
56
+ '
57
+ end
58
+ end
59
+
60
+ if $0 == __FILE__
61
+ h = Sfh.new()
62
+ puts "hashing 'asdf' a million times"
63
+ 1000000.times {
64
+ h.hash('asdf', 4)
65
+ }
66
+ end
@@ -0,0 +1,15 @@
1
+ require 'sfh'
2
+
3
+ str = 'asdf'
4
+ times = 1000000
5
+
6
+ h = Sfh.new
7
+ puts "hashing #{str} #{times} times"
8
+ times.times { h.hash(str, str.length) }
9
+ puts "done"
10
+
11
+ times = 1000
12
+ puts "hashing #{str}*1000000 #{times} times"
13
+ str = str*1000000
14
+ times.times { h.hash(str, str.length) }
15
+ puts "done"
metadata ADDED
@@ -0,0 +1,58 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.9.4
3
+ specification_version: 1
4
+ name: sfh
5
+ version: !ruby/object:Gem::Version
6
+ version: 1.0.0
7
+ date: 2008-02-17 00:00:00 -08:00
8
+ summary: A gem for SuperFastHash (http://www.azillionmonkeys.com/qed/hash.html)
9
+ require_paths:
10
+ - .
11
+ email: jwilkins[at]nospam[dot]bitland[dot]net
12
+ homepage:
13
+ rubyforge_project:
14
+ description:
15
+ autorequire: sfh.rb
16
+ default_executable:
17
+ bindir: bin
18
+ has_rdoc: true
19
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
20
+ requirements:
21
+ - - ">"
22
+ - !ruby/object:Gem::Version
23
+ version: 0.0.0
24
+ version:
25
+ platform: ruby
26
+ signing_key:
27
+ cert_chain:
28
+ post_install_message:
29
+ authors:
30
+ - Jonathan Wilkins
31
+ files:
32
+ - sfh.rb
33
+ - README
34
+ - test_sfh.rb
35
+ - examples
36
+ - ext
37
+ - bin
38
+ - gemspec.rb
39
+ - bin/sfhsum
40
+ - ext/sfh.c
41
+ - ext/test_sfh_swig.rb
42
+ - ext/sfh_wrap.c
43
+ - ext/sfh.i
44
+ - ext/extconf.rb
45
+ test_files: []
46
+
47
+ rdoc_options: []
48
+
49
+ extra_rdoc_files:
50
+ - README
51
+ executables:
52
+ - sfhsum
53
+ extensions:
54
+ - ext/extconf.rb
55
+ requirements: []
56
+
57
+ dependencies: []
58
+