class Tango::Resource::Buffer

Resource buffer

@author Mckomo

Public Class Methods

new( size = 500 ) click to toggle source

Constructor of the Buffer

@param size [Integer] @return [Tango::Resource::Buffer]

# File lib/tango/resource/buffer.rb, line 13
def initialize( size = 500 )
  
  # Set max size of the buffer
  @size = size
  
  # Buffer storage for resources
  @resources = {}
  # Container of callbacks for each registered resource type
  @callbacks = {}
  
end

Public Instance Methods

fill( type, resource ) click to toggle source

Fill buffer with a resource

@param type [Symbol] @param resource [Object]

# File lib/tango/resource/buffer.rb, line 42
def fill( type, resource )
  
  raise ArgumentError, "Trying to fill object with unregistered type" unless @resources.keys.include?( type )

  # Append resource to the buffer
  @resources[type] << resource
  # Release the buffer if buffer size exceeded
  release( type ) if @resources[type].count >= @size   
end
register( type, &release_callback ) click to toggle source

Register new type of resource to be buffered

@param type [Symbol] @param release_callback [Proc]

# File lib/tango/resource/buffer.rb, line 29
def register( type, &release_callback )
  
  raise ArgumentError, "No release callback given" unless block_given?
  
  @resources[type] = []
  @callbacks[type] = release_callback
  
end
release_all() click to toggle source

Release all registered buffers

# File lib/tango/resource/buffer.rb, line 53
def release_all
  @resources.keys.each { |type| release( type ) }
end

Private Instance Methods

release( type ) click to toggle source

Release buffer with given type

@param type [Symbol]

# File lib/tango/resource/buffer.rb, line 62
def release( type )
  # Trigger callback on released resources
  @callbacks[type].tap do |c|
    c.call( @resources[type] ) 
  end
  @resources[type].clear # Clear resources from the buffer
end