r2corba 1.4.1-x86-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGES +159 -0
- data/LICENSE +59 -0
- data/README +62 -0
- data/THANKS +52 -0
- data/bin/r2corba +8 -0
- data/bin/r2corba.bat +20 -0
- data/bin/ridlc +11 -0
- data/bin/ridlc.bat +23 -0
- data/bin/rins +7 -0
- data/bin/rins.bat +19 -0
- data/ext/.keep +0 -0
- data/lib/corba/cbase/IORMap.rb +33 -0
- data/lib/corba/cbase/ORB.rb +231 -0
- data/lib/corba/cbase/Request.rb +134 -0
- data/lib/corba/cbase/Streams.rb +129 -0
- data/lib/corba/cbase/Stub.rb +19 -0
- data/lib/corba/cbase/Typecode.rb +441 -0
- data/lib/corba/cbase/Values.rb +129 -0
- data/lib/corba/cbase/exception.rb +66 -0
- data/lib/corba/cbase/poa.rb +23 -0
- data/lib/corba/cbase/policies.rb +78 -0
- data/lib/corba/cbase/post_require.rb +14 -0
- data/lib/corba/cbase/require.rb +28 -0
- data/lib/corba/cmds/base.rb +85 -0
- data/lib/corba/cmds/test.rb +30 -0
- data/lib/corba/common/Any.rb +91 -0
- data/lib/corba/common/IDL.rb +104 -0
- data/lib/corba/common/ORB.rb +368 -0
- data/lib/corba/common/Object.rb +208 -0
- data/lib/corba/common/Request.rb +20 -0
- data/lib/corba/common/Servant.rb +108 -0
- data/lib/corba/common/Struct.rb +22 -0
- data/lib/corba/common/Stub.rb +79 -0
- data/lib/corba/common/Typecode.rb +1121 -0
- data/lib/corba/common/Union.rb +56 -0
- data/lib/corba/common/Values.rb +92 -0
- data/lib/corba/common/const.rb +22 -0
- data/lib/corba/common/exception.rb +68 -0
- data/lib/corba/common/require.rb +27 -0
- data/lib/corba/common/version.rb +22 -0
- data/lib/corba/idl/BiDirPolicyC.rb +63 -0
- data/lib/corba/idl/CosNamingC.rb +461 -0
- data/lib/corba/idl/CosNamingS.rb +309 -0
- data/lib/corba/idl/IDL.rb +21 -0
- data/lib/corba/idl/IORTable.pidl +62 -0
- data/lib/corba/idl/IORTableC.rb +117 -0
- data/lib/corba/idl/MessagingC.rb +904 -0
- data/lib/corba/idl/POAC.rb +930 -0
- data/lib/corba/idl/TAO_Ext.pidl +46 -0
- data/lib/corba/idl/TAO_ExtC.rb +179 -0
- data/lib/corba/idl/r2c_orb.rb +572 -0
- data/lib/corba/idl/require.rb +20 -0
- data/lib/corba/jbase/Any.rb +273 -0
- data/lib/corba/jbase/IORMap.rb +36 -0
- data/lib/corba/jbase/ORB.rb +99 -0
- data/lib/corba/jbase/Object.rb +98 -0
- data/lib/corba/jbase/Request.rb +226 -0
- data/lib/corba/jbase/Servant.rb +247 -0
- data/lib/corba/jbase/ServerRequest.rb +128 -0
- data/lib/corba/jbase/Streams.rb +671 -0
- data/lib/corba/jbase/Stub.rb +38 -0
- data/lib/corba/jbase/Typecode.rb +520 -0
- data/lib/corba/jbase/Values.rb +173 -0
- data/lib/corba/jbase/exception.rb +106 -0
- data/lib/corba/jbase/poa.rb +229 -0
- data/lib/corba/jbase/policies.rb +300 -0
- data/lib/corba/jbase/post_require.rb +14 -0
- data/lib/corba/jbase/require.rb +86 -0
- data/lib/corba/naming.rb +14 -0
- data/lib/corba/naming_service.rb +15 -0
- data/lib/corba/poa.rb +15 -0
- data/lib/corba/policies.rb +18 -0
- data/lib/corba/require.rb +17 -0
- data/lib/corba/svcs/ins/cos_naming.rb +426 -0
- data/lib/corba/svcs/ins/ins.rb +526 -0
- data/lib/corba/svcs/ins/naming_service.rb +119 -0
- data/lib/corba.rb +16 -0
- data/lib/ridlbe/ruby/config.rb +336 -0
- data/lib/ridlbe/ruby/orb.pidlc +0 -0
- data/lib/ridlbe/ruby/require.rb +16 -0
- data/lib/ridlbe/ruby/walker.rb +1582 -0
- data/mkrf_conf_bingem.rb +101 -0
- data/rakelib/bin.rake +80 -0
- data/rakelib/bin.rb +146 -0
- data/rakelib/build.rake +87 -0
- data/rakelib/config.rake +52 -0
- data/rakelib/config.rb +450 -0
- data/rakelib/ext.rake +242 -0
- data/rakelib/ext.rb +308 -0
- data/rakelib/ext_r2tao.rb +232 -0
- data/rakelib/gem.rake +212 -0
- data/rakelib/gem.rb +146 -0
- data/rakelib/package.rake +26 -0
- data/rakelib/test.rake +23 -0
- data/test/BiDirectional/Test.idl +34 -0
- data/test/BiDirectional/client.rb +132 -0
- data/test/BiDirectional/run_test.rb +68 -0
- data/test/BiDirectional/server.ior +1 -0
- data/test/BiDirectional/server.rb +169 -0
- data/test/CORBA_Services/Naming/BindingIterator/Test.idl +27 -0
- data/test/CORBA_Services/Naming/BindingIterator/client.rb +121 -0
- data/test/CORBA_Services/Naming/BindingIterator/ins.ior +1 -0
- data/test/CORBA_Services/Naming/BindingIterator/run_test.rb +82 -0
- data/test/CORBA_Services/Naming/BindingIterator/server.rb +109 -0
- data/test/CORBA_Services/Naming/Corbaname/Test.idl +27 -0
- data/test/CORBA_Services/Naming/Corbaname/client.rb +85 -0
- data/test/CORBA_Services/Naming/Corbaname/corbaname.ior +1 -0
- data/test/CORBA_Services/Naming/Corbaname/ins.ior +1 -0
- data/test/CORBA_Services/Naming/Corbaname/run_test.rb +88 -0
- data/test/CORBA_Services/Naming/Corbaname/server.rb +135 -0
- data/test/CORBA_Services/Naming/Simple/Test.idl +27 -0
- data/test/CORBA_Services/Naming/Simple/client.rb +84 -0
- data/test/CORBA_Services/Naming/Simple/ins.ior +1 -0
- data/test/CORBA_Services/Naming/Simple/run_test.rb +82 -0
- data/test/CORBA_Services/Naming/Simple/server.rb +109 -0
- data/test/Collocation/Diamond.idl +39 -0
- data/test/Collocation/run_test.rb +52 -0
- data/test/Collocation/test.rb +195 -0
- data/test/Connect_Timeout/Test.idl +27 -0
- data/test/Connect_Timeout/client.rb +111 -0
- data/test/Connect_Timeout/run_test.rb +52 -0
- data/test/DII/Test.idl +27 -0
- data/test/DII/client.rb +115 -0
- data/test/DII/run_test.rb +69 -0
- data/test/DII/server.ior +1 -0
- data/test/DII/server.rb +95 -0
- data/test/DSI/Test.idl +27 -0
- data/test/DSI/client.rb +66 -0
- data/test/DSI/run_test.rb +69 -0
- data/test/DSI/server.ior +1 -0
- data/test/DSI/server.rb +106 -0
- data/test/Exceptions/Test.idl +48 -0
- data/test/Exceptions/client.rb +118 -0
- data/test/Exceptions/run_test.rb +69 -0
- data/test/Exceptions/server.ior +1 -0
- data/test/Exceptions/server.rb +131 -0
- data/test/Hello/Test.idl +27 -0
- data/test/Hello/client.rb +78 -0
- data/test/Hello/run_test.rb +71 -0
- data/test/Hello/server.rb +95 -0
- data/test/IDL_Test/Test.idl +113 -0
- data/test/IDL_Test/Test_inc.idl +17 -0
- data/test/IDL_Test/client.rb +102 -0
- data/test/IDL_Test/run_test.rb +69 -0
- data/test/IDL_Test/server.ior +1 -0
- data/test/IDL_Test/server.rb +99 -0
- data/test/IORMap/Test.idl +27 -0
- data/test/IORMap/client.rb +73 -0
- data/test/IORMap/run_test.rb +69 -0
- data/test/IORMap/server.ior +1 -0
- data/test/IORMap/server.rb +114 -0
- data/test/IORTable/Test.idl +27 -0
- data/test/IORTable/client.rb +75 -0
- data/test/IORTable/run_test.rb +69 -0
- data/test/IORTable/server.ior +1 -0
- data/test/IORTable/server.rb +130 -0
- data/test/Implicit_Conversion/Test.idl +31 -0
- data/test/Implicit_Conversion/client.rb +110 -0
- data/test/Implicit_Conversion/run_test.rb +69 -0
- data/test/Implicit_Conversion/server.ior +1 -0
- data/test/Implicit_Conversion/server.rb +99 -0
- data/test/Multi_Threading/Multiple_ORB/Test.idl +27 -0
- data/test/Multi_Threading/Multiple_ORB/client.rb +82 -0
- data/test/Multi_Threading/Multiple_ORB/run_test.rb +71 -0
- data/test/Multi_Threading/Multiple_ORB/server.rb +108 -0
- data/test/Multi_Threading/Multiple_ORB/server0.ior +1 -0
- data/test/Multi_Threading/Multiple_ORB/server1.ior +1 -0
- data/test/Multi_Threading/Simple/Test.idl +27 -0
- data/test/Multi_Threading/Simple/client.rb +88 -0
- data/test/Multi_Threading/Simple/run_test.rb +69 -0
- data/test/Multi_Threading/Simple/server.ior +1 -0
- data/test/Multi_Threading/Simple/server.rb +118 -0
- data/test/Multi_Threading/Threads/Test.idl +31 -0
- data/test/Multi_Threading/Threads/client.rb +80 -0
- data/test/Multi_Threading/Threads/run_test.rb +76 -0
- data/test/Multi_Threading/Threads/server.ior +1 -0
- data/test/Multi_Threading/Threads/server.rb +119 -0
- data/test/Multi_Threading/Threads/watchdog.ior +1 -0
- data/test/Multi_Threading/Threads/watchdog.rb +87 -0
- data/test/Multiple_Servant_Interfaces/Test.idl +34 -0
- data/test/Multiple_Servant_Interfaces/client.rb +70 -0
- data/test/Multiple_Servant_Interfaces/run_test.rb +69 -0
- data/test/Multiple_Servant_Interfaces/server.ior +1 -0
- data/test/Multiple_Servant_Interfaces/server.rb +102 -0
- data/test/Nil/Test.idl +27 -0
- data/test/Nil/run_test.rb +52 -0
- data/test/Nil/test.rb +78 -0
- data/test/OBV/AbstractInterface/client.rb +179 -0
- data/test/OBV/AbstractInterface/run_test.rb +69 -0
- data/test/OBV/AbstractInterface/server.ior +1 -0
- data/test/OBV/AbstractInterface/server.rb +149 -0
- data/test/OBV/AbstractInterface/test.idl +53 -0
- data/test/OBV/Custom/OBV.idl +18 -0
- data/test/OBV/Custom/OBV_impl.rb +40 -0
- data/test/OBV/Custom/client.rb +86 -0
- data/test/OBV/Custom/run_test.rb +69 -0
- data/test/OBV/Custom/server.ior +1 -0
- data/test/OBV/Custom/server.rb +100 -0
- data/test/OBV/Simple/OBV.idl +15 -0
- data/test/OBV/Simple/OBV_impl.rb +26 -0
- data/test/OBV/Simple/client.rb +86 -0
- data/test/OBV/Simple/run_test.rb +69 -0
- data/test/OBV/Simple/server.ior +1 -0
- data/test/OBV/Simple/server.rb +100 -0
- data/test/OBV/Simple_Event/Event.idl +15 -0
- data/test/OBV/Simple_Event/Event_impl.rb +26 -0
- data/test/OBV/Simple_Event/client.rb +86 -0
- data/test/OBV/Simple_Event/run_test.rb +69 -0
- data/test/OBV/Simple_Event/server.ior +1 -0
- data/test/OBV/Simple_Event/server.rb +100 -0
- data/test/OBV/Supports/client.rb +116 -0
- data/test/OBV/Supports/run_test.rb +69 -0
- data/test/OBV/Supports/server.ior +1 -0
- data/test/OBV/Supports/server.rb +103 -0
- data/test/OBV/Supports/supports.idl +33 -0
- data/test/OBV/Supports/supports_impl.rb +57 -0
- data/test/OBV/Tree/client.rb +116 -0
- data/test/OBV/Tree/run_test.rb +69 -0
- data/test/OBV/Tree/server.ior +1 -0
- data/test/OBV/Tree/server.rb +117 -0
- data/test/OBV/Tree/test.idl +32 -0
- data/test/OBV/Truncatable/Extra.idl +27 -0
- data/test/OBV/Truncatable/Truncatable.idl +105 -0
- data/test/OBV/Truncatable/Truncatable_impl.rb +86 -0
- data/test/OBV/Truncatable/client.rb +279 -0
- data/test/OBV/Truncatable/run_test.rb +69 -0
- data/test/OBV/Truncatable/server.ior +1 -0
- data/test/OBV/Truncatable/server.rb +89 -0
- data/test/OBV/ValueBox/client.rb +497 -0
- data/test/OBV/ValueBox/run_test.rb +69 -0
- data/test/OBV/ValueBox/server.ior +1 -0
- data/test/OBV/ValueBox/server.rb +271 -0
- data/test/OBV/ValueBox/valuebox.idl +101 -0
- data/test/OBV/ValueBox/vb_basic.idl +75 -0
- data/test/OBV/ValueBox/vb_struct.idl +68 -0
- data/test/OBV/ValueBox/vb_union.idl +21 -0
- data/test/Object/Test.idl +27 -0
- data/test/Object/client.rb +103 -0
- data/test/Object/run_test.rb +69 -0
- data/test/Object/server.ior +1 -0
- data/test/Object/server.rb +126 -0
- data/test/POA/Test.idl +27 -0
- data/test/POA/run_test.rb +52 -0
- data/test/POA/test.rb +112 -0
- data/test/Param_Test/Test.idl +182 -0
- data/test/Param_Test/client.rb +277 -0
- data/test/Param_Test/run_test.rb +69 -0
- data/test/Param_Test/server.ior +1 -0
- data/test/Param_Test/server.rb +296 -0
- data/test/Performance/Simple/Test.idl +27 -0
- data/test/Performance/Simple/client.rb +90 -0
- data/test/Performance/Simple/run_test.rb +69 -0
- data/test/Performance/Simple/server.ior +1 -0
- data/test/Performance/Simple/server.rb +95 -0
- data/test/Policies/Test.idl +27 -0
- data/test/Policies/run_test.rb +52 -0
- data/test/Policies/test.rb +144 -0
- data/test/Timeout/client.rb +207 -0
- data/test/Timeout/run_test.rb +69 -0
- data/test/Timeout/server.ior +1 -0
- data/test/Timeout/server.rb +109 -0
- data/test/Timeout/test.idl +19 -0
- data/test/lib/assert.rb +43 -0
- data/test/lib/test.rb +542 -0
- data/test/test_runner.rb +193 -0
- metadata +342 -0
@@ -0,0 +1,1121 @@
|
|
1
|
+
#--------------------------------------------------------------------
|
2
|
+
# Typecode.rb - Common CORBA TypeCode definitions
|
3
|
+
#
|
4
|
+
# Author: Martin Corino
|
5
|
+
#
|
6
|
+
# This program is free software; you can redistribute it and/or
|
7
|
+
# modify it under the terms of the R2CORBA LICENSE which is
|
8
|
+
# included with this program.
|
9
|
+
#
|
10
|
+
# Copyright (c) Remedy IT Expertise BV
|
11
|
+
# Chamber of commerce Rotterdam nr.276339, The Netherlands
|
12
|
+
#--------------------------------------------------------------------
|
13
|
+
require 'monitor'
|
14
|
+
|
15
|
+
module R2CORBA
|
16
|
+
module CORBA
|
17
|
+
class TypeCode
|
18
|
+
def initialize
|
19
|
+
raise RuntimeError, 'not allowed'
|
20
|
+
end
|
21
|
+
|
22
|
+
@@wrapper_klass = Class.new(CORBA::TypeCode) do
|
23
|
+
def initialize(ntc)
|
24
|
+
@tc_ = ntc
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
attr_reader :tc_
|
29
|
+
|
30
|
+
def self._wrap_native(ntc)
|
31
|
+
raise ArgumentError, 'Expected org.omg.CORBA.TypeCode' unless ntc.nil? || ntc.is_a?(Native::TypeCode)
|
32
|
+
ntc.nil?() ? ntc : @@wrapper_klass.new(ntc)
|
33
|
+
end
|
34
|
+
|
35
|
+
def TypeCode._tc
|
36
|
+
CORBA::_tc_TypeCode
|
37
|
+
end
|
38
|
+
|
39
|
+
OctetRange = (0..0xFF).freeze
|
40
|
+
UShortRange = (0..0xFFFF).freeze
|
41
|
+
ULongRange = (0..0xFFFFFFFF).freeze
|
42
|
+
ULongLongRange = (0..0xFFFFFFFFFFFFFFFF).freeze
|
43
|
+
ShortRange = (-0x8000...0x8000).freeze
|
44
|
+
LongRange = (-0x80000000...0x80000000).freeze
|
45
|
+
LongLongRange = (-0x8000000000000000...0x8000000000000000).freeze
|
46
|
+
|
47
|
+
@@typecode_registry = (Class.new(Monitor) do
|
48
|
+
def initialize
|
49
|
+
@id_types = {}
|
50
|
+
@name_types = {}
|
51
|
+
super
|
52
|
+
end
|
53
|
+
def []=(id, tc)
|
54
|
+
synchronize do
|
55
|
+
@id_types[id] = tc
|
56
|
+
types_for_name_ = @name_types[tc.name] || []
|
57
|
+
types_for_name_ << tc
|
58
|
+
@name_types[tc.name] = types_for_name_
|
59
|
+
end
|
60
|
+
end
|
61
|
+
def [](id)
|
62
|
+
tc = nil
|
63
|
+
synchronize do
|
64
|
+
tc = @id_types[id]
|
65
|
+
end
|
66
|
+
tc
|
67
|
+
end
|
68
|
+
def types_for_name(name)
|
69
|
+
tcs = nil
|
70
|
+
synchronize do
|
71
|
+
tcs = @name_types[name]
|
72
|
+
end
|
73
|
+
tcs
|
74
|
+
end
|
75
|
+
end).new
|
76
|
+
|
77
|
+
def TypeCode.register_id_type(id, tc)
|
78
|
+
@@typecode_registry[id] = tc
|
79
|
+
end
|
80
|
+
|
81
|
+
def TypeCode.typecode_for_id(id)
|
82
|
+
@@typecode_registry[id]
|
83
|
+
end
|
84
|
+
|
85
|
+
def TypeCode.typecodes_for_name(name)
|
86
|
+
@@typecode_registry.types_for_name(name)
|
87
|
+
end
|
88
|
+
|
89
|
+
# native to ruby
|
90
|
+
|
91
|
+
def TypeCode.native_kind(ntc)
|
92
|
+
ntc.kind
|
93
|
+
end
|
94
|
+
|
95
|
+
def TypeCode.from_native(ntc)
|
96
|
+
if [TK_NULL,TK_VOID,TK_ANY,TK_BOOLEAN,TK_SHORT,TK_LONG,TK_USHORT,
|
97
|
+
TK_WCHAR,TK_ULONG,TK_LONGLONG,TK_ULONGLONG,TK_OCTET,
|
98
|
+
TK_FLOAT,TK_DOUBLE,TK_LONGDOUBLE,TK_CHAR,
|
99
|
+
TK_TYPECODE,TK_PRINCIPAL].include?(native_kind(ntc))
|
100
|
+
## primitive typecode; wrap it
|
101
|
+
return TypeCode._wrap_native(ntc)
|
102
|
+
else
|
103
|
+
rtc = nil
|
104
|
+
case native_kind(ntc)
|
105
|
+
when TK_STRING
|
106
|
+
rtc = TypeCode::String.new(ntc)
|
107
|
+
when TK_WSTRING
|
108
|
+
rtc = TypeCode::WString.new(ntc)
|
109
|
+
when TK_FIXED
|
110
|
+
rtc = TypeCode::Fixed.new(ntc)
|
111
|
+
when TK_ALIAS
|
112
|
+
rtc = TypeCode.typecode_for_id(ntc.id)
|
113
|
+
unless rtc
|
114
|
+
rtc = TypeCode::Alias.new(ntc)
|
115
|
+
end
|
116
|
+
when TK_ENUM
|
117
|
+
rtc = TypeCode.typecode_for_id(ntc.id)
|
118
|
+
unless rtc
|
119
|
+
rtc = TypeCode::Enum.new(ntc)
|
120
|
+
end
|
121
|
+
when TK_ARRAY
|
122
|
+
rtc = TypeCode::Array.new(ntc)
|
123
|
+
when TK_SEQUENCE
|
124
|
+
rtc = TypeCode::Sequence.new(ntc)
|
125
|
+
when TK_STRUCT
|
126
|
+
rtc = TypeCode.typecode_for_id(ntc.id)
|
127
|
+
unless rtc
|
128
|
+
rtc = TypeCode::Struct.new(ntc)
|
129
|
+
end
|
130
|
+
when TK_EXCEPT
|
131
|
+
rtc = TypeCode.typecode_for_id(ntc.id)
|
132
|
+
unless rtc
|
133
|
+
rtc = TypeCode::Except.new(ntc)
|
134
|
+
end
|
135
|
+
when TK_UNION
|
136
|
+
rtc = TypeCode.typecode_for_id(ntc.id)
|
137
|
+
unless rtc
|
138
|
+
rtc = TypeCode::Union.new(ntc)
|
139
|
+
end
|
140
|
+
when TK_OBJREF
|
141
|
+
rtc = TypeCode.typecode_for_id(ntc.id)
|
142
|
+
unless rtc
|
143
|
+
rtc = TypeCode::ObjectRef.new(ntc)
|
144
|
+
end
|
145
|
+
when TK_ABSTRACT_INTERFACE
|
146
|
+
rtc = TypeCode.typecode_for_id(ntc.id)
|
147
|
+
unless rtc
|
148
|
+
rtc = TypeCode::AbstractInterface.new(ntc)
|
149
|
+
end
|
150
|
+
when TK_VALUE_BOX
|
151
|
+
rtc = TypeCode.typecode_for_id(ntc.id)
|
152
|
+
unless rtc
|
153
|
+
rtc = TypeCode::Valuebox.new(ntc)
|
154
|
+
end
|
155
|
+
when TK_VALUE
|
156
|
+
rtc = TypeCode.typecode_for_id(ntc.id)
|
157
|
+
unless rtc
|
158
|
+
rtc = TypeCode::Valuetype.new(ntc)
|
159
|
+
end
|
160
|
+
when TK_NATIVE
|
161
|
+
raise CORBA::NO_IMPLEMENT.new('typecode #{native_kind(ntc)} not supported',0,CORBA::COMPLETED_NO)
|
162
|
+
else
|
163
|
+
raise CORBA::MARSHAL.new("unknown kind [#{native_kind(ntc)}]",0,CORBA::COMPLETED_NO)
|
164
|
+
end
|
165
|
+
return rtc
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
# instance methods
|
170
|
+
|
171
|
+
def resolved_tc
|
172
|
+
self
|
173
|
+
end
|
174
|
+
|
175
|
+
def is_recursive_tc?
|
176
|
+
false
|
177
|
+
end
|
178
|
+
|
179
|
+
def kind
|
180
|
+
raise CORBA::NO_IMPLEMENT
|
181
|
+
end
|
182
|
+
|
183
|
+
def get_compact_typecode
|
184
|
+
CORBA::TypeCode.from_native(self.tc_.get_compact_typecode)
|
185
|
+
end
|
186
|
+
|
187
|
+
def equal?(tc)
|
188
|
+
raise ArgumentError, "expected CORBA::TypeCode" unless tc.is_a?(CORBA::TypeCode)
|
189
|
+
begin
|
190
|
+
self.tc_.equal(tc.tc_)
|
191
|
+
rescue ::NativeException
|
192
|
+
CORBA::Exception.native2r($!)
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
def equivalent?(tc)
|
197
|
+
raise ArgumentError, "expected CORBA::TypeCode" unless tc.is_a?(CORBA::TypeCode)
|
198
|
+
begin
|
199
|
+
self.tc_.equivalent(tc.tc_)
|
200
|
+
rescue ::NativeException
|
201
|
+
CORBA::Exception.native2r($!)
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
def id
|
206
|
+
begin
|
207
|
+
self.tc_.id()
|
208
|
+
rescue ::NativeException
|
209
|
+
CORBA::Exception.native2r($!)
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
213
|
+
def name
|
214
|
+
begin
|
215
|
+
self.tc_.name()
|
216
|
+
rescue ::NativeException
|
217
|
+
CORBA::Exception.native2r($!)
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
221
|
+
def member_count
|
222
|
+
begin
|
223
|
+
self.tc_.member_count()
|
224
|
+
rescue ::NativeException
|
225
|
+
CORBA::Exception.native2r($!)
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
229
|
+
def member_name(index)
|
230
|
+
begin
|
231
|
+
self.tc_.member_name(index.to_i)
|
232
|
+
rescue ::NativeException
|
233
|
+
CORBA::Exception.native2r($!)
|
234
|
+
end
|
235
|
+
end
|
236
|
+
|
237
|
+
def member_type(index)
|
238
|
+
begin
|
239
|
+
CORBA::TypeCode.from_native(self.tc_.member_type(index.to_i))
|
240
|
+
rescue ::NativeException
|
241
|
+
CORBA::Exception.native2r($!)
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
def member_label(index)
|
246
|
+
raise CORBA::NO_IMPLEMENT
|
247
|
+
end
|
248
|
+
|
249
|
+
def discriminator_type
|
250
|
+
CORBA::TypeCode.from_native(self.tc_.discriminator_type)
|
251
|
+
end
|
252
|
+
|
253
|
+
def default_index
|
254
|
+
begin
|
255
|
+
self.tc_.default_index()
|
256
|
+
rescue ::NativeException
|
257
|
+
CORBA::Exception.native2r($!)
|
258
|
+
end
|
259
|
+
end
|
260
|
+
|
261
|
+
def length
|
262
|
+
begin
|
263
|
+
self.tc_.length()
|
264
|
+
rescue ::NativeException
|
265
|
+
CORBA::Exception.native2r($!)
|
266
|
+
end
|
267
|
+
end
|
268
|
+
|
269
|
+
def content_type
|
270
|
+
CORBA::TypeCode.from_native(self.tc_.content_type)
|
271
|
+
end
|
272
|
+
|
273
|
+
def fixed_digits
|
274
|
+
begin
|
275
|
+
self.tc_.fixed_digits()
|
276
|
+
rescue ::NativeException
|
277
|
+
CORBA::Exception.native2r($!)
|
278
|
+
end
|
279
|
+
end
|
280
|
+
|
281
|
+
def fixed_scale
|
282
|
+
begin
|
283
|
+
self.tc_.fixed_scale()
|
284
|
+
rescue ::NativeException
|
285
|
+
CORBA::Exception.native2r($!)
|
286
|
+
end
|
287
|
+
end
|
288
|
+
|
289
|
+
def member_visibility(index)
|
290
|
+
begin
|
291
|
+
self.tc_.member_visibility(index.to_i)
|
292
|
+
rescue ::NativeException
|
293
|
+
CORBA::Exception.native2r($!)
|
294
|
+
end
|
295
|
+
end
|
296
|
+
|
297
|
+
def type_modifier
|
298
|
+
begin
|
299
|
+
self.tc_.type_modifier()
|
300
|
+
rescue ::NativeException
|
301
|
+
CORBA::Exception.native2r($!)
|
302
|
+
end
|
303
|
+
end
|
304
|
+
|
305
|
+
def concrete_base_type
|
306
|
+
ntc = self.tc_.concrete_base_type
|
307
|
+
ntc.nil? ? nil : CORBA::TypeCode.from_native(ntc)
|
308
|
+
end
|
309
|
+
|
310
|
+
def get_type
|
311
|
+
@type ||= case self.kind
|
312
|
+
when TK_SHORT, TK_LONG, TK_USHORT, TK_ULONG
|
313
|
+
::Fixnum
|
314
|
+
when TK_LONGLONG, TK_ULONGLONG
|
315
|
+
::Bignum
|
316
|
+
when TK_FLOAT, TK_DOUBLE
|
317
|
+
::Float
|
318
|
+
when TK_LONGDOUBLE
|
319
|
+
::CORBA::LongDouble
|
320
|
+
when TK_BOOLEAN
|
321
|
+
::TrueClass
|
322
|
+
when TK_CHAR, TK_STRING
|
323
|
+
::String
|
324
|
+
when TK_WCHAR, TK_OCTET
|
325
|
+
::Fixnum
|
326
|
+
when TK_VOID, TK_NULL
|
327
|
+
::NilClass
|
328
|
+
when TK_ANY
|
329
|
+
::Object
|
330
|
+
when TK_TYPECODE
|
331
|
+
CORBA::TypeCode
|
332
|
+
when TK_OBJREF
|
333
|
+
CORBA::Object
|
334
|
+
when TK_ABSTRACT_INTERFACE
|
335
|
+
::Object
|
336
|
+
else
|
337
|
+
nil
|
338
|
+
end
|
339
|
+
end
|
340
|
+
|
341
|
+
def validate(val)
|
342
|
+
case self.kind
|
343
|
+
when TK_ANY
|
344
|
+
return CORBA::Any === val ? val : Any.to_any(val)
|
345
|
+
when TK_BOOLEAN
|
346
|
+
return val if ((val.is_a? TrueClass) || (val.is_a? FalseClass))
|
347
|
+
when TK_SHORT
|
348
|
+
return val.to_int if val.respond_to?(:to_int) && ShortRange === val.to_int
|
349
|
+
when TK_LONG
|
350
|
+
return val.to_int if val.respond_to?(:to_int) && LongRange === val.to_int
|
351
|
+
when TK_USHORT, TK_WCHAR
|
352
|
+
return val.to_int if val.respond_to?(:to_int) && UShortRange === val.to_int
|
353
|
+
when TK_ULONG
|
354
|
+
return val.to_int if val.respond_to?(:to_int) && ULongRange === val.to_int
|
355
|
+
when TK_LONGLONG
|
356
|
+
return val.to_int if val.respond_to?(:to_int) && LongLongRange === val.to_int
|
357
|
+
when TK_ULONGLONG
|
358
|
+
return val.to_int if val.respond_to?(:to_int) && ULongLongRange === val.to_int
|
359
|
+
when TK_OCTET
|
360
|
+
return val.to_int if val.respond_to?(:to_int) && OctetRange === val.to_int
|
361
|
+
when TK_FLOAT, TK_DOUBLE
|
362
|
+
return val if val.is_a?(::Float)
|
363
|
+
when TK_LONGDOUBLE
|
364
|
+
return val if val.is_a?(::CORBA::LongDouble)
|
365
|
+
when TK_CHAR
|
366
|
+
if (val.respond_to?(:to_str) && (val.to_str.size == 1)) ||
|
367
|
+
(val.respond_to?(:to_int) && OctetRange === val.to_int)
|
368
|
+
return val.respond_to?(:to_str) ? val.to_str : val.to_int.chr
|
369
|
+
end
|
370
|
+
else
|
371
|
+
return val if (val.nil? || val.is_a?(self.get_type))
|
372
|
+
end
|
373
|
+
raise CORBA::MARSHAL.new(
|
374
|
+
"value does not match type: value = #{val}, value type == #{val.class.name}, type == #{get_type.name}",
|
375
|
+
1, CORBA::COMPLETED_NO)
|
376
|
+
end
|
377
|
+
|
378
|
+
def needs_conversion(val)
|
379
|
+
case self.kind
|
380
|
+
when TK_SHORT, TK_LONG,
|
381
|
+
TK_USHORT, TK_WCHAR,
|
382
|
+
TK_ULONG, TK_LONGLONG, TK_ULONGLONG,
|
383
|
+
TK_OCTET
|
384
|
+
return !(::Integer === val)
|
385
|
+
when TK_CHAR
|
386
|
+
return !(::String === val)
|
387
|
+
end
|
388
|
+
false
|
389
|
+
end
|
390
|
+
|
391
|
+
class Recursive < CORBA::TypeCode
|
392
|
+
|
393
|
+
def initialize(id)
|
394
|
+
raise RuntimeError, 'overload required'
|
395
|
+
end
|
396
|
+
|
397
|
+
def recursed_tc
|
398
|
+
@recursive_tc ||= TypeCode.typecode_for_id(self.id)
|
399
|
+
@recursive_tc || ::CORBA::TypeCode.new(TK_NULL)
|
400
|
+
end
|
401
|
+
def resolved_tc
|
402
|
+
recursed_tc.resolved_tc
|
403
|
+
end
|
404
|
+
def is_recursive_tc?
|
405
|
+
true
|
406
|
+
end
|
407
|
+
def get_type
|
408
|
+
@recursive_tc ||= TypeCode.typecode_for_id(self.id)
|
409
|
+
if @recursive_tc.nil? then nil; else @recursive_tc.get_type; end
|
410
|
+
end
|
411
|
+
def validate(val)
|
412
|
+
recursed_tc.validate(val)
|
413
|
+
end
|
414
|
+
def needs_conversion(val)
|
415
|
+
recursed_tc.needs_conversion(val)
|
416
|
+
end
|
417
|
+
end # Recursive
|
418
|
+
|
419
|
+
class String < CORBA::TypeCode
|
420
|
+
|
421
|
+
def initialize(*args)
|
422
|
+
raise RuntimeError, 'overload required'
|
423
|
+
end
|
424
|
+
|
425
|
+
def get_type
|
426
|
+
::String
|
427
|
+
end
|
428
|
+
|
429
|
+
def validate(val)
|
430
|
+
return val if val.nil?
|
431
|
+
super(val) unless ::String === val || val.respond_to?(:to_str)
|
432
|
+
val = ::String === val ? val : val.to_str
|
433
|
+
raise ::CORBA::MARSHAL.new(
|
434
|
+
"string size exceeds bound: #{self.length.to_s}",
|
435
|
+
1, ::CORBA::COMPLETED_NO) unless (self.length==0 || val.size<=self.length)
|
436
|
+
val
|
437
|
+
end
|
438
|
+
|
439
|
+
def needs_conversion(val)
|
440
|
+
!(::String === val)
|
441
|
+
end
|
442
|
+
end # String
|
443
|
+
|
444
|
+
class WString < CORBA::TypeCode
|
445
|
+
|
446
|
+
def initialize(*args)
|
447
|
+
raise RuntimeError, 'overload required'
|
448
|
+
end
|
449
|
+
|
450
|
+
def get_type
|
451
|
+
::Array
|
452
|
+
end
|
453
|
+
|
454
|
+
def validate(val)
|
455
|
+
return val if val.nil?
|
456
|
+
super(val) unless ::Array === val || val.respond_to?(:to_str) || val.respond_to?(:to_ary)
|
457
|
+
val = if ::Array === val
|
458
|
+
val
|
459
|
+
elsif val.respond_to?(:to_ary)
|
460
|
+
val.to_ary
|
461
|
+
else
|
462
|
+
a = []
|
463
|
+
val.to_str.each_byte { |c| a << c }
|
464
|
+
a
|
465
|
+
end
|
466
|
+
raise ::CORBA::MARSHAL.new(
|
467
|
+
"widestring size exceeds bound: #{self.length.to_s}",
|
468
|
+
1, ::CORBA::COMPLETED_NO) unless (self.length==0 || val.size<=self.length)
|
469
|
+
raise ::CORBA::MARSHAL.new(
|
470
|
+
"invalid widestring element(s)",
|
471
|
+
1, ::CORBA::COMPLETED_NO) if val.any? { |el| !(UShortRange === (el.respond_to?(:to_int) ? el.to_int : el)) }
|
472
|
+
val.any? { |el| !(::Integer === el) } ? val.collect { |el| el.to_int } : val
|
473
|
+
end
|
474
|
+
|
475
|
+
def needs_conversion(val)
|
476
|
+
!(::Array === val) ? true : val.any? { |el| !(::Integer === el) }
|
477
|
+
end
|
478
|
+
|
479
|
+
def in_value(val)
|
480
|
+
if val.respond_to?(:to_str)
|
481
|
+
a = []
|
482
|
+
val.to_str.each_byte { |c| a << c }
|
483
|
+
a
|
484
|
+
else
|
485
|
+
::Array === val ? val : val.to_ary
|
486
|
+
end
|
487
|
+
end
|
488
|
+
end # WString
|
489
|
+
|
490
|
+
class Fixed < CORBA::TypeCode
|
491
|
+
|
492
|
+
def initialize(*args)
|
493
|
+
raise RuntimeError, 'overload required'
|
494
|
+
end
|
495
|
+
|
496
|
+
def get_type
|
497
|
+
::BigDecimal
|
498
|
+
end
|
499
|
+
|
500
|
+
def validate(val)
|
501
|
+
return val if val.nil?
|
502
|
+
super(val) unless ::BigDecimal === val || val.respond_to?(:to_str)
|
503
|
+
val = ::BigDecimal === val ? val : BigDecimal.new(val.to_str)
|
504
|
+
val
|
505
|
+
end
|
506
|
+
|
507
|
+
def needs_conversion(val)
|
508
|
+
!(::BigDecimal === val)
|
509
|
+
end
|
510
|
+
end # Fixed
|
511
|
+
|
512
|
+
class Sequence < CORBA::TypeCode
|
513
|
+
|
514
|
+
def initialize(*args)
|
515
|
+
raise RuntimeError, 'overload required'
|
516
|
+
end
|
517
|
+
|
518
|
+
def get_type
|
519
|
+
self.content_type.kind == TK_OCTET || self.content_type.kind == TK_CHAR ? ::String : ::Array
|
520
|
+
end
|
521
|
+
|
522
|
+
def validate(val)
|
523
|
+
return val if val.nil?
|
524
|
+
super(val) unless val.respond_to?(:to_str) || val.respond_to?(:to_ary)
|
525
|
+
val = if self.content_type.kind == TK_OCTET || self.content_type.kind == TK_CHAR
|
526
|
+
if val.respond_to?(:to_str)
|
527
|
+
::String === val ? val : val.to_str
|
528
|
+
else
|
529
|
+
s = ''
|
530
|
+
val.to_ary.each { |e| s << (e.respond_to?(:to_int) ? e.to_int.chr : e.to_str) }
|
531
|
+
s
|
532
|
+
end
|
533
|
+
elsif val.respond_to?(:to_ary)
|
534
|
+
::Array === val ? val : val.to_ary
|
535
|
+
else
|
536
|
+
a = []
|
537
|
+
val.to_str.each_byte { |c| a << c }
|
538
|
+
a
|
539
|
+
end
|
540
|
+
raise ::CORBA::MARSHAL.new(
|
541
|
+
"sequence size exceeds bound: #{self.length.to_s}",
|
542
|
+
1, ::CORBA::COMPLETED_NO) unless (self.length==0 || val.size<=self.length)
|
543
|
+
if ::Array === val
|
544
|
+
if val.any? { |e| self.content_type.needs_conversion(e) }
|
545
|
+
val.collect { |e| self.content_type.validate(e) }
|
546
|
+
else
|
547
|
+
val.each { |e| self.content_type.validate(e) }
|
548
|
+
end
|
549
|
+
else
|
550
|
+
val
|
551
|
+
end
|
552
|
+
end
|
553
|
+
|
554
|
+
def needs_conversion(val)
|
555
|
+
if self.content_type.kind == TK_OCTET || self.content_type.kind == TK_CHAR
|
556
|
+
!(::String === val)
|
557
|
+
else
|
558
|
+
!(::Array === val) ? true : val.any? { |el| self.content_type.needs_conversion(el) }
|
559
|
+
end
|
560
|
+
end
|
561
|
+
|
562
|
+
def inspect
|
563
|
+
"#{self.class.name}: "+
|
564
|
+
"length=#{if self.length.nil? then ""; else self.length.to_s; end}; "+
|
565
|
+
"content=#{self.content_type.inspect}"
|
566
|
+
end
|
567
|
+
end
|
568
|
+
|
569
|
+
class Array < CORBA::TypeCode
|
570
|
+
|
571
|
+
def initialize(*args)
|
572
|
+
raise RuntimeError, 'overload required'
|
573
|
+
end
|
574
|
+
|
575
|
+
def get_type
|
576
|
+
::Array
|
577
|
+
end
|
578
|
+
|
579
|
+
def validate(val)
|
580
|
+
return val if val.nil?
|
581
|
+
super(val)
|
582
|
+
raise ::CORBA::MARSHAL.new(
|
583
|
+
"array size exceeds bound: #{self.length.to_s}",
|
584
|
+
1, ::CORBA::COMPLETED_NO) unless val.nil? || val.size<=self.length
|
585
|
+
raise ::CORBA::MARSHAL.new(
|
586
|
+
"array size too small: #{self.length.to_s}",
|
587
|
+
1, ::CORBA::COMPLETED_NO) unless val.nil? || val.size>=self.length
|
588
|
+
val.any? { |e| self.content_type.needs_conversion(e) } ? val.collect { |e| self.content_type.validate(e) } : val.each { |e| self.content_type.validate(e) }
|
589
|
+
end
|
590
|
+
|
591
|
+
def needs_conversion(val)
|
592
|
+
val.any? { |e| self.content_type.needs_conversion(e) }
|
593
|
+
end
|
594
|
+
end # Array
|
595
|
+
|
596
|
+
class IdentifiedTypeCode < CORBA::TypeCode
|
597
|
+
|
598
|
+
def initialize(id)
|
599
|
+
CORBA::TypeCode.register_id_type(id.to_s, self)
|
600
|
+
end
|
601
|
+
end # IdentifiedTypeCode
|
602
|
+
|
603
|
+
class Alias < IdentifiedTypeCode
|
604
|
+
def initialize(*args)
|
605
|
+
raise RuntimeError, 'overload required'
|
606
|
+
end
|
607
|
+
|
608
|
+
def get_type
|
609
|
+
@type || self.content_type.get_type
|
610
|
+
end
|
611
|
+
def validate(val)
|
612
|
+
self.content_type.validate(val)
|
613
|
+
end
|
614
|
+
|
615
|
+
def needs_conversion(val)
|
616
|
+
self.content_type.needs_conversion(val)
|
617
|
+
end
|
618
|
+
|
619
|
+
def resolved_tc
|
620
|
+
self.content_type.resolved_tc
|
621
|
+
end
|
622
|
+
end # Alias
|
623
|
+
|
624
|
+
class Valuetype < IdentifiedTypeCode
|
625
|
+
attr_reader :members
|
626
|
+
def initialize(*args)
|
627
|
+
raise RuntimeError, 'overload required'
|
628
|
+
end
|
629
|
+
def add_member(name, tc, access)
|
630
|
+
raise ArgumentError, 'expected CORBA::TypeCode' unless tc.is_a?(CORBA::TypeCode)
|
631
|
+
@members << [name, tc, access]
|
632
|
+
end
|
633
|
+
|
634
|
+
def Valuetype.define_type(tc)
|
635
|
+
trunc_ids = [tc.id]
|
636
|
+
rtc = tc
|
637
|
+
while rtc != nil && rtc.type_modifier == CORBA::VM_TRUNCATABLE
|
638
|
+
rtc = rtc.concrete_base_type
|
639
|
+
trunc_ids << rtc.id unless rtc.nil?
|
640
|
+
end
|
641
|
+
code = %Q{
|
642
|
+
class #{tc.name} < ::CORBA::ValueBase
|
643
|
+
TRUNCATABLE_IDS = ['#{trunc_ids.join("', '")}'].freeze
|
644
|
+
def self._tc
|
645
|
+
@@tc_#{tc.name} ||= TypeCode.typecode_for_id('#{tc.id}')
|
646
|
+
end
|
647
|
+
module Intf
|
648
|
+
end
|
649
|
+
include Intf
|
650
|
+
end
|
651
|
+
#{tc.name}
|
652
|
+
}
|
653
|
+
value_type = ::Object.module_eval(code)
|
654
|
+
tc.members.each do |nm_, tc_, access_|
|
655
|
+
value_type::Intf.module_eval(%Q{attr_accessor :#{nm_}})
|
656
|
+
value_type::Intf.__send__(:private, nm_.intern)
|
657
|
+
value_type::Intf.__send__(:private, (nm_+'=').intern)
|
658
|
+
end
|
659
|
+
value_type
|
660
|
+
end
|
661
|
+
|
662
|
+
def get_type
|
663
|
+
@type ||= CORBA::TypeCode::Valuetype.define_type(self)
|
664
|
+
end
|
665
|
+
|
666
|
+
def validate(val)
|
667
|
+
return val if val.nil?
|
668
|
+
super(val)
|
669
|
+
if needs_conversion(val)
|
670
|
+
vorg = val
|
671
|
+
val = vorg.class.new
|
672
|
+
@members.each { |name, tc| val.__send__((name+'=').intern, tc.validate(vorg.__send__(name.intern))) }
|
673
|
+
else
|
674
|
+
@members.each { |name, tc| tc.validate(val.__send__(name.intern)) }
|
675
|
+
end
|
676
|
+
val
|
677
|
+
end
|
678
|
+
|
679
|
+
def needs_conversion(val)
|
680
|
+
return false if val.nil?
|
681
|
+
@members.any? { |name,tc| tc.needs_conversion(val.__send__(name.intern)) }
|
682
|
+
end
|
683
|
+
|
684
|
+
def member_count
|
685
|
+
@members.size
|
686
|
+
end
|
687
|
+
def member_name(index)
|
688
|
+
raise ::CORBA::TypeCode::Bounds.new if (index<0) || (index>=@members.size)
|
689
|
+
@members[index][0]
|
690
|
+
end
|
691
|
+
def member_type(index)
|
692
|
+
raise ::CORBA::TypeCode::Bounds.new if (index<0) || (index>=@members.size)
|
693
|
+
@members[index][1]
|
694
|
+
end
|
695
|
+
|
696
|
+
def inspect
|
697
|
+
s = "#{self.class.name}: #{name} - #{id}\n"
|
698
|
+
@members.each { |n, t| s += " #{n} = "+t.inspect+"\n" }
|
699
|
+
s
|
700
|
+
end
|
701
|
+
end # Valuetype
|
702
|
+
|
703
|
+
class Eventtype < Valuetype
|
704
|
+
end # Eventtype
|
705
|
+
|
706
|
+
class Valuebox < IdentifiedTypeCode
|
707
|
+
def initialize(*args)
|
708
|
+
raise RuntimeError, 'overload required'
|
709
|
+
end
|
710
|
+
|
711
|
+
def Valuebox.define_type(tc)
|
712
|
+
code = %Q{
|
713
|
+
class #{tc.name} < ::CORBA::Portable::BoxedValueBase
|
714
|
+
def self._tc
|
715
|
+
@@tc_#{tc.name} ||= TypeCode.typecode_for_id('#{tc.id}')
|
716
|
+
end
|
717
|
+
attr_accessor :value
|
718
|
+
def initialize(val)
|
719
|
+
@value = val
|
720
|
+
end
|
721
|
+
end
|
722
|
+
#{tc.name}
|
723
|
+
}
|
724
|
+
::Object.module_eval(code)
|
725
|
+
end
|
726
|
+
|
727
|
+
def get_type
|
728
|
+
@type || CORBA::TypeCode::Valuebox.define_type(self)
|
729
|
+
end
|
730
|
+
|
731
|
+
def validate(val)
|
732
|
+
return val if val.nil?
|
733
|
+
if CORBA::Portable::BoxedValueBase === val
|
734
|
+
super(val)
|
735
|
+
val.value = self.content_type.validate(val.value)
|
736
|
+
else
|
737
|
+
val = self.content_type.validate(val)
|
738
|
+
end
|
739
|
+
val
|
740
|
+
end
|
741
|
+
|
742
|
+
def needs_conversion(val)
|
743
|
+
return false if val.nil?
|
744
|
+
if CORBA::Portable::BoxedValueBase === val
|
745
|
+
self.content_type.needs_conversion(val.value)
|
746
|
+
else
|
747
|
+
self.content_type.needs_conversion(val)
|
748
|
+
end
|
749
|
+
end
|
750
|
+
end # Valuebox
|
751
|
+
|
752
|
+
class ObjectRef < IdentifiedTypeCode
|
753
|
+
def initialize(*args)
|
754
|
+
raise RuntimeError, 'overload required'
|
755
|
+
end
|
756
|
+
|
757
|
+
def get_type
|
758
|
+
@type
|
759
|
+
end
|
760
|
+
end # ObjectRef
|
761
|
+
|
762
|
+
class AbstractInterface < IdentifiedTypeCode
|
763
|
+
def initialize(*args)
|
764
|
+
raise RuntimeError, 'overload required'
|
765
|
+
end
|
766
|
+
|
767
|
+
def get_type
|
768
|
+
@type
|
769
|
+
end
|
770
|
+
end # AbstractInterface
|
771
|
+
|
772
|
+
class Struct < IdentifiedTypeCode
|
773
|
+
attr_reader :members
|
774
|
+
def initialize(*args)
|
775
|
+
raise RuntimeError, 'overload required'
|
776
|
+
end
|
777
|
+
def add_member(name, tc)
|
778
|
+
raise ArgumentError, 'expected CORBA::TypeCode' unless tc.is_a?(CORBA::TypeCode)
|
779
|
+
@members << [name, tc]
|
780
|
+
end
|
781
|
+
|
782
|
+
def Struct.define_type(tc)
|
783
|
+
code = %Q{
|
784
|
+
class #{tc.name} < ::CORBA::Portable::Struct
|
785
|
+
def self._tc
|
786
|
+
@@tc_#{tc.name} ||= TypeCode.typecode_for_id('#{tc.id}')
|
787
|
+
end
|
788
|
+
def initialize(*param_)
|
789
|
+
#{tc.members.collect {|n,t| "@#{n}"}.join(', ')} = param_
|
790
|
+
end
|
791
|
+
end
|
792
|
+
#{tc.name}
|
793
|
+
}
|
794
|
+
struct_type = ::Object.module_eval(code)
|
795
|
+
tc.members.each do |nm_, tc_|
|
796
|
+
struct_type.module_eval(%Q{attr_accessor :#{nm_}})
|
797
|
+
end
|
798
|
+
struct_type
|
799
|
+
end
|
800
|
+
|
801
|
+
def get_type
|
802
|
+
@type ||= CORBA::TypeCode::Struct.define_type(self)
|
803
|
+
end
|
804
|
+
|
805
|
+
def validate(val)
|
806
|
+
return val if val.nil?
|
807
|
+
super(val)
|
808
|
+
if needs_conversion(val)
|
809
|
+
vorg = val
|
810
|
+
val = vorg.class.new
|
811
|
+
@members.each { |name, tc| val.__send__((name+'=').intern, tc.validate(vorg.__send__(name.intern))) }
|
812
|
+
else
|
813
|
+
@members.each { |name, tc| tc.validate(val.__send__(name.intern)) }
|
814
|
+
end
|
815
|
+
val
|
816
|
+
end
|
817
|
+
|
818
|
+
def needs_conversion(val)
|
819
|
+
@members.any? { |name,tc| tc.needs_conversion(val.__send__(name.intern)) }
|
820
|
+
end
|
821
|
+
|
822
|
+
def member_count
|
823
|
+
@members.size
|
824
|
+
end
|
825
|
+
def member_name(index)
|
826
|
+
raise ::CORBA::TypeCode::Bounds.new if (index<0) || (index>=@members.size)
|
827
|
+
@members[index][0]
|
828
|
+
end
|
829
|
+
def member_type(index)
|
830
|
+
raise ::CORBA::TypeCode::Bounds.new if (index<0) || (index>=@members.size)
|
831
|
+
@members[index][1]
|
832
|
+
end
|
833
|
+
|
834
|
+
def inspect
|
835
|
+
s = "#{self.class.name}: #{name} - #{id}\n"
|
836
|
+
@members.each { |n, t| s += " #{n} = "+t.inspect+"\n" }
|
837
|
+
s
|
838
|
+
end
|
839
|
+
end # Struct
|
840
|
+
|
841
|
+
class SysExcept < Struct
|
842
|
+
def initialize(id, name)
|
843
|
+
members_ = [['minor', CORBA::_tc_long], ['completed', CORBA::_tc_CompletionStatus]]
|
844
|
+
super(id, name, members_)
|
845
|
+
end
|
846
|
+
|
847
|
+
def SysExcept.define_type(tc)
|
848
|
+
tc.get_type
|
849
|
+
end
|
850
|
+
|
851
|
+
def get_type
|
852
|
+
CORBA.const_get(self.name.to_sym)
|
853
|
+
end
|
854
|
+
end
|
855
|
+
|
856
|
+
class Except < Struct
|
857
|
+
def Except.define_type(tc)
|
858
|
+
except_type = ::Object.module_eval(%Q{
|
859
|
+
class #{tc.name} < CORBA::UserException
|
860
|
+
def _tc
|
861
|
+
@@tc_#{tc.name} ||= TypeCode.typecode_for_id('#{tc.id}')
|
862
|
+
end
|
863
|
+
def initialize(*param_)
|
864
|
+
#{tc.members.collect {|n,t| "@#{n}"}.join(',')} = param_
|
865
|
+
end
|
866
|
+
end
|
867
|
+
#{tc.name}
|
868
|
+
})
|
869
|
+
tc.members.each do |mname, mtc|
|
870
|
+
except_type.module_eval(%Q{attr_accessor :#{mname}})
|
871
|
+
end
|
872
|
+
except_type
|
873
|
+
end
|
874
|
+
|
875
|
+
def get_type
|
876
|
+
@type ||= CORBA::TypeCode::Except.define_type(self)
|
877
|
+
end
|
878
|
+
end # Except
|
879
|
+
|
880
|
+
class Union < IdentifiedTypeCode
|
881
|
+
attr_reader :members
|
882
|
+
attr_reader :switchtype
|
883
|
+
attr_reader :implicit_default
|
884
|
+
def initialize(*args)
|
885
|
+
raise RuntimeError, 'overload required'
|
886
|
+
end
|
887
|
+
# because creating the native tc involves creating Any's we postpone until actually needed
|
888
|
+
def tc_
|
889
|
+
raise RuntimeError, 'overload required'
|
890
|
+
end
|
891
|
+
def id
|
892
|
+
@id
|
893
|
+
end
|
894
|
+
def name
|
895
|
+
@name
|
896
|
+
end
|
897
|
+
def add_member(label, name, tc)
|
898
|
+
raise ArgumentError, 'expected CORBA::TypeCode' unless tc.is_a?(CORBA::TypeCode)
|
899
|
+
@switchtype.validate(label) unless label == :default
|
900
|
+
@labels[label] = @members.size
|
901
|
+
@members << [label, name.to_s, tc]
|
902
|
+
end
|
903
|
+
|
904
|
+
def Union.define_type(tc)
|
905
|
+
union_type = ::Object.module_eval(%Q{
|
906
|
+
class #{tc.name} < ::CORBA::Portable::Union
|
907
|
+
def _tc
|
908
|
+
@@tc_#{tc.name} ||= TypeCode.typecode_for_id('#{tc.id}')
|
909
|
+
end
|
910
|
+
end
|
911
|
+
#{tc.name}
|
912
|
+
})
|
913
|
+
accessors = {}
|
914
|
+
tc.members.each_with_index do |_m, ix|
|
915
|
+
accessors[_m[1]] = ix unless accessors.has_key?(_m[1])
|
916
|
+
end
|
917
|
+
accessors.each do |mname, ix|
|
918
|
+
union_type.module_eval(%Q{
|
919
|
+
def #{mname}; @value; end
|
920
|
+
def #{mname}=(val); _set_value(#{ix.to_s}, val); end
|
921
|
+
})
|
922
|
+
end
|
923
|
+
if tc.implicit_default
|
924
|
+
union_type.module_eval(%Q{
|
925
|
+
def _default; @discriminator = #{tc.implicit_default}; @value = nil; end
|
926
|
+
})
|
927
|
+
end
|
928
|
+
union_type
|
929
|
+
end
|
930
|
+
|
931
|
+
def get_type
|
932
|
+
@type ||= CORBA::TypeCode::Union.define_type(self)
|
933
|
+
end
|
934
|
+
|
935
|
+
def validate(val)
|
936
|
+
return val if val.nil?
|
937
|
+
super(val)
|
938
|
+
@switchtype.validate(val._disc) unless val._disc == :default
|
939
|
+
#raise CORBA::MARSHAL.new(
|
940
|
+
# "invalid discriminator value (#{val._disc.to_s}) for union #{name}",
|
941
|
+
# 1, CORBA::COMPLETED_NO) unless @labels.has_key?(val._disc)
|
942
|
+
if @labels.has_key?(val._disc) # no need to check for implicit defaults
|
943
|
+
if needs_conversion(val)
|
944
|
+
vorg = val
|
945
|
+
val = vorg.class.new
|
946
|
+
val.__send__((@members[@labels[vorg._disc]][1]+'=').intern,
|
947
|
+
@members[@labels[vorg._disc]][2].validate(vorg._value))
|
948
|
+
else
|
949
|
+
@members[@labels[val._disc]][2].validate(val._value)
|
950
|
+
end
|
951
|
+
end
|
952
|
+
val
|
953
|
+
end
|
954
|
+
|
955
|
+
def needs_conversion(val)
|
956
|
+
@members[@labels[val._disc]][2].needs_conversion(val._value)
|
957
|
+
end
|
958
|
+
|
959
|
+
def member_count
|
960
|
+
@members.size
|
961
|
+
end
|
962
|
+
def member_name(index)
|
963
|
+
raise CORBA::TypeCode::Bounds.new if (index<0) || (index>=@members.size)
|
964
|
+
@members[index][1]
|
965
|
+
end
|
966
|
+
def member_type(index)
|
967
|
+
raise CORBA::TypeCode::Bounds.new if (index<0) || (index>=@members.size)
|
968
|
+
@members[index][2]
|
969
|
+
end
|
970
|
+
def member_label(index)
|
971
|
+
raise CORBA::TypeCode::Bounds.new if (index<0) || (index>=@members.size)
|
972
|
+
@members[index][0]
|
973
|
+
end
|
974
|
+
def discriminator_type
|
975
|
+
@switchtype
|
976
|
+
end
|
977
|
+
def default_index
|
978
|
+
if @labels.has_key? :default then @labels[:default]; else -1; end
|
979
|
+
end
|
980
|
+
|
981
|
+
def label_index(val)
|
982
|
+
val = @switchtype.validate(val) unless val == :default
|
983
|
+
#raise CORBA::MARSHAL.new(
|
984
|
+
# "invalid discriminator value (#{val}) for union #{name}",
|
985
|
+
# 1, CORBA::COMPLETED_NO) unless val == :default || @labels.has_key?(val) || @labels.has_key?(:default)
|
986
|
+
if val == :default then @labels[:default]; elsif @labels.has_key?(val) then @labels[val] else nil end
|
987
|
+
end
|
988
|
+
|
989
|
+
def label_member(val)
|
990
|
+
return nil unless (lbl_ix = label_index(val))
|
991
|
+
member_name(lbl_ix)
|
992
|
+
end
|
993
|
+
|
994
|
+
def inspect
|
995
|
+
s = "#{self.class.name}: #{name} - #{id}\n"
|
996
|
+
@members.each { |l, n, t| s += " case #{l.to_s}: #{n} = "+t.inspect+"\n" }
|
997
|
+
s
|
998
|
+
end
|
999
|
+
end # Union
|
1000
|
+
|
1001
|
+
class Enum < IdentifiedTypeCode
|
1002
|
+
attr_reader :members
|
1003
|
+
def initialize(*args)
|
1004
|
+
raise RuntimeError, 'overload required'
|
1005
|
+
end
|
1006
|
+
def get_type
|
1007
|
+
::Integer
|
1008
|
+
end
|
1009
|
+
|
1010
|
+
def validate(val)
|
1011
|
+
super(val) if !val.respond_to?(:to_int)
|
1012
|
+
raise CORBA::MARSHAL.new(
|
1013
|
+
"value (#{val}) out of range (#{@range}) for enum: #{name}",
|
1014
|
+
1, CORBA::COMPLETED_NO) unless @range === (::Integer === val ? val : val.to_int)
|
1015
|
+
(::Integer === val ? val : val.to_int)
|
1016
|
+
end
|
1017
|
+
|
1018
|
+
def needs_conversion(val)
|
1019
|
+
!(::Integer === val)
|
1020
|
+
end
|
1021
|
+
|
1022
|
+
def member_count
|
1023
|
+
@members.size
|
1024
|
+
end
|
1025
|
+
def member_name(index)
|
1026
|
+
raise CORBA::TypeCode::Bounds.new if (index<0) || (index>=@members.size)
|
1027
|
+
@members[index]
|
1028
|
+
end
|
1029
|
+
end # Enum
|
1030
|
+
|
1031
|
+
class Bounds < CORBA::UserException
|
1032
|
+
def Bounds._tc
|
1033
|
+
@@tc_Bounds ||= CORBA::TypeCode::Except.new('IDL:omg.org/CORBA/TypeCode/Bounds:1.0'.freeze, 'Bounds', [], self)
|
1034
|
+
end
|
1035
|
+
end
|
1036
|
+
|
1037
|
+
class BadKind < CORBA::UserException
|
1038
|
+
def BadKind._tc
|
1039
|
+
@@tc_BadKind ||= CORBA::TypeCode::Except.new('IDL:omg.org/CORBA/TypeCode/BadKind:1.0'.freeze, 'BadKind', [], self)
|
1040
|
+
end
|
1041
|
+
end
|
1042
|
+
|
1043
|
+
def TypeCode.get_primitive_tc(kind)
|
1044
|
+
raise RuntimeError, 'overload required'
|
1045
|
+
end
|
1046
|
+
|
1047
|
+
private
|
1048
|
+
|
1049
|
+
def TypeCode._init
|
1050
|
+
|
1051
|
+
Bounds._tc
|
1052
|
+
|
1053
|
+
BadKind._tc
|
1054
|
+
end
|
1055
|
+
|
1056
|
+
end # TypeCode
|
1057
|
+
|
1058
|
+
# define typecode constants for primitive types
|
1059
|
+
[ 'null', 'void',
|
1060
|
+
'short', 'long', 'ushort', 'ulong', 'longlong', 'ulonglong',
|
1061
|
+
'float', 'double', 'longdouble',
|
1062
|
+
'boolean',
|
1063
|
+
'char', 'octet',
|
1064
|
+
'wchar',
|
1065
|
+
'any',
|
1066
|
+
].each do |tck|
|
1067
|
+
CORBA.module_eval %Q{
|
1068
|
+
def CORBA._tc_#{tck}
|
1069
|
+
@@tc_#{tck} ||= TypeCode.get_primitive_tc(CORBA::TK_#{tck.upcase})
|
1070
|
+
end
|
1071
|
+
}
|
1072
|
+
end
|
1073
|
+
|
1074
|
+
def CORBA._tc_string
|
1075
|
+
@@tc_string ||= TypeCode::String.new()
|
1076
|
+
end
|
1077
|
+
|
1078
|
+
def CORBA._tc_wstring
|
1079
|
+
@@tc_wstring ||= TypeCode::WString.new()
|
1080
|
+
end
|
1081
|
+
|
1082
|
+
# define special typecode constants
|
1083
|
+
|
1084
|
+
def CORBA._tc_TypeCode
|
1085
|
+
@@tc_TypeCode ||= TypeCode.get_primitive_tc(CORBA::TK_TYPECODE)
|
1086
|
+
end
|
1087
|
+
|
1088
|
+
def CORBA._tc_Principal
|
1089
|
+
@@tc_Principal ||= TypeCode.get_primitive_tc(CORBA::TK_PRINCIPAL)
|
1090
|
+
end
|
1091
|
+
|
1092
|
+
def CORBA._tc_Object
|
1093
|
+
@@tc_Object ||= TypeCode.get_primitive_tc(CORBA::TK_OBJREF)
|
1094
|
+
end
|
1095
|
+
|
1096
|
+
def CORBA._tc_CCMObject
|
1097
|
+
@@tc_CCMObject ||= TypeCode::Component.new("IDL:omg.org/CORBA/CCMObject:1.0", "CCMObject", CORBA::Object).freeze
|
1098
|
+
end
|
1099
|
+
|
1100
|
+
def CORBA._tc_CCHome
|
1101
|
+
@@tc_CCHome ||= TypeCode::Home.new("IDL:omg.org/CORBA/CCHome:1.0", "CCHome", CORBA::Object).freeze
|
1102
|
+
end
|
1103
|
+
|
1104
|
+
# define system exception related typecode constants
|
1105
|
+
|
1106
|
+
def CORBA._tc_CompletionStatus
|
1107
|
+
@@tc_CompletionStatus ||= TypeCode::Enum.new("IDL:omg.org/CORBA/CompletionStatus:1.0", "CompletionStatus",
|
1108
|
+
CORBA::COMPLETED_TXT.collect {|t| "COMPLETED_#{t}"})
|
1109
|
+
end
|
1110
|
+
|
1111
|
+
class LongDouble
|
1112
|
+
def to_d(precision)
|
1113
|
+
BigDecimal.new(self.to_s(precision))
|
1114
|
+
end
|
1115
|
+
def LongDouble._tc
|
1116
|
+
CORBA._tc_longdouble
|
1117
|
+
end
|
1118
|
+
end
|
1119
|
+
|
1120
|
+
end ## module CORBA
|
1121
|
+
end ## module R2CORBA
|