Class: FastImage::FiberStream

Inherits:
Object
  • Object
show all
Includes:
StreamUtil
Defined in:
lib/fastimage.rb

Overview

:nodoc:

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from StreamUtil

#read_byte, #read_int, #read_string_int

Constructor Details

#initialize(read_fiber) ⇒ FiberStream

Returns a new instance of FiberStream.



422
423
424
425
426
427
# File 'lib/fastimage.rb', line 422

def initialize(read_fiber)
  @read_fiber = read_fiber
  @pos = 0
  @strpos = 0
  @str = ''
end

Instance Attribute Details

#posObject (readonly)

Returns the value of attribute pos.



420
421
422
# File 'lib/fastimage.rb', line 420

def pos
  @pos
end

Instance Method Details

#peek(n) ⇒ Object

Peeking beyond the end of the input will raise



430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
# File 'lib/fastimage.rb', line 430

def peek(n)
  while @strpos + n - 1 >= @str.size
    unused_str = @str[@strpos..-1]
    new_string = @read_fiber.resume
    raise CannotParseImage if !new_string

    # we are dealing with bytes here, so force the encoding
    new_string.force_encoding("ASCII-8BIT") if String.method_defined? :force_encoding

    @str = unused_str + new_string
    @strpos = 0
  end

  @str[@strpos..(@strpos + n - 1)]
end

#read(n) ⇒ Object



446
447
448
449
450
451
# File 'lib/fastimage.rb', line 446

def read(n)
  result = peek(n)
  @strpos += n
  @pos += n
  result
end

#skip(n) ⇒ Object



453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
# File 'lib/fastimage.rb', line 453

def skip(n)
  discarded = 0
  fetched = @str[@strpos..-1].size
  while n > fetched
    discarded += @str[@strpos..-1].size
    new_string = @read_fiber.resume
    raise CannotParseImage if !new_string

    new_string.force_encoding("ASCII-8BIT") if String.method_defined? :force_encoding

    fetched += new_string.size
    @str = new_string
    @strpos = 0
  end
  @strpos = @strpos + n - discarded
  @pos += n
end