google_hash 0.8.2 → 0.8.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. data/ChangeLog.txt +15 -0
  2. data/README +13 -4
  3. data/TODO +12 -6
  4. data/VERSION +1 -1
  5. data/ext/clean.bat +0 -0
  6. data/ext/clean.sh +0 -0
  7. data/ext/extconf.rb +9 -9
  8. data/ext/go.bat +0 -0
  9. data/ext/sparsehash-2.0.2/config.guess +0 -0
  10. data/ext/sparsehash-2.0.2/config.sub +0 -0
  11. data/ext/sparsehash-2.0.2/configure +0 -0
  12. data/ext/sparsehash-2.0.2/depcomp +0 -0
  13. data/ext/sparsehash-2.0.2/install-sh +0 -0
  14. data/ext/sparsehash-2.0.2/missing +0 -0
  15. data/ext/sparsehash-2.0.2/packages/deb.sh +0 -0
  16. data/ext/sparsehash-2.0.2/packages/deb/rules +0 -0
  17. data/ext/sparsehash-2.0.2/packages/rpm.sh +0 -0
  18. data/ext/sparsehash-2.0.2/sparsehash.sln +0 -0
  19. data/ext/sparsehash-2.0.2/vsprojects/hashtable_test/hashtable_test.vcproj +0 -0
  20. data/ext/sparsehash-2.0.2/vsprojects/libc_allocator_with_realloc_test/libc_allocator_with_realloc_test.vcproj +0 -0
  21. data/ext/sparsehash-2.0.2/vsprojects/simple_test/simple_test.vcproj +0 -0
  22. data/ext/sparsehash-2.0.2/vsprojects/sparsetable_unittest/sparsetable_unittest.vcproj +0 -0
  23. data/ext/sparsehash-2.0.2/vsprojects/time_hash_map/time_hash_map.vcproj +0 -0
  24. data/ext/sparsehash-2.0.2/vsprojects/type_traits_unittest/type_traits_unittest.vcproj +0 -0
  25. data/ext/spec.bat +0 -0
  26. data/ext/template/google_hash.cpp.erb +8 -11
  27. data/google_hash.gemspec +159 -142
  28. data/spec/bench_gc.rb +16 -14
  29. data/spec/benchmark.rb +7 -6
  30. data/spec/spec.google_hash.rb +23 -23
  31. metadata +3 -7
  32. data/changelog +0 -11
  33. data/ext/sparsehash-2.0.2/Makefile +0 -1336
  34. data/ext/sparsehash-2.0.2/config.status +0 -1238
  35. data/ext/sparsehash-2.0.2/src/config.h +0 -132
@@ -1,2 +1,17 @@
1
+ 0.8.3
2
+ add #delete method to DenseHash
3
+
1
4
  0.8.2
2
5
  hopefully building for os x mavericks'ish gcc's now
6
+
7
+ 0.8.1:
8
+ work with OS X newer compilers
9
+
10
+ 0.8.0:
11
+ add a delete method for the Sparse** classes
12
+ actually delete the hashmaps when the object is collected by Ruby, instead of leaking
13
+ hopefully work with more versions of GCC
14
+
15
+ 0.7.0:
16
+ fix building in linux with newer GCC's, fix building in windows with broken system command (?)
17
+ bump internal google_hash version to 0.8.2
data/README CHANGED
@@ -3,9 +3,16 @@ The "google_hash" gem.
3
3
  Its goal. To boldly be faster than any ruby hash has before (cue star trek TNG theme...).
4
4
 
5
5
  Well, really the goal is a better hash for Ruby, either one that is faster or more space efficient than ruby's default.
6
- To attempt to accomplish this, this library wraps the google hash sparse and dense hashes [1], which seem to perform much better
7
- at least for the #each method. It also creates some "specialized" hashes, for instance, those that take an integer for their key,
8
- for even better performance.
6
+ To attempt to accomplish this, this library wraps the google hash sparse and dense hashes [1], which may perform better
7
+ for your use case [make sure to benchmark before and after!].
8
+ It also creates some "specialized" hashes, for instance, those that take an integer for their key, for even better performance
9
+ and decreased "garbage collected" RAM use, which can significantely speed up certain apps.
10
+
11
+ # how to run this benchmark:
12
+
13
+ $ cd ext && ruby extconf.rb && make
14
+ $ cd ../spec
15
+ $ ruby benchmark.rb
9
16
 
