gamebox 0.1.1 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. data/.gitignore +4 -0
  2. data/Gemfile +9 -0
  3. data/History.txt +5 -0
  4. data/README.txt +4 -3
  5. data/Rakefile +12 -4
  6. data/TODO.txt +1 -5
  7. data/VERSION +1 -1
  8. data/docs/getting_started.rdoc +2 -2
  9. data/gamebox.gemspec +26 -10
  10. data/lib/gamebox/actor.rb +10 -3
  11. data/lib/gamebox/actor_factory.rb +2 -2
  12. data/lib/gamebox/actor_view.rb +14 -11
  13. data/lib/gamebox/actors/collidable_debugger.rb +35 -0
  14. data/lib/gamebox/actors/curtain.rb +2 -2
  15. data/lib/gamebox/actors/logo.rb +0 -6
  16. data/lib/gamebox/actors/score.rb +2 -5
  17. data/lib/gamebox/actors/spatial_debugger.rb +47 -0
  18. data/lib/gamebox/actors/svg_actor.rb +4 -6
  19. data/lib/gamebox/arbiter.rb +108 -15
  20. data/lib/gamebox/behavior.rb +29 -1
  21. data/lib/gamebox/behaviors/animated.rb +14 -23
  22. data/lib/gamebox/behaviors/audible.rb +1 -12
  23. data/lib/gamebox/behaviors/collidable.rb +29 -22
  24. data/lib/gamebox/behaviors/collidable/aabb_collidable.rb +61 -0
  25. data/lib/gamebox/behaviors/collidable/circle_collidable.rb +17 -0
  26. data/lib/gamebox/behaviors/collidable/collidable_shape.rb +35 -0
  27. data/lib/gamebox/behaviors/collidable/polygon_collidable.rb +85 -0
  28. data/lib/gamebox/behaviors/graphical.rb +13 -10
  29. data/lib/gamebox/behaviors/layered.rb +6 -20
  30. data/lib/gamebox/behaviors/physical.rb +116 -93
  31. data/lib/gamebox/class_finder.rb +6 -2
  32. data/lib/gamebox/config_manager.rb +24 -4
  33. data/lib/gamebox/data/config/objects.yml +5 -3
  34. data/lib/gamebox/ftor.rb +372 -0
  35. data/lib/gamebox/gamebox_application.rb +2 -8
  36. data/lib/gamebox/hooked_gosu_window.rb +30 -0
  37. data/lib/gamebox/input_manager.rb +78 -79
  38. data/lib/gamebox/lib/code_statistics.rb +1 -1
  39. data/lib/gamebox/lib/numbers_ext.rb +1 -1
  40. data/lib/gamebox/lib/rect.rb +612 -0
  41. data/lib/gamebox/physical_stage.rb +12 -2
  42. data/lib/gamebox/physics.rb +14 -3
  43. data/lib/gamebox/resource_manager.rb +28 -65
  44. data/lib/gamebox/sound_manager.rb +7 -13
  45. data/lib/gamebox/spatial_hash.rb +60 -14
  46. data/lib/gamebox/spatial_stagehand.rb +19 -0
  47. data/lib/gamebox/stage.rb +16 -1
  48. data/lib/gamebox/stage_manager.rb +1 -1
  49. data/lib/gamebox/svg_document.rb +1 -0
  50. data/lib/gamebox/tasks/gamebox_tasks.rb +23 -11
  51. data/lib/gamebox/templates/template_app/.gitignore +1 -0
  52. data/lib/gamebox/templates/template_app/Gemfile +1 -1
  53. data/lib/gamebox/templates/template_app/Rakefile +6 -21
  54. data/lib/gamebox/templates/template_app/config/environment.rb +14 -0
  55. data/lib/gamebox/templates/template_app/config/game.yml +2 -1
  56. data/lib/gamebox/templates/template_app/script/generate +0 -3
  57. data/lib/gamebox/templates/template_app/src/demo_stage.rb +1 -11
  58. data/lib/gamebox/templates/template_app/src/game.rb +0 -1
  59. data/lib/gamebox/templates/template_app/src/my_actor.rb +2 -2
  60. data/lib/gamebox/version.rb +1 -1
  61. data/lib/gamebox/views/graphical_actor_view.rb +15 -9
  62. data/lib/gamebox/wrapped_screen.rb +114 -7
  63. data/load_paths.rb +20 -0
  64. data/script/perf_spatial_hash.rb +73 -0
  65. data/spec/actor_view_spec.rb +1 -1
  66. data/spec/arbiter_spec.rb +264 -0
  67. data/spec/behavior_spec.rb +19 -2
  68. data/spec/collidable_spec.rb +105 -5
  69. data/spec/helper.rb +1 -1
  70. data/spec/label_spec.rb +1 -1
  71. data/spec/resource_manager_spec.rb +1 -1
  72. data/spec/spatial_hash_spec.rb +1 -1
  73. metadata +52 -10
  74. data/lib/gamebox/lib/surface_ext.rb +0 -76
