Class: Puppet::Pops::Types::PArrayType
Constant Summary
collapse
- DATA =
PArrayType.new(PDataType::DEFAULT, DEFAULT_SIZE)
- DEFAULT =
PArrayType.new(nil)
- EMPTY =
PArrayType.new(PUnitType::DEFAULT, ZERO_SIZE)
Puppet::Pops::Types::PCollectionType::DEFAULT_SIZE, Puppet::Pops::Types::PCollectionType::NOT_EMPTY_SIZE, Puppet::Pops::Types::PCollectionType::ZERO_SIZE
Instance Attribute Summary collapse
#size_type
Class Method Summary
collapse
Instance Method Summary
collapse
#has_empty_range?, #iterable?, #size_range
Methods inherited from PAnyType
#==, #assignable?, #callable?, #callable_with?, #check_self_recursion, #create, #iterable?, #kind_of_callable?, #name, #new_function, #really_instance?, #simple_name, simple_name, #to_alias_expanded_s, #to_s
_ptype, create_ptype, register_ptypes
#_ptype
Constructor Details
#initialize(element_type, size_type = nil) ⇒ PArrayType
Returns a new instance of PArrayType.
2317
2318
2319
2320
2321
2322
2323
2324
|
# File 'lib/puppet/pops/types/types.rb', line 2317
def initialize(element_type, size_type = nil)
super(size_type)
if !size_type.nil? && size_type.from == 0 && size_type.to == 0
@element_type = PUnitType::DEFAULT
else
@element_type = element_type
end
end
|
Instance Attribute Details
#element_type ⇒ Object
2315
2316
2317
|
# File 'lib/puppet/pops/types/types.rb', line 2315
def element_type
@element_type
end
|
Class Method Details
.new_function(_, loader) ⇒ Object
Returns a new function that produces an Array
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
|
# File 'lib/puppet/pops/types/types.rb', line 2389
def self.new_function(_, loader)
@new_function ||= Puppet::Functions.create_loaded_function(:new_array, loader) do
dispatch :from_args do
param 'Any', :from
optional_param 'Boolean', :wrap
end
def from_args(from, wrap = false)
case from
when NilClass
if wrap
[nil]
else
throw :undefined_value
end
when Array
from
when Hash
wrap ? [from] : from.to_a
when PBinaryType::Binary
wrap ? [from] : from.binary_buffer.bytes.to_a
else
if wrap
[from]
else
if PIterableType::DEFAULT.instance?(from)
Iterable.on(from).to_a
else
t = Puppet::Pops::Types::TypeCalculator.singleton.infer(from).generalize
raise TypeConversionError.new("Value of type '#{t}' cannot be converted to Array")
end
end
end
end
end
end
|
.register_ptype(loader, ir) ⇒ Object
2306
2307
2308
2309
2310
2311
2312
2313
|
# File 'lib/puppet/pops/types/types.rb', line 2306
def self.register_ptype(loader, ir)
create_ptype(loader, ir, 'CollectionType',
'element_type' => {
KEY_TYPE => POptionalType.new(PType::DEFAULT),
KEY_VALUE => nil
}
)
end
|
Instance Method Details
#accept(visitor, guard) ⇒ Object
2326
2327
2328
2329
|
# File 'lib/puppet/pops/types/types.rb', line 2326
def accept(visitor, guard)
super
@element_type.accept(visitor, guard) unless @element_type.nil?
end
|
#callable_args?(callable, guard = nil) ⇒ 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.
2332
2333
2334
2335
2336
2337
|
# File 'lib/puppet/pops/types/types.rb', line 2332
def callable_args?(callable, guard = nil)
param_t = callable.param_types
block_t = callable.block_type
(param_t.nil? || param_t.assignable?(self, guard)) && (block_t.nil? || block_t.assignable?(PUndefType::DEFAULT, guard))
end
|
#eql?(o) ⇒ Boolean
2350
2351
2352
|
# File 'lib/puppet/pops/types/types.rb', line 2350
def eql?(o)
super && @element_type == o.element_type
end
|
#generalize ⇒ Object
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
|
# File 'lib/puppet/pops/types/types.rb', line 2339
def generalize
if self == DATA
self
elsif @element_type.nil?
DEFAULT
else
ge_type = @element_type.generalize
@size_type.nil? && @element_type.equal?(ge_type) ? self : self.class.new(ge_type, nil)
end
end
|
2354
2355
2356
|
# File 'lib/puppet/pops/types/types.rb', line 2354
def hash
super ^ @element_type.hash
end
|
#instance?(o, guard = nil) ⇒ Boolean
2375
2376
2377
2378
2379
2380
2381
|
# File 'lib/puppet/pops/types/types.rb', line 2375
def instance?(o, guard = nil)
return false unless o.is_a?(Array)
element_t = element_type
return false unless element_t.nil? || o.all? {|element| element_t.instance?(element, guard) }
size_t = size_type
size_t.nil? || size_t.instance?(o.size, guard)
end
|
#iterable_type(guard = nil) ⇒ Object
#normalize(guard = nil) ⇒ Object
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
|
# File 'lib/puppet/pops/types/types.rb', line 2358
def normalize(guard = nil)
if self == DATA
self
elsif @element_type.nil?
DEFAULT
else
ne_type = @element_type.normalize(guard)
@element_type.equal?(ne_type) ? self : self.class.new(ne_type, @size_type)
end
end
|
#resolve(type_parser, loader) ⇒ Object
2369
2370
2371
2372
2373
|
# File 'lib/puppet/pops/types/types.rb', line 2369
def resolve(type_parser, loader)
relement_type = @element_type
relement_type = relement_type.resolve(type_parser, loader) unless relement_type.nil?
relement_type.equal?(@element_type) ? self : self.class.new(relement_type, @size_type)
end
|