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
314 def initialize(range, step = 1)
315   raise ArgumentError if step == 0
316   @range = range
317   @step_size = step
318   @current = (step < 0 ? range.to : range.from) - step
319 end

Public Instance Methods

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