@@ -10,7 +10,7 @@ class StageManager
10
10
  @backstage = Backstage.new
11
11
 
12
12
  @actor_factory.stage_manager = self
13
- stages = @resource_manager.load_config('stage_config')[:stages]
13
+ stages = @config_manager.load_config('stage_config')[:stages]
14
14
 
15
15
  @stage_names = []
16
16
  @stage_opts = []
@@ -1,5 +1,6 @@
1
1
  require 'rexml/document'
2
2
  require 'strscan'
3
+ require 'rect'
3
4
 
4
5
  class SvgDocument
5
6
 
@@ -1,14 +1,10 @@
1
1
  require 'gamebox/lib/platform'
2
2
 
3
- task :default => :run
4
3
  desc "Run the game"
5
4
  task :run do |t|
6
- if Platform.mac?
7
- sh "rsdl src/app.rb"
8
- else
9
- sh "ruby src/app.rb"
10
- end
5
+ sh "ruby src/app.rb"
11
6
  end
7
+ task :default => :run
12
8
 
13
9
  desc "Report code statistics (KLOCs, etc) from the application"
14
10
  task :stats do
@@ -19,11 +15,7 @@ end
19
15
 
20
16
  desc "Run the game with debug server"
21
17
  task :debug do |t|
22
- if Platform.mac?
23
- sh "rsdl src/app.rb -debug-server"
24
- else
25
- sh "ruby src/app.rb -debug-server"
26
- end
18
+ sh "ruby src/app.rb -debug-server"
27
19
  end
28
20
 
29
21
  desc "Bundle in all required gems"
@@ -46,4 +38,24 @@ rescue LoadError
46
38
  puts "install with gem install rspec"
47
39
  end
48
40
 
41
+ namespace :dist do
42
+ task :vendor do
43
+ sh 'wget http://github.com/downloads/shawn42/gamebox/vendor.zip; unzip vendor.zip; rm vendor.zip'
44
+ end
45
+ task :win do
46
+ # create dist dir
47
+ FileUtils.mkdir "dist" unless File.exist? "dist"
48
+ # pull down windows app shell
49
+ # expand into place
50
+ sh 'cd dist; wget http://github.com/downloads/shawn42/gamebox/gamebox_app.zip; unzip gamebox_app.zip; mv gamebox_app/* .; rm gamebox_app.zip; rm -rf gamebox_app'
51
+
52
+ # copy config/src/lib/data into dist/src
53
+ %w{vendor config data }.each do |dir|
54
+ FileUtils.cp_r dir, File.join('dist','src', dir) if File.exist? dir
55
+ end
56
+ FileUtils.cp_r 'src', File.join('dist', 'src')
57
+
58
+ # create zip of dist?
59
+ end
60
+ end
49
61
 
@@ -4,3 +4,4 @@ fakeroot
4
4
  *.o
5
5
  *.swp
6
6
  crate_boot.h
7
+ .bundle
@@ -2,4 +2,4 @@ source "http://rubygems.org"
2
2
  gem "gamebox"
3
3
  gem "publisher"
4
4
  gem "diy"
5
- gem "rubygame"
5
+ gem "gosu"
@@ -3,7 +3,6 @@ $: << libdir
3
3
  confdir = File.dirname(__FILE__)+"/config"
4
4
  $: << confdir
5
5
 
6
- ENV["RUBYGAME_NOINIT"]="1"
7
6
  require 'environment'
8
7
  require 'gamebox/tasks/gamebox_tasks'
