module BinData::IO::Common::SeekableStream

def num_bytes_remaining

The number of bytes remaining in the input stream.
def num_bytes_remaining
  start_mark = @raw_io.pos
  @raw_io.seek(0, ::IO::SEEK_END)
  end_mark = @raw_io.pos
  if @buffer_end_points
    if @buffer_end_points[1] < end_mark
      end_mark = @buffer_end_points[1]
    end
  end
  bytes_remaining = end_mark - start_mark
  @raw_io.seek(start_mark, ::IO::SEEK_SET)
  bytes_remaining
end

def offset_raw

def offset_raw
  @raw_io.pos - @initial_pos
end

def read_raw(n)

def read_raw(n)
  @raw_io.read(n)
end

def seek_raw(n)

def seek_raw(n)
  @raw_io.seek(n, ::IO::SEEK_CUR)
end

def stream_init

def stream_init
  @initial_pos = @raw_io.pos
end

def with_readahead

method completes.
All io calls in +block+ are rolled back after this
def with_readahead
  mark = @raw_io.pos
  begin
    yield
  ensure
    @raw_io.seek(mark, ::IO::SEEK_SET)
  end
end

def write_raw(data)

def write_raw(data)
  @raw_io.write(data)
end