Object
Create a new IO Write wrapper around io. io must provide write. If io is a string it will be automatically wrapped in an StringIO object.
The IO can handle bitstreams in either big or little endian format.
See IO::Read for more information.
# File lib/bindata/io.rb, line 268 def initialize(io) if BinData::IO::Write === io raise ArgumentError, "io must not be a BinData::IO::Write" end # wrap strings in a StringIO if io.respond_to?(:to_str) io = BinData::IO.create_string_io(io.to_str) end @raw_io = io @wnbits = 0 @wval = 0 @wendian = nil @bytes_remaining = nil end
To be called after all writebits have been applied.
# File lib/bindata/io.rb, line 332 def flushbits raise "Internal state error nbits = #{@wnbits}" if @wnbits >= 8 if @wnbits > 0 writebits(0, 8 - @wnbits, @wendian) end end
Sets a buffer of n bytes on the io stream. Any writes inside the block will be contained within this buffer. If less than n bytes are written inside the block, the remainder will be padded with ‘0’ bytes.
# File lib/bindata/io.rb, line 291 def with_buffer(n, &block) prev = @bytes_remaining if prev n = prev if n > prev prev -= n end @bytes_remaining = n begin block.call write_raw("\00"" * @bytes_remaining) ensure @bytes_remaining = prev end end
Writes nbits bits from val to the stream. endian specifies whether the bits are to be stored in :big or :little endian format.
# File lib/bindata/io.rb, line 315 def writebits(val, nbits, endian) if @wendian != endian # don't mix bits of differing endian flushbits @wendian = endian end clamped_val = val & mask(nbits) if endian == :big write_big_endian_bits(clamped_val, nbits) else write_little_endian_bits(clamped_val, nbits) end end
Generated with the Darkfish Rdoc Generator 2.