9
8
  STATS_DIRECTORIES = [
@@ -12,25 +11,11 @@ STATS_DIRECTORIES = [
12
11
  %w(Maps maps/),
13
12
  %w(Unit\ tests specs/),
14
13
  %w(Libraries lib/),
15
- ].collect { |name, dir| [ name, "#{APP_ROOT}/#{dir}" ] }.select { |name, dir| File.directory?(dir) }
14
+ ].collect { |name, dir| [ name, "#{dir}" ] }.select { |name, dir| File.directory?(dir) }
16
15
 
17
- namespace :dist do
18
- task :vendor do
19
- sh 'wget http://github.com/downloads/shawn42/gamebox/vendor.zip; unzip vendor.zip; rm vendor.zip'
20
- end
21
- task :win do
22
- # create dist dir
23
- FileUtils.mkdir "dist" unless File.exist? "dist"
24
- # pull down windows app shell
25
- # expand into place
26
- sh 'cd dist; wget http://github.com/downloads/shawn42/gamebox/gamebox_app.zip; unzip gamebox_app.zip; mv gamebox_app/* .; rm gamebox_app.zip; rm -rf gamebox_app'
27
-
28
- # copy config/src/lib/data into dist/src
29
- %w{vendor config data }.each do |dir|
30
- FileUtils.cp_r dir, File.join('dist','src', dir) if File.exist? dir
31
- end
32
- FileUtils.cp_r 'src', File.join('dist', 'src')
33
-
34
- # create zip of dist?
35
- end
16
+ desc "Report code statistics (KLOCs, etc) from the application"
17
+ task :stats do
18
+ require 'code_statistics'
19
+ CodeStatistics.new(*STATS_DIRECTORIES).to_s
36
20
  end
21
+
@@ -32,6 +32,20 @@ MUSIC_PATH = APP_ROOT + "data/music/"
32
32
  GFX_PATH = APP_ROOT + "data/graphics/"
33
33
  FONTS_PATH = APP_ROOT + "data/fonts/"
34
34
 
35
+ require 'rubygems'
36
+
37
+ # Set up gems listed in the Gemfile.
38
+ gemfile = File.expand_path('../../Gemfile', __FILE__)
39
+ begin
40
+ ENV['BUNDLE_GEMFILE'] = gemfile
41
+ require 'bundler'
42
+ Bundler.setup
43
+ rescue Bundler::GemNotFound => e
44
+ STDERR.puts e.message
45
+ STDERR.puts "Try running `bundle install`."
46
+ exit!
47
+ end if File.exist?(gemfile)
48
+
35
49
  require 'gamebox'
36
50
 
37
51
  GAMEBOX_DATA_PATH = GAMEBOX_PATH + "data/"
@@ -1,6 +1,7 @@
1
1
  ---
2
+ :title: My Gamebox Game!
2
3
  :sound: true
3
- :auto_quit: :escape
4
+ :auto_quit: KbEscape
4
5
  :fullscreen: false
5
6
  :screen_resolution:
6
7
  - 1024
@@ -1,8 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'rubygems'
4
-
5
- ENV["RUBYGAME_NOINIT"]="1"
6
3
  app_root = File.join(File.dirname(__FILE__),'..')
7
4
  $: << app_root
8
5
  $: << File.join(app_root,'config')
@@ -1,21 +1,11 @@
1
1
  require 'stage'
2
- require 'rubygame/ftor'
3
2
  class DemoStage < Stage
4
3
  def setup
5
4
  super
6
- @my_actor = create_actor :my_actor
7
- @my_actor.x = 10
8
- @my_actor.y = 10
9
-
10
- @stars = []
11
- 20.times { @stars << Ftor.new(rand(viewport.width),rand(viewport.height)) }
5
+ @my_actor = create_actor :my_actor, :x => 10, :y => 10
12
6
  end
13
7
 
14
8
  def draw(target)
15
- target.fill [25,25,25,255]
16
- for star in @stars
17
- target.draw_circle_s([star.x,star.y],1,[255,255,255,255])
18
- end
19
9
  super
20
10
  end
21
11
  end
@@ -14,7 +14,6 @@ class Game
14
14
 
15
15
  def draw
16
16
  @stage_manager.draw @wrapped_screen
17
- @wrapped_screen.flip
18
17
  end
19
18
 
20
19
  end
