Module: Vigilem::Core::BufferHandler
- Included in:
- Adapters::BufferedAdapter, InputSystemHandler
- Defined in:
- lib/vigilem/core/buffer_handler.rb
Instance Attribute Summary collapse
-
#buffers ⇒ Object
Returns the value of attribute buffers.
Instance Method Summary collapse
- #buffer(name = :default, type = nil) ⇒ Buffer (also: #inbox)
-
#buffered(len, buffer_name = :default, opts = {}, &block) ⇒ Object
needed for peek.
-
#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.
- #initialize_buffer_handler(buffer_type = []) ⇒ Object
- #semaphore ⇒ Monitor
Instance Attribute Details
#buffers ⇒ Object
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
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
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
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
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 |
#semaphore ⇒ 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 |