Parent

Files

Class/Module Index [+]

Quicksearch

BinData::IO::Write

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.

Public Class Methods

new(io) click to toggle source
# 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

Public Instance Methods

flush() click to toggle source
Alias for: flushbits
flushbits() click to toggle source

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
Also aliased as: flush
with_buffer(n, &block) click to toggle source

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
writebits(val, nbits, endian) click to toggle source

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
writebytes(str) click to toggle source

Writes the given string of bytes to the io stream.

# File lib/bindata/io.rb, line 308
def writebytes(str)
  flushbits
  write_raw(str)
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.