@@ -2,8 +2,8 @@ require 'actor'
2
2
  require 'actor_view'
3
3
 
4
4
  class MyActorView < ActorView
5
- def draw(target, x_off, y_off)
6
- target.draw_box [@actor.x,@actor.y], [20,20], [240,45,45,255]
5
+ def draw(target, x_off, y_off, z)
6
+ target.draw_box @actor.x,@actor.y, 20, 20, [240,45,45,255], 1
7
7
  end
8
8
  end
9
9
 
@@ -1,7 +1,7 @@
1
1
  module Gamebox
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
- MINOR = 1
4
+ MINOR = 2
5
5
  TINY = 1
6
6
 
7
7
  ARRAY = [MAJOR, MINOR, TINY]
@@ -1,7 +1,7 @@
1
1
  require 'actor_view'
2
2
 
3
3
  class GraphicalActorView < ActorView
4
- def draw(target, x_off, y_off)
4
+ def draw(target, x_off, y_off, z)
5
5
  x = @actor.x
6
6
  y = @actor.y
7
7
 
@@ -13,25 +13,31 @@ class GraphicalActorView < ActorView
13
13
 
14
14
  #if @actor.is? :animated or
15
15
  if @actor.is? :physical
16
- w,h = *img.size
17
- offset_x = x-w/2 + x_off
18
- offset_y = y-h/2 + y_off
19
- img.blit target.screen, [offset_x,offset_y]
16
+ img_w = img.width
17
+ img_h = img.height
18
+
19
+ offset_x = x-img_w/2 + x_off
20
+ offset_y = y-img_h/2 + y_off
21
+ img.draw_rot offset_x, offset_y, z, @actor.rotation
20
22
  else
21
23
  graphical_behavior = @actor.graphical if @actor.is? :graphical
22
24
  if graphical_behavior && graphical_behavior.tiled?
23
25
  x_tiles = graphical_behavior.num_x_tiles
24
26
  y_tiles = graphical_behavior.num_y_tiles
25
- img_w, img_h = *img.size
27
+ # img_w, img_h = *img.size
28
+ img_w = img.width
29
+ img_h = img.height
26
30
  x_tiles.times do |col|
27
31
  y_tiles.times do |row|
28
- img.blit target.screen, [offset_x+col*img_w,offset_y+row*img_h]
32
+ # img.blit target.screen, [offset_x+col*img_w,offset_y+row*img_h]
33
+ img.draw offset_x+col*img_w, offset_y+row*img_h, z
29
34
  end
30
35
  end
31
36
  else
32
- img.blit target.screen, [offset_x,offset_y]
37
+ # img.blit target.screen, [offset_x,offset_y]
38
+ img.draw offset_x, offset_y, z
33
39
  end
34
-
35
40
  end
41
+ target.draw_line(offset_x,offset_y,offset_x+1,offset_y+1,[255,10,10],z)
36
42
  end
37
43
  end
@@ -2,15 +2,122 @@ class WrappedScreen
2
2
  constructor :config_manager
3
3
  attr_accessor :screen
4
4
  def setup
5
- w,h = @config_manager[:screen_resolution]
6
- flags = []
7
- flags << HWSURFACE
8
- flags << DOUBLEBUF
9
- flags << FULLSCREEN if @config_manager[:fullscreen]
10
- flags << OPENGL if @config_manager[:opengl]
11
- @screen = Screen.open [w,h], 0, flags
5
+ width, height = *@config_manager[:screen_resolution]
6
+ fullscreen = @config_manager[:fullscreen]
7
+ @screen = HookedGosuWindow.new width, height, fullscreen
8
+ @screen.caption = @config_manager[:title]
12
9
  end
10
+
13
11
  def method_missing(name,*args)
14
12
  @screen.send name, *args
15
13
  end
