Class: R2CORBA::CORBA::TypeCode::Valuetype
- Inherits:
-
IdentifiedTypeCode
show all
- Defined in:
- lib/corba/cbase/Typecode.rb,
lib/corba/jbase/Typecode.rb,
lib/corba/common/Typecode.rb
Overview
Constant Summary
LongLongRange, LongRange, OctetRange, ShortRange, ULongLongRange, ULongRange, UShortRange
Instance Attribute Summary collapse
#tc_
Class Method Summary
collapse
Instance Method Summary
collapse
_tc, _wrap_native, #concrete_base_type, #content_type, #default_index, #discriminator_type, #equal?, #equivalent?, #fixed_digits, #fixed_scale, from_native, #get_compact_typecode, get_primitive_tc, #id, #is_recursive_tc?, #kind, #length, #member_label, #member_visibility, #name, native_kind, register_id_type, #resolved_tc, #type_modifier, typecode_for_id, typecodes_for_name
Constructor Details
#initialize(*args) ⇒ Valuetype
Returns a new instance of Valuetype.
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
|
# File 'lib/corba/cbase/Typecode.rb', line 170
def initialize(*args)
if CORBA::Native::TypeCode === args.first
@tc_ = args.first
@type = nil
@members = []
@tc_.member_count.times do |i|
@members << [@tc_.member_name(i), TypeCode.from_native(@tc_.member_type(i))]
end
super(id)
else
id, name, modifier, base, members_, type_ = args
raise ArgumentError, 'expected CORBA::Typecode' unless base.nil? || base.is_a?(CORBA::TypeCode)
raise ArgumentError, 'expected members Array' unless members_.is_a?(::Array) || type_.nil?
if type_.nil? && !members_.is_a?(::Array)
type_ = members_
members_ = []
end
@type = type_
@members = []
members_.each { |n, tc, access| add_member(n, tc, access) }
n_members = @members.collect do |n, tc, access|
[n.to_s, tc.tc_, access == :public ? CORBA::PUBLIC_MEMBER : CORBA::PRIVATE_MEMBER]
end
@tc_ = _create_tc(id, name, modifier, base, n_members)
super(id)
end
end
|
Instance Attribute Details
Returns the value of attribute members.
625
626
627
|
# File 'lib/corba/common/Typecode.rb', line 625
def members
@members
end
|
Class Method Details
.define_type(tc) ⇒ Object
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
|
# File 'lib/corba/common/Typecode.rb', line 634
def Valuetype.define_type(tc)
trunc_ids = [tc.id]
rtc = tc
while rtc != nil && rtc.type_modifier == CORBA::VM_TRUNCATABLE
rtc = rtc.concrete_base_type
trunc_ids << rtc.id unless rtc.nil?
end
code = %Q{
class #{tc.name} < ::CORBA::ValueBase
TRUNCATABLE_IDS = ['#{trunc_ids.join("', '")}'].freeze
def self._tc
@@tc_#{tc.name} ||= TypeCode.typecode_for_id('#{tc.id}')
end
module Intf
end
include Intf
end
#{tc.name}
}
value_type = ::Object.module_eval(code)
tc.members.each do |nm_, tc_, access_|
value_type::Intf.module_eval(%Q{attr_accessor :#{nm_}})
value_type::Intf.__send__(:private, nm_.intern)
value_type::Intf.__send__(:private, (nm_+'=').intern)
end
value_type
end
|
Instance Method Details
#add_member(name, tc, access) ⇒ Object
629
630
631
632
|
# File 'lib/corba/common/Typecode.rb', line 629
def add_member(name, tc, access)
raise ArgumentError, 'expected CORBA::TypeCode' unless tc.is_a?(CORBA::TypeCode)
@members << [name, tc, access]
end
|
696
697
698
699
700
|
# File 'lib/corba/common/Typecode.rb', line 696
def inspect
s = "#{self.class.name}: #{name} - #{id}\n"
@members.each { |n, t| s += " #{n} = "+t.inspect+"\n" }
s
end
|
#member_count ⇒ Object
684
685
686
|
# File 'lib/corba/common/Typecode.rb', line 684
def member_count
@members.size
end
|
#member_name(index) ⇒ Object
687
688
689
690
|
# File 'lib/corba/common/Typecode.rb', line 687
def member_name(index)
raise ::CORBA::TypeCode::Bounds.new if (index<0) || (index>=@members.size)
@members[index][0]
end
|
#member_type(index) ⇒ Object
691
692
693
694
|
# File 'lib/corba/common/Typecode.rb', line 691
def member_type(index)
raise ::CORBA::TypeCode::Bounds.new if (index<0) || (index>=@members.size)
@members[index][1]
end
|
#needs_conversion(val) ⇒ Object
679
680
681
682
|
# File 'lib/corba/common/Typecode.rb', line 679
def needs_conversion(val)
return false if val.nil?
@members.any? { |name,tc| tc.needs_conversion(val.__send__(name.intern)) }
end
|
#validate(val) ⇒ Object
666
667
668
669
670
671
672
673
674
675
676
677
|
# File 'lib/corba/common/Typecode.rb', line 666
def validate(val)
return val if val.nil?
super(val)
if needs_conversion(val)
vorg = val
val = vorg.class.new
@members.each { |name, tc| val.__send__((name+'=').intern, tc.validate(vorg.__send__(name.intern))) }
else
@members.each { |name, tc| tc.validate(val.__send__(name.intern)) }
end
val
end
|