Sha256: 1390fd063ca91302f2d3fbb03a7d87cc96093835c1478b621c7a8710540ddccb
Contents?: true
Size: 1013 Bytes
Versions: 6
Compression:
Stored size: 1013 Bytes
Contents
require 'volt/utils/generic_pool' # A counting pool behaves like a normal GenericPool, except for # each time lookup is called, remove should be called when complete. # The item will be completely removed from the GenericCountingPool # only when it has been removed an equal number of times it has been # looked up. class GenericCountingPool < GenericPool # return a created item with a count def generate_new(*args) [0, create(*args)] end # Finds an item and tracks that it was checked out. Use # #remove when the item is no longer needed. def find(*args, &block) item = __lookup(*args, &block) item[0] += 1 return item[1] end # Lookups an item def lookup(*args, &block) item = super(*args, &block) return item[1] end def transform_item(item) [0, item] end def remove(*args) item = __lookup(*args) item[0] -= 1 if item[0] == 0 # Last one using this item has removed it. super(*args) end end end
Version data entries
6 entries across 6 versions & 1 rubygems