require 'fltk'
require 'stream'
class StreamTester < Fltk::Window
include Stream
def initialize (s)
super(200,200)
@stream = s
pack = Fltk::Pack.new(200,200) {
%w{set_to_begin set_to_end forward backward at_end? at_beginning? current_edge entries inspect}.each { |m|
Fltk::Button.new(50,20,m) {|w,data|
@output.value(sendMsg(m))
puts sendMsg(m)
}
}
@output= Fltk::Input.new(200, 20)
@output.deactivate
}
pack.packtype = Fltk::VERTICAL
self.add(pack)
self.show
end
def sendMsg(m)
begin
@stream.send(m).inspect
rescue EndOfStreamException => msg
msg
end
end
end
module Stream
def openTester
StreamTester.new(self)
Fltk::run()
end
end
if $0 == __FILE__
def newstream; (1..6).create_stream; end
s = newstream.filtered { |x| x % 2 == 0 } \
+ newstream.filtered { |x| x % 2 != 0 }
s.reverse.openTester
randomStream =
Stream::ImplicitStream.new { |s|
s.set_to_begin_proc = proc {srand 1234}
s.at_end_proc = proc {false}
s.forward_proc = proc {rand}
}
randomStream.filtered { |x| x >= 0.5 }.collect { |x| x*100 }.openTester
end