# class Prime::PseudoPrimeGenerator

An abstract class for enumerating pseudo-prime numbers.

Concrete subclasses should override succ, next, rewind.

### Public Class Methods

new(ubound = nil) click to toggle source

    # File lib/prime.rb, line 237
    def initialize(ubound = nil)
      @ubound = ubound
    end

### Public Instance Methods

each() { |prime| ... } click to toggle source

Iterates the given block for each prime number.

    # File lib/prime.rb, line 269
    def each
      return self.dup unless block_given?
      if @ubound
        last_value = nil
        loop do
          prime = succ
          break last_value if prime > @ubound
          last_value = yield prime
        end
      else
        loop do
          yield succ
        end
      end
    end

next() click to toggle source

alias of `succ`.

    # File lib/prime.rb, line 257
    def next
      raise NotImplementedError, "need to define `next'"
    end

rewind() click to toggle source

Rewinds the internal position for enumeration.

See `Enumerator`#rewind.

    # File lib/prime.rb, line 264
    def rewind
      raise NotImplementedError, "need to define `rewind'"
    end

size() click to toggle source

    # File lib/prime.rb, line 304
    def size
      Float::INFINITY
    end

succ() click to toggle source

returns the next pseudo-prime number, and move the internal position forward.

`PseudoPrimeGenerator`#succ raises `NotImplementedError`.

    # File lib/prime.rb, line 252
    def succ
      raise NotImplementedError, "need to define `succ'"
    end

upper_bound() click to toggle source

    # File lib/prime.rb, line 244
    def upper_bound
      @ubound
    end

upper_bound=(ubound) click to toggle source

    # File lib/prime.rb, line 241
    def upper_bound=(ubound)
      @ubound = ubound
    end

with_index(offset = 0) { |prime, offset| ... } click to toggle source

see `Enumerator`#with_index.

    # File lib/prime.rb, line 286
    def with_index(offset = 0)
      return enum_for(:with_index, offset) { Float::INFINITY } unless block_given?
      return each_with_index(&proc) if offset == 0

      each do |prime|
        yield prime, offset
        offset += 1
      end
    end

with_object(obj) { |prime, obj| ... } click to toggle source

see `Enumerator`#with_object.

    # File lib/prime.rb, line 297
    def with_object(obj)
      return enum_for(:with_object, obj) { Float::INFINITY } unless block_given?
      each do |prime|
        yield prime, obj
      end
    end