Sha256: b1b9e8e45c4cd9aaeaa562d81ee7148afe52f352023a5b9177c1ae73aedea5f7

Contents?: true

Size: 872 Bytes

Versions: 8

Compression:

Stored size: 872 Bytes

Contents

# frozen_string_literal: true

require 'bundler/setup'
require 'polyphony'

class Stream
  def initialize(io)
    @io = io
    @buffer = +''
    @length = 0
    @pos = 0
  end

  def getbyte
    if @pos == @length
      return nil if !fill_buffer
    end
    byte = @buffer[@pos].getbyte(0)
    @pos += 1
    byte
  end

  def getc
    if @pos == @length
      return nil if !fill_buffer
    end
    char = @buffer[@pos]
    @pos += 1
    char
  end

  def ungetc(c)
    @buffer.insert(@pos, c)
    @length += 1
    c
  end

  def gets
  end

  def read
  end

  def readpartial
  end

  private

  def fill_buffer
    Polyphony.backend_read(@io, @buffer, 8192, false, -1)
    @length = @buffer.size
  end
end

i, o = IO.pipe
s = Stream.new(i)

f = spin do
  loop do
    b = s.getbyte
    p getbyte: b
    s.ungetc(b.to_s) if rand > 0.5
  end
end

o << 'hello'
sleep 0.1

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
polyphony-1.6 examples/core/stream_mockup.rb
polyphony-1.5 examples/core/stream_mockup.rb
polyphony-1.4 examples/core/stream_mockup.rb
polyphony-1.3 examples/core/stream_mockup.rb
polyphony-1.2.1 examples/core/stream_mockup.rb
polyphony-1.2 examples/core/stream_mockup.rb
polyphony-1.1.1 examples/core/stream_mockup.rb
polyphony-1.1 examples/core/stream_mockup.rb