Sha256: f5602412bc34b55643cd66e3cc62c7d50756c9463e53598fde496ce989c99ca1

Contents?: true

Size: 983 Bytes

Versions: 5

Compression:

Stored size: 983 Bytes

Contents

require 'forwardable'
require_relative '../core_extensions/binary_extensions'

module Helpers
  # Abstract view of a stream
  class BaseStreamView
    extend Forwardable
    include BinaryExtensions

    attr_reader :stream, :start_pos

    def initialize(stream, start_pos)
      @stream = stream
      @start_pos = start_pos
    end

    def_delegators :@stream, :seek, :each_byte, :pos
  end

  # View of a stream that has a specified size in bytes
  class SubStreamView < BaseStreamView
    attr_reader :end_pos, :size

    def initialize(stream, start_pos, size)
      super(stream, start_pos)
      @end_pos = @start_pos + size - 1
      @size = size
    end

    def remaining_bytes
      @end_pos - pos + 1
    end

    def eof?
      pos > @end_pos || @stream.eof?
    end
  end

  # View of a stream that ends when eof? is true
  class StreamView < BaseStreamView
    def initialize(stream)
      super(stream, 0)
    end

    def eof?
      @stream.eof?
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
file_data-6.0.0 lib/file_data/helpers/stream_view.rb
file_data-5.2.3 lib/file_data/helpers/stream_view.rb
file_data-5.2.2 lib/file_data/helpers/stream_view.rb
file_data-5.2.1 lib/file_data/helpers/stream_view.rb
file_data-5.2.0 lib/file_data/helpers/stream_view.rb