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