Class: PEdump::CompositeIO
Instance Method Summary collapse
- #eof? ⇒ Boolean
-
#initialize(*ios) ⇒ CompositeIO
constructor
A new instance of CompositeIO.
- #read(amount = nil, buf = nil) ⇒ Object
- #rewind ⇒ Object
- #seek(pos) ⇒ Object
- #size ⇒ Object
- #tell ⇒ Object
Constructor Details
#initialize(*ios) ⇒ CompositeIO
Returns a new instance of CompositeIO.
3 4 5 6 7 |
# File 'lib/pedump/composite_io.rb', line 3 def initialize(*ios) @ios = ios.flatten @starts = ios.map(&:tell) # respect current position of each IO @pos = 0 end |
Instance Method Details
#eof? ⇒ Boolean
52 53 54 |
# File 'lib/pedump/composite_io.rb', line 52 def eof? @ios.all?(&:eof?) end |
#read(amount = nil, buf = nil) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/pedump/composite_io.rb', line 9 def read(amount = nil, buf = nil) buf ||= ''; buf1 = '' # truncates buffer to zero length if nothing read @ios.first.read(amount,buf) @ios[1..-1].each do |io| break if amount && buf.size >= amount io.read(amount ? (amount-buf.size) : nil, buf1) buf << buf1 end @pos += buf.size buf.size > 0 ? buf : (amount ? nil : buf ) end |
#rewind ⇒ Object
44 45 46 |
# File 'lib/pedump/composite_io.rb', line 44 def rewind seek(0) end |
#seek(pos) ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/pedump/composite_io.rb', line 30 def seek pos @pos = pos @ios.each_with_index do |io,idx| if pos > 0 sz = io.size-@starts[idx] io.seek( @starts[idx] + (pos < sz ? pos : sz) ) pos -= sz else # seek all remaining IOs to 0 io.seek @starts[idx] end end end |
#size ⇒ Object
48 49 50 |
# File 'lib/pedump/composite_io.rb', line 48 def size @ios.map(&:size).inject(&:+) end |
#tell ⇒ Object
26 27 28 |
# File 'lib/pedump/composite_io.rb', line 26 def tell @pos end |