Class: Stream::BasicStream

Inherits:
Object
  • Object
show all
Includes:
Stream
Defined in:
lib/stream.rb

Overview

The abstract super class of all concrete Classes implementing the Stream interface. Only used for including module Stream.

Instance Method Summary collapse

Instance Method Details

#+(other) ⇒ ConcatenatedStream Originally defined in module Stream

Create a Stream::ConcatenatedStream by concatenating the receiver and other_stream.

Parameters:

  • other (Stream) —

    the stream to append

Returns:

  • (ConcatenatedStream) —

    (%w(a b c).create_stream + [4,5].create_stream).to_a ==> ["a", "b", "c", 4, 5]

#at_beginning? ⇒ Boolean Originally defined in module Stream

Returns false if the next #backward will return an element.

Returns:

  • (Boolean)

Raises:

  • (NotImplementedError)

#at_end? ⇒ Boolean Originally defined in module Stream

Returns false if the next #forward will return an element.

Returns:

  • (Boolean)

Raises:

  • (NotImplementedError)

#backward ⇒ Object Originally defined in module Stream

Move backward one position. Returns the source of current_edge.

Returns:

  • (Object) —

    the previous element

Raises:

#collect {|element| ... } ⇒ MappedStream Originally defined in module Stream

Create a Stream::MappedStream wrapper on self. Instead of returning the stream element on each move, the value of calling mapping is returned instead. See Stream::MappedStream for examples.

Yields:

  • (element) —

    mapping block applied to each element

Returns:

#concatenate ⇒ Object Originally defined in module Stream

Create a Stream::ConcatenatedStream on self, which must be a stream of streams.

#concatenate_collected(&mapping) ⇒ Object Originally defined in module Stream

Create a Stream::ConcatenatedStream, concatenated from streams build with the block for each element of self:

s = [1, 2, 3].create_stream.concatenate_collected { |i| [i,-i].create_stream }. s.to_a ==> [1, -1, 2, -2, 3, -3]

#create_stream ⇒ Object Originally defined in module Stream

create_stream is used for each Enumerable to create a stream for it. A Stream as an Enumerable returns itself.

#current ⇒ Object Originally defined in module Stream

Returns the element returned by the last call of #forward. If at_beginning? is true self is returned.

#current_edge ⇒ Object Originally defined in module Stream

Returns the array [#current,#peek].

#each ⇒ Object Originally defined in module Stream

Implements the standard iterator used by module Enumerable, by calling set_to_begin and basic_forward until at_end? is true.

#empty? ⇒ Boolean Originally defined in module Stream

Returns true if the stream is empty which is equivalent to at_end? and at_beginning? both being true.

Returns:

  • (Boolean)

#filtered {|element| ... } ⇒ FilteredStream Originally defined in module Stream

Return a Stream::FilteredStream which iterates over all my elements satisfying the condition specified by the block.

Yields:

  • (element) —

    filter predicate

Returns:

#first ⇒ Object Originally defined in module Stream

Returns the first element of the stream. This is accomplished by calling set_to_begin and #forward, which means a state change.

#forward ⇒ Object Originally defined in module Stream

Move forward one position. Returns the target of current_edge.

Returns:

  • (Object) —

    the next element

Raises:

#last ⇒ Object Originally defined in module Stream

Returns the last element of the stream. This is accomplished by calling set_to_begin and #backward, which means a state change.

#modify(&block) ⇒ Object Originally defined in module Stream

Create a Stream::ImplicitStream which wraps the receiver stream by modifying one or more basic methods of the receiver. As an example the method remove_first uses #modify to create an ImplicitStream which filters the first element away.

#move_backward_until {|element| ... } ⇒ Object? Originally defined in module Stream

Move backward until the boolean block is not false and returns the element found. Returns nil if no object matches.

Yields:

  • (element) —

    each element in backward direction

Returns:

  • (Object, nil) —

    the first matching element, or nil

#move_forward_until {|element| ... } ⇒ Object? Originally defined in module Stream

Move forward until the boolean block is not false and returns the element found. Returns nil if no object matches.

This is similar to #detect, but starts the search from the current position. #detect, which is inherited from Enumerable uses #each, which implicitly calls #set_to_begin.

Yields:

  • (element) —

    each element in forward direction

Returns:

  • (Object, nil) —

    the first matching element, or nil

#peek ⇒ Object Originally defined in module Stream

Returns the element returned by the last call of #backward. If at_end? is true self is returned.

#remove_first ⇒ Object Originally defined in module Stream

Returns a Stream::ImplicitStream wrapping a Stream::FilteredStream, which eliminates the first element of the receiver.

(1..3).create_stream.remove_first.to_a ==> [2,3]

#remove_last ⇒ Object Originally defined in module Stream

Returns a Stream which eliminates the first element of the receiver.

(1..3).create_stream.remove_last.to_a ==> [1,2]

Take a look at the source. The implementation is inefficient but elegant.

#reverse ⇒ Object Originally defined in module Stream

Create a Stream::ReversedStream wrapper on self.

#set_to_begin ⇒ Object Originally defined in module Stream

Position the stream before its first element, i.e. the next #forward will return the first element.

#set_to_end ⇒ Object Originally defined in module Stream

Position the stream behind its last element, i.e. the next #backward will return the last element.

#unwrapped ⇒ Object Originally defined in module Stream

A Stream::WrappedStream should return the wrapped stream unwrapped. If the stream is not a wrapper around another stream it simply returns itself.