Class: DTAS::Buffer

Inherits:
Object
  • Object
show all
Defined in:
lib/dtas/buffer.rb

Overview

:nodoc:

Defined Under Namespace

Modules: ReadWrite, Splice

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeBuffer

Returns a new instance of Buffer.



22
23
24
25
26
# File 'lib/dtas/buffer.rb', line 22

def initialize
  @bytes_xfer = 0
  @buffer_size = nil
  @to_io, @wr = DTAS::Pipe.new
end

Instance Attribute Details

#bytes_xferObject

Returns the value of attribute bytes_xfer.



20
21
22
# File 'lib/dtas/buffer.rb', line 20

def bytes_xfer
  @bytes_xfer
end

#to_ioObject (readonly)

call nread on this



18
19
20
# File 'lib/dtas/buffer.rb', line 18

def to_io
  @to_io
end

#wrObject (readonly)

processes (sources) should redirect to this



19
20
21
# File 'lib/dtas/buffer.rb', line 19

def wr
  @wr
end

Class Method Details

.load(hash) ⇒ Object



28
29
30
31
32
33
34
# File 'lib/dtas/buffer.rb', line 28

def self.load(hash)
  buf = new
  if hash
    bs = hash["buffer_size"] and buf.buffer_size = bs
  end
  buf
end

Instance Method Details

#__dst_error(dst, e) ⇒ Object



40
41
42
43
# File 'lib/dtas/buffer.rb', line 40

def __dst_error(dst, e)
  warn "dropping #{dst.inspect} due to error: #{e.message} (#{e.class})"
  dst.close unless dst.closed?
end

#broadcast(targets) ⇒ Object

This will modify targets returns one of:

  • :wait_readable

  • subset of targets array for :wait_writable

  • some type of StandardError

  • nil



51
52
53
54
55
56
57
58
59
60
# File 'lib/dtas/buffer.rb', line 51

def broadcast(targets)
  case targets.size
  when 0
    :ignore # this will pause decoders
  when 1
    broadcast_one(targets)
  else # infinity
    broadcast_inf(targets)
  end
end

#buf_resetObject



77
78
79
80
81
82
# File 'lib/dtas/buffer.rb', line 77

def buf_reset
  close!
  @bytes_xfer = 0
  @to_io, @wr = DTAS::Pipe.new
  @wr.pipe_size = @buffer_size if @buffer_size
end

#closeObject

don’t really close the pipes under normal circumstances, just clear data



72
73
74
75
# File 'lib/dtas/buffer.rb', line 72

def close
  bytes = inflight
  discard(bytes) if bytes > 0
end

#close!Object



84
85
86
87
# File 'lib/dtas/buffer.rb', line 84

def close!
  @to_io.close
  @wr.close
end

#inflightObject



67
68
69
# File 'lib/dtas/buffer.rb', line 67

def inflight
  @to_io.nread
end

#readable_iter {|_self, nil| ... } ⇒ Object

Yields:

  • (_self, nil)

Yield Parameters:

  • _self (DTAS::Buffer)

    the object that the method was called on



62
63
64
65
# File 'lib/dtas/buffer.rb', line 62

def readable_iter
  # this calls DTAS::Buffer#broadcast from DTAS::Player
  yield(self, nil)
end

#to_hshObject



36
37
38
# File 'lib/dtas/buffer.rb', line 36

def to_hsh
  @buffer_size ? { "buffer_size" => @buffer_size } : {}
end