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