r2corba 1.6.1-x64-mingw-ucrt

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.
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