class Stream::FilteredStream
A FilteredStream selects all elements which satisfy a given booelan block of another stream being wrapped.
A FilteredStream is created by the method filtered:
(1..6).create_stream.filtered { |x| x % 2 == 0 }.to_a ==> [2, 4, 6]
Public Class Methods
new(otherStream, &filter)
click to toggle source
Create a new FilteredStream wrapping otherStream and selecting all its elements which satisfy the condition defined by the block_filter_.
Calls superclass method
Stream::WrappedStream.new
# File lib/stream.rb, line 243 def initialize (otherStream, &filter) super otherStream @filter = filter @positionHolder = IntervalStream.new set_to_begin end
Public Instance Methods
at_beginning?()
click to toggle source
# File lib/stream.rb, line 250 def at_beginning?; @positionHolder.at_beginning?; end
at_end?()
click to toggle source
at_end? has to look ahead if there is an element satisfing the filter
# File lib/stream.rb, line 253 def at_end? @positionHolder.at_end? and begin if @peek.nil? @peek = wrapped_stream.move_forward_until( &@filter ) or return true @positionHolder.increment_stop end false end end
basic_backward()
click to toggle source
# File lib/stream.rb, line 277 def basic_backward wrapped_stream.backward unless @peek.nil? @peek = nil @positionHolder.backward wrapped_stream.move_backward_until(&@filter) or self end
basic_forward()
click to toggle source
# File lib/stream.rb, line 264 def basic_forward result = if @peek.nil? wrapped_stream.move_forward_until(&@filter) else # Do not move!! @peek end @peek = nil @positionHolder.forward result end
pos()
click to toggle source
Returns the current position of the stream.
# File lib/stream.rb, line 296 def pos; @positionHolder.pos; end
set_to_begin()
click to toggle source
Calls superclass method
Stream::WrappedStream#set_to_begin
# File lib/stream.rb, line 289 def set_to_begin super @peek = nil @positionHolder.set_to_begin end
set_to_end()
click to toggle source
# File lib/stream.rb, line 284 def set_to_end # Not super which is a WrappedStream, but same behavior as in Stream until at_end?; basic_forward; end end