Class: Puppet::Pops::Types::PIntegerType
- Inherits:
-
PNumericType
- Object
- TypedModelObject
- PAnyType
- PScalarType
- PNumericType
- Puppet::Pops::Types::PIntegerType
- Defined in:
- lib/puppet/pops/types/types.rb
Constant Summary collapse
- DEFAULT =
PIntegerType.new(-Float::INFINITY)
Instance Method Summary collapse
-
#adjacent?(o) ⇒ Boolean
Checks if this range is adjacent to the given range.
-
#each(&block) ⇒ Object
Returns Enumerator if no block is given Returns nil if size is infinity (does not yield).
-
#finite_range? ⇒ Boolean
Will respond ‘true` for any range that is bounded at both ends.
- #generalize ⇒ Object
- #instance?(o) ⇒ Boolean
- #iterable?(guard = nil) ⇒ Boolean
- #iterable_type(guard = nil) ⇒ Object
-
#merge(o) ⇒ PIntegerType?
Concatenates this range with another range provided that the ranges intersect or are adjacent.
-
#range ⇒ Object
Returns the range as an array ordered so the smaller number is always first.
-
#size ⇒ Object
Returns Float.Infinity if one end of the range is unbound.
-
#to_size ⇒ PIntegerType
Returns a range where both to and from are positive numbers.
Methods inherited from PNumericType
#eql?, #from, #hash, #initialize, #intersect?, #numeric_from, #numeric_to, #to, #unbounded?
Methods inherited from PAnyType
#==, #accept, #assignable?, #callable?, #callable_args?, #eql?, #hash, #kind_of_callable?, #normalize, #simple_name, #to_alias_expanded_s, #to_s
Methods included from Visitable
Constructor Details
This class inherits a constructor from Puppet::Pops::Types::PNumericType
Instance Method Details
#adjacent?(o) ⇒ Boolean
Checks if this range is adjacent to the given range
690 691 692 |
# File 'lib/puppet/pops/types/types.rb', line 690 def adjacent?(o) o.is_a?(PIntegerType) && (@to + 1 == o.from || o.to + 1 == @from) end |
#each(&block) ⇒ Object
Returns Enumerator if no block is given Returns nil if size is infinity (does not yield)
733 734 735 736 |
# File 'lib/puppet/pops/types/types.rb', line 733 def each(&block) r = Iterable.on(self) block_given? ? r.each(&block) : r end |
#finite_range? ⇒ Boolean
Will respond ‘true` for any range that is bounded at both ends.
673 674 675 |
# File 'lib/puppet/pops/types/types.rb', line 673 def finite_range? @from != -Float::INFINITY && @to != Float::INFINITY end |
#generalize ⇒ Object
677 678 679 |
# File 'lib/puppet/pops/types/types.rb', line 677 def generalize DEFAULT end |
#instance?(o) ⇒ Boolean
681 682 683 |
# File 'lib/puppet/pops/types/types.rb', line 681 def instance?(o) o.is_a?(Integer) && o >= numeric_from && o <= numeric_to end |
#iterable?(guard = nil) ⇒ Boolean
710 711 712 |
# File 'lib/puppet/pops/types/types.rb', line 710 def iterable?(guard = nil) true end |
#iterable_type(guard = nil) ⇒ Object
714 715 716 717 |
# File 'lib/puppet/pops/types/types.rb', line 714 def iterable_type(guard = nil) # It's unknown if the iterable will be a range (min, max) or a "times" (0, max) PIterableType.new(PIntegerType::DEFAULT) end |
#merge(o) ⇒ PIntegerType?
Concatenates this range with another range provided that the ranges intersect or are adjacent. When that’s not the case, this method will return ‘nil`
700 701 702 703 704 705 706 707 708 |
# File 'lib/puppet/pops/types/types.rb', line 700 def merge(o) if intersect?(o) || adjacent?(o) min = @from <= o.from ? @from : o.from max = @to >= o.to ? @to : o.to PIntegerType.new(min, max) else nil end end |
#range ⇒ Object
Returns the range as an array ordered so the smaller number is always first. The number may be Infinity or -Infinity.
727 728 729 |
# File 'lib/puppet/pops/types/types.rb', line 727 def range [@from, @to] end |
#size ⇒ Object
Returns Float.Infinity if one end of the range is unbound
720 721 722 723 |
# File 'lib/puppet/pops/types/types.rb', line 720 def size return Float::INFINITY if @from == -Float::INFINITY || @to == Float::INFINITY 1+(to-from).abs end |
#to_size ⇒ PIntegerType
Returns a range where both to and from are positive numbers. Negative numbers are converted to zero
741 742 743 |
# File 'lib/puppet/pops/types/types.rb', line 741 def to_size @from >= 0 ? self : PIntegerType.new(0, @to < 0 ? 0 : @to) end |