Class: Puppet::Pops::Types::IntegerRangeIterator Private

Inherits:
Iterator show all
Includes:
Enumerable
Defined in:
lib/puppet/pops/types/iterable.rb

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

Instance Method Summary collapse

Methods inherited from Iterator

#all?, #any?, #map, #method_missing, #reduce, #respond_to_missing?, #step, #to_s

Methods included from Iterable

asserted_iterable, #each, #hash_style?, on, #step, #to_a, unbounded?

Constructor Details

#initialize(range, step = 1) ⇒ IntegerRangeIterator

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a new instance of IntegerRangeIterator.

Raises:

  • (ArgumentError)


315
316
317
318
319
320
# File 'lib/puppet/pops/types/iterable.rb', line 315

def initialize(range, step = 1)
  raise ArgumentError if step == 0
  @range = range
  @step_size = step
  @current = (step < 0 ? range.to : range.from) - step
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class Puppet::Pops::Types::Iterator

Instance Method Details

#element_typeObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



322
323
324
# File 'lib/puppet/pops/types/iterable.rb', line 322

def element_type
  @range
end

#nextObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



326
327
328
329
330
331
332
333
334
# File 'lib/puppet/pops/types/iterable.rb', line 326

def next
  value = @current + @step_size
  if @step_size < 0
    raise StopIteration if value < @range.from
  else
    raise StopIteration if value > @range.to
  end
  @current = value
end

#reverse_each(&block) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



336
337
338
339
# File 'lib/puppet/pops/types/iterable.rb', line 336

def reverse_each(&block)
  r = IntegerRangeIterator.new(@range, -@step_size)
  block_given? ? r.each(&block) : r
end

#sizeObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



341
342
343
# File 'lib/puppet/pops/types/iterable.rb', line 341

def size
  (@range.to - @range.from) / @step_size.abs
end

#step_iterator(step) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
# File 'lib/puppet/pops/types/iterable.rb', line 345

def step_iterator(step)
  # The step iterator must use a range that has its logical end truncated at an even step boundary. This will
  # fulfil two objectives:
  # 1. The element_type method should not report excessive integers as possible numbers
  # 2. A reversed iterator must start at the correct number
  #
  range = @range
  step = @step_size * step
  mod = (range.to - range.from) % step
  if mod < 0
    range = PIntegerType.new(range.from - mod, range.to)
  elsif mod > 0
    range = PIntegerType.new(range.from, range.to - mod)
  end
  IntegerRangeIterator.new(range, step)
end

#unbounded?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Boolean)


362
363
364
# File 'lib/puppet/pops/types/iterable.rb', line 362

def unbounded?
  false
end