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.
2333
2334
2335
2336
2337
2338
2339
2340
|
# File 'lib/puppet/pops/types/types.rb', line 2333
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
2331
2332
2333
|
# File 'lib/puppet/pops/types/types.rb', line 2331
def element_type
@element_type
end
|
Class Method Details
.new_function(_, loader) ⇒ Object
Returns a new function that produces an Array
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
|
# File 'lib/puppet/pops/types/types.rb', line 2405
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
2322
2323
2324
2325
2326
2327
2328
2329
|
# File 'lib/puppet/pops/types/types.rb', line 2322
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
2342
2343
2344
2345
|
# File 'lib/puppet/pops/types/types.rb', line 2342
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.
2348
2349
2350
2351
2352
2353
|
# File 'lib/puppet/pops/types/types.rb', line 2348
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
2366
2367
2368
|
# File 'lib/puppet/pops/types/types.rb', line 2366
def eql?(o)
super && @element_type == o.element_type
end
|
#generalize ⇒ Object
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
|
# File 'lib/puppet/pops/types/types.rb', line 2355
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
|
2370
2371
2372
|
# File 'lib/puppet/pops/types/types.rb', line 2370
def hash
super ^ @element_type.hash
end
|
#instance?(o, guard = nil) ⇒ Boolean
2391
2392
2393
2394
2395
2396
2397
|
# File 'lib/puppet/pops/types/types.rb', line 2391
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
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
|
# File 'lib/puppet/pops/types/types.rb', line 2374
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
2385
2386
2387
2388
2389
|
# File 'lib/puppet/pops/types/types.rb', line 2385
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
|