14
+
15
+ def draw_box(x1,y1,x2,y2,color, z)
16
+ c = convert_color(color)
17
+ @screen.draw_line x1, y1, c, x2, y1, c, z
18
+ @screen.draw_line x2, y1, c, x2, y2, c, z
19
+ @screen.draw_line x2, y2, c, x1, y2, c, z
20
+ @screen.draw_line x1, y2, c, x1, y1, c, z
21
+ end
22
+
23
+ def draw_line(x1,y1,x2,y2,color, z)
24
+ c = convert_color(color)
25
+ @screen.draw_line x1, y1, c, x2, y2, c, z
26
+ end
27
+
28
+ CIRCLE_STEP = 10
29
+ # is very expensive
30
+ # cache it if you can somehow
31
+ def draw_circle(cx,cy,r,color, z)
32
+ c_color = convert_color(color)
33
+
34
+ x1, y1 = 0, -r
35
+ circ = 2 * Math::PI * r
36
+ step = 360 / circ
37
+ step.step(45, step) { |a|
38
+ x2, y2 = offset_x(a, r), offset_y(a, r)
39
+ @screen.draw_line cx + x1, cy + y1, c_color, cx + x2, cy + y2, c_color, z
40
+ @screen.draw_line cx - x1, cy + y1, c_color, cx - x2, cy + y2, c_color, z
41
+ @screen.draw_line cx - x1, cy - y1, c_color, cx - x2, cy - y2, c_color, z
42
+ @screen.draw_line cx + x1, cy - y1, c_color, cx + x2, cy - y2, c_color, z
43
+ @screen.draw_line cx + y1, cy + x1, c_color, cx + y2, cy + x2, c_color, z
44
+ @screen.draw_line cx - y1, cy + x1, c_color, cx - y2, cy + x2, c_color, z
45
+ @screen.draw_line cx - y1, cy - x1, c_color, cx - y2, cy - x2, c_color, z
46
+ @screen.draw_line cx + y1, cy - x1, c_color, cx + y2, cy - x2, c_color, z
47
+ x1, y1 = x2, y2
48
+ }
49
+ @screen.draw_line cx + x1, cy + y1, c_color, cx - y1, cy - x1, c_color, z
50
+ @screen.draw_line cx - x1, cy + y1, c_color, cx + y1, cy - x1, c_color, z
51
+ @screen.draw_line cx - x1, cy - y1, c_color, cx + y1, cy + x1, c_color, z
52
+ @screen.draw_line cx + x1, cy - y1, c_color, cx - y1, cy + x1, c_color, z
53
+ end
54
+
55
+ # is very expensive
56
+ # cache it if you can somehow
57
+ def draw_circle_filled(cx,cy,r,color, z)
58
+ c_color = convert_color(color)
59
+
60
+ x1, y1 = 0, -r
61
+ circ = 2 * Math::PI * r
62
+ step = 360 / circ
63
+ step.step(45, step) { |a|
64
+ x2, y2 = offset_x(a, r), offset_y(a, r)
65
+ @screen.draw_quad \
66
+ cx + x1, cy + y1, c_color, cx + x2, cy + y2, c_color,
67
+ cx - x2, cy + y2, c_color, cx - x1, cy + y1, c_color, z
68
+ @screen.draw_quad \
69
+ cx - x1, cy - y1, c_color, cx - x2, cy - y2, c_color,
70
+ cx + x2, cy - y2, c_color, cx + x1, cy - y1, c_color, z
71
+ @screen.draw_quad \
72
+ cx + y1, cy + x1, c_color, cx + y2, cy + x2, c_color,
73
+ cx - y2, cy + x2, c_color, cx - y1, cy + x1, c_color, z
74
+ @screen.draw_quad \
75
+ cx - y1, cy - x1, c_color, cx - y2, cy - x2, c_color,
76
+ cx + y2, cy - x2, c_color, cx + y1, cy - x1, c_color, z
77
+ x1, y1 = x2, y2
78
+ }
79
+ @screen.draw_quad \
80
+ cx + x1, cy + y1, c_color, cx - y1, cy - x1, c_color,
81
+ cx + y1, cy - x1, c_color, cx - x1, cy + y1, c_color, z
82
+ @screen.draw_quad \
83
+ cx - x1, cy - y1, c_color, cx + y1, cy + x1, c_color,
84
+ cx - y1, cy + x1, c_color, cx + x1, cy - y1, c_color, z
85
+ end
86
+
87
+ def fill_screen(color, z)
88
+ c = convert_color(color)
89
+ @screen.draw_quad 0, 0, c, @screen.width, 0, c, 0, @screen.height, c, @screen.width, @screen.height, c, z
90
+ end
91
+
92
+ def fill(x1,y1,x2,y2,color, z)
93
+ c = convert_color(color)
94
+ @screen.draw_quad x1, y1, c, x2, y1, c, x1, y2, c, x2, y2, c, z
95
+ end
96
+
97
+ def convert_color(color)
98
+ @colors ||= {}
99
+ c = @colors[color]
100
+ if c.nil?
101
+ a = color.size == 4 ? color[3] : 255
102
+ c = Gosu::Color.new a.round, *color[0..2].map{|value|value.round}
103
+ @colors[color] = c
104
+ end
105
+ c
106
+ end
107
+
108
+ def size_text(text, font_file, font_size)
109
+ @font_cache ||= {}
110
+ @font_cache[font_file] ||= {}
111
+ font = @font_cache[font_file][font_size] ||= Font.new(@screen, font_file, font_size)
112
+
113
+ return [font.text_width(text),font.height]
114
+ end
115
+
116
+ def render_text(text, font_file, font_size, color)
117
+ @font_cache ||= {}
118
+ @font_cache[font_file] ||= {}
119
+ font = @font_cache[font_file][font_size] ||= Font.new(@screen, font_file, font_size)
120
+
121
+ DelayedText.new font, text
122
+ end
16
123
  end
