r2corba 1.6.1-x64-mingw-ucrt

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