10
17
  ruby 1.9.3p194 (2012-04-20 revision 35410) [i686-linux]
11
18
  inserting 400000 objects
@@ -76,7 +83,7 @@ for the case of the Sparse version.
76
83
 
77
84
  == Installation ==
78
85
 
79
- gem install google_hash (if on doze, you'll also first need the devkit installed).
86
+ gem install google_hash (if on windows, you'll also need the devkit installed).
80
87
 
81
88
  == usage ==
82
89
 
@@ -135,6 +142,8 @@ if you want it to remember insertion order, I could do that, too, or native "sto
135
142
  Could also add vectors, vector(pairs), priority queues, floats, native bignums, other more complex types, if anybody wants me to.
136
143
 
137
144
  This is meant to be one more tool in the rubyists toolbelt when trying to optimize speed-wise, and plans to expand to more types, but at least with this release it has a #each method.
145
+
146
+ Could add #sum methods, etc. for the numeric types, for instance.
138
147
 
139
148
  Enjoy.
140
149
 
data/TODO CHANGED
@@ -1,8 +1,14 @@
1
- could be faster:
1
+ = maybe =
2
+ can you use GoogleHashDenseDouble *any way*?
3
+ I think there's a spec that calls this out LOL
4
+
5
+ fix it being able to store those larger numbers [on demand] [failing specs]
6
+ on demand
7
+
8
+ the spec file itself lists various todo's
9
+
10
+ auto-serialize [hmm...they can already do this in ruby tho...]
11
+
12
+ could be faster [?]:
2
13
 
3
14
  http://code.google.com/p/ulib/wiki/AlignedHashingPerformance
4
-
5
- some specs fail [?]
6
-
7
- faster install, yikes!
8
- single file for C code...remove unit test junk from sparsehash code?
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.8.2
1
+ 0.8.3
File without changes
File without changes
@@ -13,7 +13,7 @@ Dir.chdir 'sparsehash-2.0.2' do
13
13
  configure = "sh configure --prefix=#{dir}"
14
14
  puts configure
15
15
  system configure
16
- system "make"
16
+ system "make #{ARGV[0]}" # allow ruby extconf.rb -j 2 for parallel/faster builds
17
17
  system "make install"
18
18
  end
19
19
  end
@@ -29,28 +29,28 @@ end
29
29
  # create our files...
30
30
 
31
31
  if OS.bits == 32
32
- unreachable_int = 31
33
- unreachable_long = 31
32
+ unreachable_int = "1<<31"
33
+ unreachable_long = "1<<31"
34
34
  else
35
- unreachable_int = 31
36
- unreachable_long = 63
35
+ unreachable_int = "1<<31"
36
+ unreachable_long = "(long) 1<<63" # TODO NaN here instead or something? land mine otherwise? hmm...
37
37
  end
38
38
 
39
39
  ruby_key = {:convert_keys_from_ruby => "", :convert_keys_to_ruby => "", :key_type => "VALUE", :english_key_type => "ruby",
40
- :extra_hash_params => ", hashrb, eqrb", :unreachable_key => "current_instance"}
40
+ :extra_hash_params => ", hashrb, eqrb", :unreachable_key => "current_instance"} # TODO unreachable -> NULL instead?
41
41
 
42
42
  int_key = {:assert_key_type => 'T_FIXNUM', :convert_keys_from_ruby => "FIX2INT",
43
- :convert_keys_to_ruby => "INT2FIX", :key_type => "int", :unreachable_key => "1<<#{unreachable_int}"}
43
+ :convert_keys_to_ruby => "INT2FIX", :key_type => "int", :unreachable_key => "#{unreachable_int}"}
44
44
 
45
45
  # "long" is useful on 64 bit...since it can handle a wider range of incoming int's
46
46
 
