Sha256: 35cee1569d3f5b343cd12960d0fea4345cab1a33b5735e8af2c5cd193f3acb1e

Contents?: true

Size: 1.23 KB

Versions: 1

Compression:

Stored size: 1.23 KB

Contents

module VirtDisk
  class ClientHead
    attr_reader :size, :start_byte_addr, :end_byte_addr, :seek_pos

    include ExportMethods

    def initialize(up_stream_module)
      @up_stream_module = up_stream_module
      @start_byte_addr  = 0
      @size             = @up_stream_module.size
      @end_byte_addr    = @size - 1
      @seek_pos         = @start_byte_addr
      self.delegate     = @up_stream_module
    end

    def close
      @up_stream_module.close
    end

    def seek_pos
      @seek_pos - @start_byte_addr
    end

    def seek(amt, whence = IO::SEEK_SET)
      case whence
      when IO::SEEK_CUR
        @seek_pos += amt
      when IO::SEEK_END
        @seek_pos = @endByteAddr + amt
      when IO::SEEK_SET
        @seek_pos = amt + @start_byte_addr
      end
      @seek_pos
    end

    def read(len)
      rb = mod_read(@seek_pos, len)
      @seek_pos += rb.length unless rb.nil?
      rb
    end

    def write(buf, len)
      nbytes = @up_stream_module.mod_write(@seek_pos, buf, len)
      @seek_pos += nbytes
      nbytes
    end

    def mod_read(offset, len)
      @up_stream_module.mod_read(offset, len)
    end

    def mod_write(offset, buffer, len)
      @up_stream_module.mod_write(offset, buffer, len)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
virt_disk-0.0.1 lib/virt_disk/client_head.rb