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]
Create a new FilteredStream wrapping otherStream and selecting all its elements which satisfy the condition defined by the block_filter_.
# File lib/stream.rb, line 243 def initialize (otherStream, &filter) super otherStream @filter = filter @positionHolder = IntervalStream.new set_to_begin end
# File lib/stream.rb, line 250 def at_beginning?; @positionHolder.at_beginning?; end
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
# 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
# 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
Returns the current position of the stream.
# File lib/stream.rb, line 296 def pos; @positionHolder.pos; end
Generated with the Darkfish Rdoc Generator 2.