@@ -0,0 +1,20 @@
1
+ begin
2
+ require File.expand_path('../.bundle/environment', __FILE__)
3
+ rescue LoadError
4
+ begin
5
+ # bust gem prelude
6
+ if defined? Gem
7
+ Gem.cache
8
+ gem 'bundler'
9
+ else
10
+ require 'rubygems'
11
+ end
12
+ require 'bundler'
13
+ Bundler.setup
14
+ rescue LoadError
15
+ module Bundler
16
+ def self.require(*args, &block); end
17
+ def self.method_missing(*args, &block); end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,73 @@
1
+ $: << File.dirname(__FILE__)+"/../lib/gamebox"
2
+
3
+ require 'spatial_hash'
4
+ require 'new_spatial_hash'
5
+ require 'benchmark'
6
+
7
+ Shape = Struct.new(:x,:y,:width,:height)
8
+
9
+ def do_it(hash, num_times, obj_size)
10
+ num_times.times do |i|
11
+ hash.add(Shape.new(i,i,obj_size,obj_size))
12
+ end
13
+
14
+ num_times.times do |i|
15
+ hash.items_at i, i
16
+ end
17
+
18
+ hash.rehash
19
+ hash.rehash
20
+ hash.rehash
21
+ hash.rehash
22
+
23
+ num_times.times do |i|
24
+ hash.items_at i, i
25
+ end
26
+ end
27
+
28
+ OldSpatialHash = SpatialHash
29
+
30
+ Benchmark.bm(60) do|b|
31
+
32
+ @lots = 1_000
33
+ @small_grid = 5
34
+ @medium_grid = 80
35
+
36
+ @small_object = 2
37
+ @medium_object = 20
38
+ @large_object = 100
39
+
40
+ impls = %w{old new}
41
+ impls.each do |impl|
42
+ klass = ObjectSpace.const_get "#{impl.capitalize}SpatialHash"
43
+ b.report("#{impl} w/ lots of small objects in small size grid") do
44
+ hash = klass.new @small_grid, true
45
+ do_it(hash,@lots, @small_object)
46
+ end
47
+
48
+ b.report("#{impl} w/ lots of medium objects in small size grid") do
49
+ hash = klass.new @small_grid, true
50
+ do_it(hash,@lots, @medium_object)
51
+ end
52
+
53
+ b.report("#{impl} w/ lots of small objects in medium size grid") do
54
+ hash = klass.new @medium_grid, true
55
+ do_it(hash,@lots, @small_object)
56
+ end
57
+
58
+ b.report("#{impl} w/ lots of medium objects in medium size grid") do
59
+ hash = klass.new @medium_grid, true
60
+ do_it(hash,@lots, @medium_object)
61
+ end
62
+
63
+ b.report("#{impl} w/ lots of large objects in small size grid") do
64
+ hash = klass.new @small_grid, true
65
+ do_it(hash,@lots, @large_object)
66
+ end
67
+ b.report("#{impl} w/ lots of large objects in small size grid no resize") do
68
+ hash = klass.new @small_grid, false
69
+ do_it(hash,@lots, @large_object)
70
+ end
71
+ end
72
+
73
+ end