class Puppet::Pops::Types::IntegerRangeIterator

@api private

Public Class Methods

new(range, step = 1) click to toggle source
    # File lib/puppet/pops/types/iterable.rb
315 def initialize(range, step = 1)
316   raise ArgumentError if step == 0
317   @range = range
318   @step_size = step
319   @current = (step < 0 ? range.to : range.from) - step
320 end

Public Instance Methods

element_type() click to toggle source
    # File lib/puppet/pops/types/iterable.rb
322 def element_type
323   @range
324 end
next() click to toggle source
    # File lib/puppet/pops/types/iterable.rb
326 def next
327   value = @current + @step_size
328   if @step_size < 0
329     raise StopIteration if value < @range.from
330   else
331     raise StopIteration if value > @range.to
332   end
333   @current = value
334 end
reverse_each(&block) click to toggle source
    # File lib/puppet/pops/types/iterable.rb
336 def reverse_each(&block)
337   r = IntegerRangeIterator.new(@range, -@step_size)
338   block_given? ? r.each(&block) : r
339 end
size() click to toggle source
    # File lib/puppet/pops/types/iterable.rb
341 def size
342   (@range.to - @range.from) / @step_size.abs
343 end
step_iterator(step) click to toggle source
    # File lib/puppet/pops/types/iterable.rb
345 def step_iterator(step)
346   # The step iterator must use a range that has its logical end truncated at an even step boundary. This will
347   # fulfil two objectives:
348   # 1. The element_type method should not report excessive integers as possible numbers
349   # 2. A reversed iterator must start at the correct number
350   #
351   range = @range
352   step = @step_size * step
353   mod = (range.to - range.from) % step
354   if mod < 0
355     range = PIntegerType.new(range.from - mod, range.to)
356   elsif mod > 0
357     range = PIntegerType.new(range.from, range.to - mod)
358   end
359   IntegerRangeIterator.new(range, step)
360 end
unbounded?() click to toggle source
    # File lib/puppet/pops/types/iterable.rb
362 def unbounded?
363   false
364 end