Sha256: d7ab5e6a457adc4c82740c107d5b3835e504effad60ad593d835aeb24a0adeec

Contents?: true

Size: 1.13 KB

Versions: 17

Compression:

Stored size: 1.13 KB

Contents

# イテレータ
class Iterator
  # 列挙します
  def each
    begin
      while next?
        yield self.next
      end
    ensure
      self.close
    end
  end
  # 次があるか評価する
  def next?
  end
  # 次の要素を取得
  def next
  end
  # イテレータを破棄
  def close
  end
end

# 空のイテレータ
class EmptyIterator < Iterator
  def next?; false; end
  def next; nil; end
end

# フィルタ
class Filter < Iterator
  def initialize( it, &block )
    super()
    @it = it
    @test = block
    inner_next
  end
  def next?
    @has_next
  end
  def next
    raise "illegal state." unless next?
    begin
      return @next_element
    ensure
      inner_next
    end
  end
  def close
    @it.close if @it
  end

  private
  def inner_next
    while @it.next?
      item = @it.next
      matches = @test.call( item )
      if matches == :break
        break
      elsif matches == :true || matches == true
        @has_next = true
        @next_element = item
        return
      end
    end
    @has_next = false
    @next_element = nil
  end
end

Version data entries

17 entries across 17 versions & 2 rubygems

Version Path
unageanu-jiji-0.1.0 lib/jiji/util/iterator.rb
unageanu-jiji-1.0.0 lib/jiji/util/iterator.rb
unageanu-jiji-1.0.1 lib/jiji/util/iterator.rb
unageanu-jiji-1.0.2 lib/jiji/util/iterator.rb
unageanu-jiji-1.0.3 lib/jiji/util/iterator.rb
unageanu-jiji-1.1.0 lib/jiji/util/iterator.rb
unageanu-jiji-1.1.1 lib/jiji/util/iterator.rb
unageanu-jiji-1.1.2 lib/jiji/util/iterator.rb
unageanu-jiji-1.1.3 lib/jiji/util/iterator.rb
unageanu-jiji-1.1.4 lib/jiji/util/iterator.rb
unageanu-jiji-1.2.1 lib/jiji/util/iterator.rb
unageanu-jiji-1.2.3 lib/jiji/util/iterator.rb
unageanu-jiji-1.2.4 lib/jiji/util/iterator.rb
jiji-1.2.8 lib/jiji/util/iterator.rb
jiji-1.2.7 lib/jiji/util/iterator.rb
jiji-1.2.6 lib/jiji/util/iterator.rb
jiji-1.2.5 lib/jiji/util/iterator.rb