Module: Vigilem::Core::BufferHandler

Included in:
Adapters::BufferedAdapter, InputSystemHandler
Defined in:
lib/vigilem/core/buffer_handler.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#buffersObject

Returns the value of attribute buffers.



12
13
14
# File 'lib/vigilem/core/buffer_handler.rb', line 12

def buffers
  @buffers
end

Instance Method Details

#buffer(name = :default, type = nil) ⇒ Buffer Also known as: inbox

Parameters:

  • name, (Symbol)

    defaults to :default

  • type,

    defaults to nil

Returns:



36
37
38
39
40
41
42
43
# File 'lib/vigilem/core/buffer_handler.rb', line 36

def buffer(name=:default, type=nil)
  raise "default buffer not initialised, call #initialize_buffer_handler or #buffer=" unless buffers
  if type
    buffers[name] ||= Buffer.new(type)
  else
    buffers[name]
  end
end

#buffered(len, buffer_name = :default, opts = {}, &block) ⇒ Object

needed for peek

Parameters:

  • len (Integer)
  • buffer_name (Symbol) (defaults to: :default)
  • block (Proc)

Returns:



52
53
54
55
56
57
58
59
60
61
62
# File 'lib/vigilem/core/buffer_handler.rb', line 52

def buffered(len, buffer_name=:default, opts={}, &block)
  semaphore.synchronize {
    ret, still_to_get = buffer(buffer_name, opts[:type]).offset(len)
    if still_to_get > 0
      src_data = Support::Utils.send_all_or_no_args(block, still_to_get)
      called_for = src_data.slice!(0, still_to_get)
      ret.concat(called_for)
    end
    ret
  }
end

#buffered!(len = nil, buffer_name = :default, opts = {}, &block) ⇒ Object

buffers the block, by taking len from the buffer and calling the block for the remaining

Parameters:

  • len (Integer) (defaults to: nil)
  • buffer_name (Symbol) (defaults to: :default)
  • block (Proc)

Returns:



70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/vigilem/core/buffer_handler.rb', line 70

def buffered!(len=nil, buffer_name=:default, opts={}, &block)
  semaphore.synchronize {
    ret, still_to_get = buffer(buffer_name, opts[:type]).offset!(len)
    if still_to_get > 0
      src_data = Support::Utils.send_all_or_no_args(block, still_to_get)
      called_for = src_data.slice!(0, still_to_get)
      ret.concat(called_for)
      buffer(buffer_name).concat(src_data)
    end
    ret
  }
end

#initialize_buffer_handler(buffer_type = []) ⇒ Object

TODO:

set default buffer type to with somthing like Queue

TODO:

allow buffer_type argument to be a buffer object instead of a delegation to DefaultBuffer

Parameters:

  • buffer_type (defaults to: [])


18
19
20
# File 'lib/vigilem/core/buffer_handler.rb', line 18

def initialize_buffer_handler(buffer_type=[])
  (@buffers ||= ThreadSafe::Hash.new)[:default] = Buffer.new(buffer_type)
end

#semaphoreMonitor

Returns:

  • (Monitor)


24
25
26
27
28
29
30
# File 'lib/vigilem/core/buffer_handler.rb', line 24

def semaphore
  if defined? super
    super
  else
    @semaphore ||= Monitor.new
  end
end