47
47
  long_key = {:assert_key_type => 'T_FIXNUM', :convert_keys_from_ruby => "FIX2LONG",
48
- :convert_keys_to_ruby => "LONG2FIX", :key_type => "long", :unreachable_key => "1<<#{unreachable_long}"}
48
+ :convert_keys_to_ruby => "LONG2FIX", :key_type => "long", :unreachable_key => "#{unreachable_long}"}
49
49
 
50
50
  # currently "big numbers" we handle by storing them as a double
51
51
  # TODO floats [does ruby do real doubles underneath?] too
52
52
  bignum_as_double_key = {:assert_key_type => ['T_BIGNUM', 'T_FIXNUM'], :convert_keys_from_ruby => "rb_big2dbl",
53
- :convert_keys_to_ruby => "rb_dbl2big", :key_type => "double", :unreachable_key => "1<<#{unreachable_long}", # LODO is this a bignum value though? LODO TEST this key on 64 bit!
53
+ :convert_keys_to_ruby => "rb_dbl2big", :key_type => "double", :unreachable_key => "#{unreachable_long}", # LODO is this a bignum value though? LODO TEST this key on 64 bit!
54
54
  #:extra_hash_params => ", hashdouble, eqdouble", # these methods provided natively these days?
55
55
  :extra_set_code => "if(TYPE(set_this) == T_FIXNUM)\nset_this = rb_int2big(FIX2INT(set_this));",
56
56
  :extra_get_code => "if(TYPE(get_this) == T_FIXNUM) \n get_this = rb_int2big(FIX2INT(get_this));"
data/ext/go.bat CHANGED
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -190,12 +190,11 @@ callback_alloc( VALUE klass )
190
190
 
191
191
  cbs->hash_map = new <%= type %>_hash_map< <%= key_type %>, <%= value_type %> <%= extra_hash_params %> >();
192
192
  <% if type == 'dense' %>
193
- // cbs->hash_map->set_deleted_key(<%= unreachable_key %>);
194
- // also needs another one ?
195
- cbs->hash_map->set_empty_key(<%= unreachable_key %>);
196
- <% end %>
197
-
198
- <% if type == 'sparse' %>
193
+ // needs both empty key and deleted keys [and different] for deletes...
194
+ cbs->hash_map->set_empty_key(<%= unreachable_key %>);
195
+ // in th eory could also call set_deleted_key "anytime" ...
196
+ cbs->hash_map->set_deleted_key((<%= unreachable_key %>)-1); // hope this is also typically unreachable from ruby land [?]
197
+ <% elsif type == 'sparse' %>
199
198
  cbs->hash_map->set_deleted_key(<%= unreachable_key %>);
200
199
  <% end %>
201
200
 
@@ -239,6 +238,7 @@ static VALUE rb_ghash_set(VALUE cb, VALUE set_this, VALUE to_this) {
239
238
 
240
239
  static VALUE rb_ghash_get(VALUE cb, VALUE get_this, int just_check_for_presence, int delete_it) {
241
240
  // TODO optionally not type check assert anymore [if it slows down computationally, that is...]
241
+ <%= options[:extra_get_code] %>
242
242
  <% if assert_key_type %>
243
243
  if(!(TYPE(get_this) == <%= assert_key_type %>)) {
244
244
  <%= "if(!(TYPE(get_this) == #{assert_key_type2}))" if assert_key_type2 %>
@@ -246,7 +246,6 @@ static VALUE rb_ghash_get(VALUE cb, VALUE get_this, int just_check_for_presence,
246
246
  }
247
247
  <% end %>
248
248
  RCallback* cbs = GetCallbackStruct(cb);
249
- <%= options[:extra_get_code] %>
250
249
 
251
250
  <%= type %>_hash_map< <%= key_type %>, <%= value_type %> <%= extra_hash_params %> >::iterator out = cbs->hash_map->find(<%= convert_keys_from_ruby %>(get_this));
252
251
 
@@ -356,10 +355,8 @@ void init_<%= type %>_<%= english_key_type %>_to_<%= english_value_type %>() {
356
355
  rb_define_method(rb_cGoogleHashLocal, "values", RUBY_METHOD_FUNC(rb_ghash_values), 0);
357
356
  rb_define_method(rb_cGoogleHashLocal, "keys", RUBY_METHOD_FUNC(rb_ghash_keys), 0);
358
357
  rb_define_method(rb_cGoogleHashLocal, "has_key?", RUBY_METHOD_FUNC(rb_ghash_get_present), 1);
359
- <% if type == 'sparse' %> // only ones its safe on for now, till I get it figured out...
360
- rb_define_method(rb_cGoogleHashLocal, "delete", RUBY_METHOD_FUNC(rb_ghash_delete), 1);
361
- rb_define_method(rb_cGoogleHashLocal, "clear", RUBY_METHOD_FUNC(rb_ghash_clear), 0);
362
- <% end %>
358
+ rb_define_method(rb_cGoogleHashLocal, "delete", RUBY_METHOD_FUNC(rb_ghash_delete), 1);
359
+ rb_define_method(rb_cGoogleHashLocal, "clear", RUBY_METHOD_FUNC(rb_ghash_clear), 0);
363
360
  rb_define_method(rb_cGoogleHashLocal, "key?", RUBY_METHOD_FUNC(rb_ghash_get_present), 1);
364
361
  rb_define_method(rb_cGoogleHashLocal, "member?", RUBY_METHOD_FUNC(rb_ghash_get_present), 1);
365
362
  rb_define_method(rb_cGoogleHashLocal, "include?", RUBY_METHOD_FUNC(rb_ghash_get_present), 1);
@@ -1,142 +1,159 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in rakefile, and run 'rake gemspec'
4
- # -*- encoding: utf-8 -*-
5
-
6
- Gem::Specification.new do |s|
7
- s.name = "google_hash"
8
- s.version = "0.8.0"
9
-
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["rogerdpack"]
12
- s.date = "2014-02-19"
13
- s.description = "Ruby wrappers to the google hash library"
14
- s.email = "rogerdpack@gmail.com"
15
- s.extensions = ["ext/extconf.rb"]
16
- s.extra_rdoc_files = [
17
- "README",
18
- "TODO",
19
- "changelog"
20
- ]
21
- s.files = [
22
- "README",
23
- "Rakefile",
24
- "TODO",
25
- "VERSION",
26
- "changelog",
27
- "ext/clean.bat",
28
- "ext/extconf.rb",
29
- "ext/go.bat",
30
- "ext/sparsehash-1.8.1/AUTHORS",
31
- "ext/sparsehash-1.8.1/COPYING",
32
- "ext/sparsehash-1.8.1/ChangeLog",
33
- "ext/sparsehash-1.8.1/INSTALL",
34
- "ext/sparsehash-1.8.1/Makefile.am",
35
- "ext/sparsehash-1.8.1/Makefile.in",
36
- "ext/sparsehash-1.8.1/NEWS",
37
- "ext/sparsehash-1.8.1/README",
38
- "ext/sparsehash-1.8.1/README_windows.txt",
39
- "ext/sparsehash-1.8.1/TODO",
40
- "ext/sparsehash-1.8.1/aclocal.m4",
41
- "ext/sparsehash-1.8.1/compile",
42
- "ext/sparsehash-1.8.1/config.guess",
43
- "ext/sparsehash-1.8.1/config.sub",
44
- "ext/sparsehash-1.8.1/configure",
45
- "ext/sparsehash-1.8.1/configure.ac",
46
- "ext/sparsehash-1.8.1/depcomp",
47
- "ext/sparsehash-1.8.1/doc/dense_hash_map.html",
48
- "ext/sparsehash-1.8.1/doc/dense_hash_set.html",
49
- "ext/sparsehash-1.8.1/doc/designstyle.css",
50
- "ext/sparsehash-1.8.1/doc/implementation.html",
51
- "ext/sparsehash-1.8.1/doc/index.html",
52
- "ext/sparsehash-1.8.1/doc/performance.html",
53
- "ext/sparsehash-1.8.1/doc/sparse_hash_map.html",
54
- "ext/sparsehash-1.8.1/doc/sparse_hash_set.html",
55
- "ext/sparsehash-1.8.1/doc/sparsetable.html",
56
- "ext/sparsehash-1.8.1/experimental/Makefile",
57
- "ext/sparsehash-1.8.1/experimental/README",
58
- "ext/sparsehash-1.8.1/experimental/example.c",
59
- "ext/sparsehash-1.8.1/experimental/libchash.c",
60
- "ext/sparsehash-1.8.1/experimental/libchash.h",
61
- "ext/sparsehash-1.8.1/google-sparsehash.sln",
62
- "ext/sparsehash-1.8.1/install-sh",
63
- "ext/sparsehash-1.8.1/m4/acx_pthread.m4",
64
- "ext/sparsehash-1.8.1/m4/google_namespace.m4",
65
- "ext/sparsehash-1.8.1/m4/namespaces.m4",
66
- "ext/sparsehash-1.8.1/m4/stl_hash.m4",
67
- "ext/sparsehash-1.8.1/m4/stl_hash_fun.m4",
68
- "ext/sparsehash-1.8.1/m4/stl_namespace.m4",
69
- "ext/sparsehash-1.8.1/missing",
70
- "ext/sparsehash-1.8.1/mkinstalldirs",
71
- "ext/sparsehash-1.8.1/packages/deb.sh",
72
- "ext/sparsehash-1.8.1/packages/deb/README",
73
- "ext/sparsehash-1.8.1/packages/deb/changelog",
74
- "ext/sparsehash-1.8.1/packages/deb/compat",
75
- "ext/sparsehash-1.8.1/packages/deb/control",
76
- "ext/sparsehash-1.8.1/packages/deb/copyright",
77
- "ext/sparsehash-1.8.1/packages/deb/docs",
78
- "ext/sparsehash-1.8.1/packages/deb/rules",
79
- "ext/sparsehash-1.8.1/packages/deb/sparsehash.dirs",
80
- "ext/sparsehash-1.8.1/packages/deb/sparsehash.install",
81
- "ext/sparsehash-1.8.1/packages/rpm.sh",
82
- "ext/sparsehash-1.8.1/packages/rpm/rpm.spec",
83
- "ext/sparsehash-1.8.1/src/config.h.in",
84
- "ext/sparsehash-1.8.1/src/config.h.include",
85
- "ext/sparsehash-1.8.1/src/google/dense_hash_map",
86
- "ext/sparsehash-1.8.1/src/google/dense_hash_set",
87
- "ext/sparsehash-1.8.1/src/google/sparse_hash_map",
88
- "ext/sparsehash-1.8.1/src/google/sparse_hash_set",
89
- "ext/sparsehash-1.8.1/src/google/sparsehash/densehashtable.h",
90
- "ext/sparsehash-1.8.1/src/google/sparsehash/hashtable-common.h",
91
- "ext/sparsehash-1.8.1/src/google/sparsehash/libc_allocator_with_realloc.h",
92
- "ext/sparsehash-1.8.1/src/google/sparsehash/sparsehashtable.h",
93
- "ext/sparsehash-1.8.1/src/google/sparsetable",
94
- "ext/sparsehash-1.8.1/src/google/type_traits.h",
95
- "ext/sparsehash-1.8.1/src/hash_test_interface.h",
96
- "ext/sparsehash-1.8.1/src/hashtable_test.cc",
97
- "ext/sparsehash-1.8.1/src/libc_allocator_with_realloc_test.cc",
98
- "ext/sparsehash-1.8.1/src/simple_test.cc",
99
- "ext/sparsehash-1.8.1/src/sparsetable_unittest.cc",
100
- "ext/sparsehash-1.8.1/src/testutil.h",
101
- "ext/sparsehash-1.8.1/src/time_hash_map.cc",
102
- "ext/sparsehash-1.8.1/src/type_traits_unittest.cc",
103
- "ext/sparsehash-1.8.1/src/windows/config.h",
104
- "ext/sparsehash-1.8.1/src/windows/google/sparsehash/sparseconfig.h",
105
- "ext/sparsehash-1.8.1/src/windows/port.cc",
106
- "ext/sparsehash-1.8.1/src/windows/port.h",
107
- "ext/sparsehash-1.8.1/vsprojects/hashtable_test/hashtable_test.vcproj",
108
- "ext/sparsehash-1.8.1/vsprojects/simple_test/simple_test.vcproj",
109
- "ext/sparsehash-1.8.1/vsprojects/sparsetable_unittest/sparsetable_unittest.vcproj",
110
- "ext/sparsehash-1.8.1/vsprojects/time_hash_map/time_hash_map.vcproj",
111
- "ext/sparsehash-1.8.1/vsprojects/type_traits_unittest/type_traits_unittest.vcproj",
112
- "ext/spec.bat",
113
- "ext/template/google_hash.cpp.erb",
114
- "ext/template/main.cpp.erb",
115
- "results.txt",
116
- "spec/bench_gc.rb",
117
- "spec/benchmark.rb",
118
- "spec/scale.rb",
119
- "spec/spec.google_hash.rb",
120
- "to_build_locally_run_ext_go_bat"
121
- ]
122
- s.homepage = "http://github.com/rdp/ruby_google_hash"
123
- s.require_paths = ["lib"]
124
- s.rubygems_version = "1.8.24"
125
- s.summary = "Ruby wrappers to the google hash library"
126
-
127
- if s.respond_to? :specification_version then
128
- s.specification_version = 3
129
-
130
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
131
- s.add_runtime_dependency(%q<sane>, [">= 0"])
132
- s.add_development_dependency(%q<hitimes>, [">= 0"])
133
- else
134
- s.add_dependency(%q<sane>, [">= 0"])
135
- s.add_dependency(%q<hitimes>, [">= 0"])
136
- end
137
- else
138
- s.add_dependency(%q<sane>, [">= 0"])
139
- s.add_dependency(%q<hitimes>, [">= 0"])
140
- end
141
- end
142
-
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "google_hash"
8
+ s.version = "0.8.2"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["rogerdpack"]
12
+ s.date = "2014-05-26"
13
+ s.description = "Ruby wrappers to the google hash library"
14
+ s.email = "rogerdpack@gmail.com"
15
+ s.extensions = ["ext/extconf.rb"]
16
+ s.extra_rdoc_files = [
17
+ "ChangeLog.txt",
18
+ "README",
19
+ "TODO"
20
+ ]
21
+ s.files = [
22
+ "ChangeLog.txt",
23
+ "README",
24
+ "Rakefile",
25
+ "TODO",
26
+ "VERSION",
27
+ "ext/clean.bat",
28
+ "ext/clean.sh",
29
+ "ext/extconf.rb",
30
+ "ext/go.bat",
31
+ "ext/sparsehash-2.0.2/AUTHORS",
32
+ "ext/sparsehash-2.0.2/COPYING",
33
+ "ext/sparsehash-2.0.2/ChangeLog",
34
+ "ext/sparsehash-2.0.2/INSTALL",
35
+ "ext/sparsehash-2.0.2/Makefile.am",
36
+ "ext/sparsehash-2.0.2/Makefile.in",
37
+ "ext/sparsehash-2.0.2/NEWS",
38
+ "ext/sparsehash-2.0.2/README",
39
+ "ext/sparsehash-2.0.2/README_windows.txt",
40
+ "ext/sparsehash-2.0.2/TODO",
41
+ "ext/sparsehash-2.0.2/aclocal.m4",
42
+ "ext/sparsehash-2.0.2/allocator.patch",
43
+ "ext/sparsehash-2.0.2/config.guess",
44
+ "ext/sparsehash-2.0.2/config.sub",
45
+ "ext/sparsehash-2.0.2/configure",
46
+ "ext/sparsehash-2.0.2/configure.ac",
47
+ "ext/sparsehash-2.0.2/depcomp",
48
+ "ext/sparsehash-2.0.2/doc/dense_hash_map.html",
49
+ "ext/sparsehash-2.0.2/doc/dense_hash_set.html",
50
+ "ext/sparsehash-2.0.2/doc/designstyle.css",
51
+ "ext/sparsehash-2.0.2/doc/implementation.html",
52
+ "ext/sparsehash-2.0.2/doc/index.html",
53
+ "ext/sparsehash-2.0.2/doc/performance.html",
54
+ "ext/sparsehash-2.0.2/doc/sparse_hash_map.html",
55
+ "ext/sparsehash-2.0.2/doc/sparse_hash_set.html",
56
+ "ext/sparsehash-2.0.2/doc/sparsetable.html",
57
+ "ext/sparsehash-2.0.2/experimental/Makefile",
58
+ "ext/sparsehash-2.0.2/experimental/README",
59
+ "ext/sparsehash-2.0.2/experimental/example.c",
60
+ "ext/sparsehash-2.0.2/experimental/libchash.c",
61
+ "ext/sparsehash-2.0.2/experimental/libchash.h",
62
+ "ext/sparsehash-2.0.2/install-sh",
63
+ "ext/sparsehash-2.0.2/m4/acx_pthread.m4",
64
+ "ext/sparsehash-2.0.2/m4/google_namespace.m4",
65
+ "ext/sparsehash-2.0.2/m4/namespaces.m4",
66
+ "ext/sparsehash-2.0.2/m4/stl_hash.m4",
67
+ "ext/sparsehash-2.0.2/m4/stl_hash_fun.m4",
68
+ "ext/sparsehash-2.0.2/missing",
69
+ "ext/sparsehash-2.0.2/packages/deb.sh",
70
+ "ext/sparsehash-2.0.2/packages/deb/README",
71
+ "ext/sparsehash-2.0.2/packages/deb/changelog",
72
+ "ext/sparsehash-2.0.2/packages/deb/compat",
73
+ "ext/sparsehash-2.0.2/packages/deb/control",
74
+ "ext/sparsehash-2.0.2/packages/deb/copyright",
75
+ "ext/sparsehash-2.0.2/packages/deb/docs",
76
+ "ext/sparsehash-2.0.2/packages/deb/rules",
77
+ "ext/sparsehash-2.0.2/packages/deb/sparsehash.dirs",
78
+ "ext/sparsehash-2.0.2/packages/deb/sparsehash.install",
79
+ "ext/sparsehash-2.0.2/packages/rpm.sh",
80
+ "ext/sparsehash-2.0.2/packages/rpm/rpm.spec",
81
+ "ext/sparsehash-2.0.2/sparsehash.sln",
82
+ "ext/sparsehash-2.0.2/src/config.h.in",
83
+ "ext/sparsehash-2.0.2/src/config.h.include",
84
+ "ext/sparsehash-2.0.2/src/google/dense_hash_map",
85
+ "ext/sparsehash-2.0.2/src/google/dense_hash_set",
86
+ "ext/sparsehash-2.0.2/src/google/sparse_hash_map",
87
+ "ext/sparsehash-2.0.2/src/google/sparse_hash_set",
88
+ "ext/sparsehash-2.0.2/src/google/sparsehash/densehashtable.h",
89
+ "ext/sparsehash-2.0.2/src/google/sparsehash/hashtable-common.h",
90
+ "ext/sparsehash-2.0.2/src/google/sparsehash/libc_allocator_with_realloc.h",
91
+ "ext/sparsehash-2.0.2/src/google/sparsehash/sparsehashtable.h",
92
+ "ext/sparsehash-2.0.2/src/google/sparsetable",
93
+ "ext/sparsehash-2.0.2/src/google/template_util.h",
94
+ "ext/sparsehash-2.0.2/src/google/type_traits.h",
95
+ "ext/sparsehash-2.0.2/src/hash_test_interface.h",
96
+ "ext/sparsehash-2.0.2/src/hashtable_test.cc",
97
+ "ext/sparsehash-2.0.2/src/libc_allocator_with_realloc_test.cc",
98
+ "ext/sparsehash-2.0.2/src/simple_compat_test.cc",
99
+ "ext/sparsehash-2.0.2/src/simple_test.cc",
100
+ "ext/sparsehash-2.0.2/src/sparsehash/dense_hash_map",
101
+ "ext/sparsehash-2.0.2/src/sparsehash/dense_hash_set",
102
+ "ext/sparsehash-2.0.2/src/sparsehash/internal/densehashtable.h",
103
+ "ext/sparsehash-2.0.2/src/sparsehash/internal/hashtable-common.h",
104
+ "ext/sparsehash-2.0.2/src/sparsehash/internal/libc_allocator_with_realloc.h",
105
+ "ext/sparsehash-2.0.2/src/sparsehash/internal/sparsehashtable.h",
106
+ "ext/sparsehash-2.0.2/src/sparsehash/sparse_hash_map",
107
+ "ext/sparsehash-2.0.2/src/sparsehash/sparse_hash_set",
108
+ "ext/sparsehash-2.0.2/src/sparsehash/sparsetable",
109
+ "ext/sparsehash-2.0.2/src/sparsehash/template_util.h",
110
+ "ext/sparsehash-2.0.2/src/sparsehash/type_traits.h",
111
+ "ext/sparsehash-2.0.2/src/sparsetable_unittest.cc",
112
+ "ext/sparsehash-2.0.2/src/stamp-h1",
113
+ "ext/sparsehash-2.0.2/src/template_util_unittest.cc",
114
+ "ext/sparsehash-2.0.2/src/testutil.h",
115
+ "ext/sparsehash-2.0.2/src/time_hash_map.cc",
116
+ "ext/sparsehash-2.0.2/src/type_traits_unittest.cc",
117
+ "ext/sparsehash-2.0.2/src/windows/config.h",
118
+ "ext/sparsehash-2.0.2/src/windows/google/sparsehash/sparseconfig.h",
119
+ "ext/sparsehash-2.0.2/src/windows/port.cc",
120
+ "ext/sparsehash-2.0.2/src/windows/port.h",
121
+ "ext/sparsehash-2.0.2/src/windows/sparsehash/internal/sparseconfig.h",
122
+ "ext/sparsehash-2.0.2/vsprojects/hashtable_test/hashtable_test.vcproj",
123
+ "ext/sparsehash-2.0.2/vsprojects/libc_allocator_with_realloc_test/libc_allocator_with_realloc_test.vcproj",
124
+ "ext/sparsehash-2.0.2/vsprojects/simple_test/simple_test.vcproj",
125
+ "ext/sparsehash-2.0.2/vsprojects/sparsetable_unittest/sparsetable_unittest.vcproj",
126
+ "ext/sparsehash-2.0.2/vsprojects/time_hash_map/time_hash_map.vcproj",
127
+ "ext/sparsehash-2.0.2/vsprojects/type_traits_unittest/type_traits_unittest.vcproj",
128
+ "ext/spec.bat",
129
+ "ext/template/google_hash.cpp.erb",
130
+ "ext/template/main.cpp.erb",
131
+ "google_hash.gemspec",
132
+ "results.txt",
133
+ "spec/bench_gc.rb",
134
+ "spec/benchmark.rb",
135
+ "spec/scale.rb",
136
+ "spec/spec.google_hash.rb",
137
+ "to_build_locally_run_ext_go_bat"
138
+ ]
139
+ s.homepage = "http://github.com/rdp/ruby_google_hash"
140
+ s.require_paths = ["lib"]
141
+ s.rubygems_version = "1.8.23"
142
+ s.summary = "Ruby wrappers to the google hash library"
143
+
144
+ if s.respond_to? :specification_version then
145
+ s.specification_version = 3
146
+
147
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
148
+ s.add_runtime_dependency(%q<sane>, [">= 0"])
149
+ s.add_development_dependency(%q<hitimes>, [">= 0"])
150
+ else
151
+ s.add_dependency(%q<sane>, [">= 0"])
152
+ s.add_dependency(%q<hitimes>, [">= 0"])
153
+ end
154
+ else
155
+ s.add_dependency(%q<sane>, [">= 0"])
156
+ s.add_dependency(%q<hitimes>, [">= 0"])
157
+ end
158
+ end
159
+