Class: R2CORBA::CORBA::TypeCode::Sequence

Inherits:
R2CORBA::CORBA::TypeCode show all
Defined in:
lib/corba/cbase/Typecode.rb,
lib/corba/jbase/Typecode.rb,
lib/corba/common/Typecode.rb

Overview

Fixed

Constant Summary

Constants inherited from R2CORBA::CORBA::TypeCode

LongLongRange, LongRange, OctetRange, ShortRange, ULongLongRange, ULongRange, UShortRange

Instance Attribute Summary

Attributes inherited from R2CORBA::CORBA::TypeCode

#tc_

Instance Method Summary collapse

Methods inherited from R2CORBA::CORBA::TypeCode

_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_count, #member_label, #member_name, #member_type, #member_visibility, #name, native_kind, register_id_type, #resolved_tc, #type_modifier, typecode_for_id, typecodes_for_name

Constructor Details

#initialize(*args) ⇒ Sequence

Returns a new instance of Sequence.



86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/corba/cbase/Typecode.rb', line 86

def initialize(*args)
  if CORBA::Native::TypeCode === args.first
    @tc_ = args.first
  else
    element_tc, bound = args
    raise ArgumentError, 'expected CORBA::TypeCode' unless element_tc.is_a?(CORBA::TypeCode)

    begin
      @tc_ = CORBA::Native::TypeCode.create_tc(TK_SEQUENCE, bound.to_i, element_tc.tc_)
    rescue ::NativeException
      CORBA::Exception.native2r($!)
    end
  end
end

Instance Method Details

#get_typeObject



526
527
528
# File 'lib/corba/common/Typecode.rb', line 526

def get_type
  self.content_type.kind == TK_OCTET || self.content_type.kind == TK_CHAR ? ::String : ::Array
end

#inspectObject



571
572
573
574
575
# File 'lib/corba/common/Typecode.rb', line 571

def inspect
  "#{self.class.name}: " +
      "length=#{if self.length.nil? then ""; else  self.length.to_s; end}; " +
      "content=#{self.content_type.inspect}"
end

#needs_conversion(val) ⇒ Object



563
564
565
566
567
568
569
# File 'lib/corba/common/Typecode.rb', line 563

def needs_conversion(val)
  if self.content_type.kind == TK_OCTET || self.content_type.kind == TK_CHAR
    !(::String === val)
  else
    !(::Array === val) ? true : val.any? { |el| self.content_type.needs_conversion(el) }
  end
end

#validate(val) ⇒ Object

Raises:

  • (::CORBA::MARSHAL)


530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
# File 'lib/corba/common/Typecode.rb', line 530

def validate(val)
  return val if val.nil?

  super(val) unless val.respond_to?(:to_str) || val.respond_to?(:to_ary)
  val = if self.content_type.kind == TK_OCTET || self.content_type.kind == TK_CHAR
    if val.respond_to?(:to_str)
      ::String === val ? val : val.to_str
    else
      s = ''
      val.to_ary.each { |e| s << (e.respond_to?(:to_int) ? e.to_int.chr : e.to_str) }
      s
    end
  elsif val.respond_to?(:to_ary)
    ::Array === val ? val : val.to_ary
  else
      a = []
      val.to_str.each_byte { |c| a << c }
      a
  end
  raise ::CORBA::MARSHAL.new(
    "sequence size exceeds bound: #{self.length.to_s}",
    1, ::CORBA::COMPLETED_NO) unless self.length == 0 || val.size <= self.length
  if ::Array === val
    if val.any? { |e| self.content_type.needs_conversion(e) }
      val.collect { |e| self.content_type.validate(e) }
    else
      val.each { |e| self.content_type.validate(e) }
    end
  else
    val
  end
end