r2corba 1.5.1-universal-java
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 +173 -0
- data/LICENSE +59 -0
- data/LICENSE.jacorb +660 -0
- data/README +62 -0
- data/THANKS +54 -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/jacorb/lib/antlr-2.7.2.jar +0 -0
- data/jacorb/lib/jacorb-3.5.jar +0 -0
- data/jacorb/lib/jacorb-omgapi-3.5.jar +0 -0
- data/jacorb/lib/jacorb-services-3.5.jar +0 -0
- data/jacorb/lib/slf4j-api-1.7.6.jar +0 -0
- data/jacorb/lib/slf4j-jdk14-1.7.6.jar +0 -0
- data/lib/corba.rb +16 -0
- data/lib/corba/cbase/IORMap.rb +33 -0
- data/lib/corba/cbase/ORB.rb +237 -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/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/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 +112 -0
- data/lib/corba/jbase/Object.rb +99 -0
- data/lib/corba/jbase/Request.rb +226 -0
- data/lib/corba/jbase/Servant.rb +248 -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 +89 -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/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 +151 -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 +544 -0
- data/rakelib/gem.rake +236 -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/gateway.ior +1 -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 +0 -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 +93 -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 +112 -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.log +20 -0
- data/test/test2.log +5000 -0
- data/test/test_runner.rb +193 -0
- metadata +349 -0
@@ -0,0 +1,208 @@
|
|
1
|
+
#--------------------------------------------------------------------
|
2
|
+
# Object.rb - Common CORBA Object 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
|
+
module R2CORBA
|
14
|
+
module CORBA
|
15
|
+
|
16
|
+
def CORBA.is_nil(obj)
|
17
|
+
if obj.nil?
|
18
|
+
return true
|
19
|
+
elsif obj.is_a?(R2CORBA::CORBA::Object) || obj.respond_to?(:_is_nil?)
|
20
|
+
return obj._is_nil?()
|
21
|
+
end
|
22
|
+
false
|
23
|
+
end
|
24
|
+
|
25
|
+
module Object
|
26
|
+
@@wrapper_klass = Class.new do
|
27
|
+
include CORBA::Object
|
28
|
+
def initialize(nobj)
|
29
|
+
@objref_ = nobj
|
30
|
+
end
|
31
|
+
def _free_ref
|
32
|
+
self._release
|
33
|
+
end
|
34
|
+
attr_reader :objref_
|
35
|
+
def self.name
|
36
|
+
'CORBA::Object'
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def self._wrap_native(nobj)
|
41
|
+
raise ArgumentError, 'Expected org.omg.CORBA.Object' unless nobj.nil? || nobj.is_a?(Native::Object)
|
42
|
+
(nobj.nil? || (nobj.respond_to?(:_is_nil) && nobj._is_nil)) ? nil : @@wrapper_klass.new(nobj)
|
43
|
+
end
|
44
|
+
|
45
|
+
def self._narrow(obj)
|
46
|
+
raise CORBA::BAD_PARAM.new('not an object reference', 0, CORBA::COMPLETED_NO) unless obj.nil? || obj.is_a?(CORBA::Object) || obj.is_a?(Native::Object)
|
47
|
+
obj = self._wrap_native(obj) if obj.is_a?(Native::Object)
|
48
|
+
obj
|
49
|
+
end
|
50
|
+
|
51
|
+
#------------------- 4.3 "Object Reference Operations"
|
52
|
+
|
53
|
+
def ==(other)
|
54
|
+
self.class == other.class && self.objref_.eql?(other.objref_)
|
55
|
+
end
|
56
|
+
|
57
|
+
def hash
|
58
|
+
self.objref_.hash
|
59
|
+
end
|
60
|
+
|
61
|
+
def dup
|
62
|
+
self
|
63
|
+
end
|
64
|
+
|
65
|
+
def clone
|
66
|
+
self
|
67
|
+
end
|
68
|
+
|
69
|
+
#ret InterfaceDef
|
70
|
+
def _get_interface()
|
71
|
+
raise ::CORBA::NO_IMPLEMENT
|
72
|
+
end
|
73
|
+
|
74
|
+
#ret boolean
|
75
|
+
def _is_nil?()
|
76
|
+
self.objref_.nil? || (self.objref_.respond_to?(:_is_nil) && self.objref_._is_nil)
|
77
|
+
end
|
78
|
+
|
79
|
+
#ret ::CORBA::Object
|
80
|
+
def _duplicate()
|
81
|
+
return nil if self._is_nil?()
|
82
|
+
begin
|
83
|
+
self._wrap_native(self.objref_._duplicate)
|
84
|
+
rescue ::NativeException
|
85
|
+
CORBA::Exception.native2r($!)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
# ret void
|
90
|
+
def _release()
|
91
|
+
self.objref_._release unless self.objref_.nil?
|
92
|
+
@objref_ = nil
|
93
|
+
end
|
94
|
+
|
95
|
+
# ::String logical_type_id
|
96
|
+
# ret boolean
|
97
|
+
def _is_a?(logical_type_id)
|
98
|
+
return false if self._is_nil?()
|
99
|
+
begin
|
100
|
+
self.objref_._is_a(logical_type_id)
|
101
|
+
rescue ::NativeException
|
102
|
+
CORBA::Exception.native2r($!)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
# ret boolean
|
107
|
+
def _non_existent?()
|
108
|
+
raise CORBA::INV_OBJREF.new if self._is_nil?()
|
109
|
+
begin
|
110
|
+
self.objref_._non_existent
|
111
|
+
rescue ::NativeException
|
112
|
+
CORBA::Exception.native2r($!)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
# ::CORBA::Object other_object
|
117
|
+
# ret boolean
|
118
|
+
def _is_equivalent?(other_object)
|
119
|
+
raise CORBA::INV_OBJREF.new if self._is_nil?()
|
120
|
+
begin
|
121
|
+
self.objref_._is_equivalent(other_object)
|
122
|
+
rescue ::NativeException
|
123
|
+
CORBA::Exception.native2r($!)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
# Integer(ulong) maximum
|
128
|
+
# ret unsigned long
|
129
|
+
def _hash(maximum)
|
130
|
+
raise CORBA::INV_OBJREF.new if self._is_nil?()
|
131
|
+
begin
|
132
|
+
self.objref_._hash(maximum)
|
133
|
+
rescue ::NativeException
|
134
|
+
CORBA::Exception.native2r($!)
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
# ret ::String
|
139
|
+
def _repository_id()
|
140
|
+
raise CORBA::INV_OBJREF.new if self._is_nil?()
|
141
|
+
## if this object ref has already been narrowed
|
142
|
+
return self._interface_repository_id if self.respond_to?(:_interface_repository_id)
|
143
|
+
## ask the remote side
|
144
|
+
begin
|
145
|
+
self.objref_._repository_id()
|
146
|
+
rescue ::NativeException
|
147
|
+
CORBA::Exception.native2r($!)
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
#def PolicyType policy_type
|
152
|
+
# ret Policy
|
153
|
+
def _get_policy(policy_type)
|
154
|
+
raise ::CORBA::NO_IMPLEMENT
|
155
|
+
end
|
156
|
+
|
157
|
+
#PolicyList policies
|
158
|
+
#SetOverrideType set_add
|
159
|
+
#ret ::CORBA::Object
|
160
|
+
def _set_policy_overrides(policies, set_add )
|
161
|
+
raise ::CORBA::NO_IMPLEMENT
|
162
|
+
end
|
163
|
+
|
164
|
+
#int[] types
|
165
|
+
#ret PolicyList
|
166
|
+
def _get_policy_overrides(types)
|
167
|
+
raise ::CORBA::NO_IMPLEMENT
|
168
|
+
end
|
169
|
+
|
170
|
+
#PolicyList inconsistent_policies
|
171
|
+
#ret bool
|
172
|
+
def _validate_connection(inconsistent_policies)
|
173
|
+
raise ::CORBA::NO_IMPLEMENT
|
174
|
+
end
|
175
|
+
|
176
|
+
#ret ::CORBA::Object
|
177
|
+
def _get_component()
|
178
|
+
raise CORBA::INV_OBJREF.new if self._is_nil?()
|
179
|
+
begin
|
180
|
+
CORBA::Object._wrap_native(self.objref_._get_component())
|
181
|
+
rescue ::NativeException
|
182
|
+
CORBA::Exception.native2r($!)
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
# ret CORBA::ORB
|
187
|
+
def _get_orb()
|
188
|
+
raise CORBA::INV_OBJREF.new if self._is_nil?()
|
189
|
+
begin
|
190
|
+
CORBA::ORB._wrap_native(self.objref_._get_orb)
|
191
|
+
rescue ::NativeException
|
192
|
+
CORBA::Exception.native2r($!)
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
def _request(operation)
|
197
|
+
raise CORBA::INV_OBJREF.new if self._is_nil?()
|
198
|
+
begin
|
199
|
+
self.objref_._request(operation.to_s)
|
200
|
+
rescue ::NativeException
|
201
|
+
CORBA::Exception.native2r($!)
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
end # Object
|
206
|
+
end # CORBA
|
207
|
+
end # R2CORBA
|
208
|
+
|
@@ -0,0 +1,20 @@
|
|
1
|
+
#--------------------------------------------------------------------
|
2
|
+
# Request.rb - Common CORBA Request 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
|
+
module R2CORBA
|
14
|
+
module CORBA
|
15
|
+
|
16
|
+
module Request
|
17
|
+
end
|
18
|
+
|
19
|
+
end # CORBA
|
20
|
+
end # R2CORBA
|
@@ -0,0 +1,108 @@
|
|
1
|
+
#--------------------------------------------------------------------
|
2
|
+
# Servant.rb - R2TAO CORBA Servant support
|
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
|
+
|
14
|
+
module R2CORBA
|
15
|
+
|
16
|
+
module PortableServer
|
17
|
+
|
18
|
+
class Servant
|
19
|
+
|
20
|
+
module Intf
|
21
|
+
Id = "IDL:omg.org/CORBA/Object:1.0".freeze
|
22
|
+
Ids = [ Id ].freeze
|
23
|
+
Operations = {}.freeze
|
24
|
+
end
|
25
|
+
|
26
|
+
def Servant.include(*modules)
|
27
|
+
modules.reverse_each { |mod|
|
28
|
+
if mod.respond_to?(:superclass) && mod.superclass == R2CORBA::PortableServer::Servant
|
29
|
+
include_srv(mod)
|
30
|
+
elsif mod < CORBA::ValueBase && mod.const_defined?(:Intf)
|
31
|
+
include_valuetype(mod)
|
32
|
+
else
|
33
|
+
super(mod)
|
34
|
+
end
|
35
|
+
}
|
36
|
+
end
|
37
|
+
|
38
|
+
def get_operation_signature(opsym)
|
39
|
+
self.class::Operations[opsym]
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
def Servant.include_interface(intf)
|
44
|
+
self::Intf.module_eval(%Q{ include ::#{intf.name} })
|
45
|
+
self::Intf::Operations.merge!(intf::Operations)
|
46
|
+
self::Intf::Ids.concat(intf::Ids)
|
47
|
+
end
|
48
|
+
|
49
|
+
def Servant.include_srv(srv)
|
50
|
+
if !self.const_defined?('Id')
|
51
|
+
if self.superclass == R2CORBA::PortableServer::Servant || !self.constants.include?('Id')
|
52
|
+
self.const_set('Id', srv::Id.dup.freeze)
|
53
|
+
else
|
54
|
+
self.const_set('Id', self::Id.dup.freeze)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
if !self.const_defined?('Ids')
|
58
|
+
if self.superclass == R2CORBA::PortableServer::Servant || !self.constants.include?('Ids')
|
59
|
+
self.const_set('Ids', [])
|
60
|
+
else
|
61
|
+
self.const_set('Ids', self::Ids.dup)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
if !self.const_defined?('Operations')
|
65
|
+
if self.superclass == R2CORBA::PortableServer::Servant || !self.constants.include?('Operations')
|
66
|
+
self.const_set('Operations', {})
|
67
|
+
else
|
68
|
+
self.const_set('Operations', self::Operations.dup)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
self.module_eval(%Q{ include ::#{srv.name}::Intf })
|
72
|
+
self::Operations.merge!(srv::Operations)
|
73
|
+
self::Ids.concat(srv::Ids).uniq!
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def Servant.include_valuetype(vt)
|
78
|
+
self.module_eval do
|
79
|
+
if vt < CORBA::Portable::CustomValueBase
|
80
|
+
include CORBA::Portable::CustomValueBase unless self.include?(CORBA::Portable::CustomValueBase)
|
81
|
+
else
|
82
|
+
include CORBA::ValueBase unless self.include?(CORBA::ValueBase)
|
83
|
+
end
|
84
|
+
self.const_set(:TRUNCATABLE_IDS, vt::TRUNCATABLE_IDS)
|
85
|
+
self.const_set(:VT_TC, vt._tc)
|
86
|
+
#@@tc_vt_ = vt._tc
|
87
|
+
def self._tc
|
88
|
+
#@@tc_vt_
|
89
|
+
self.const_get(:VT_TC)
|
90
|
+
end
|
91
|
+
include vt::Intf
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
class DynamicImplementation < Servant
|
96
|
+
def invoke(request)
|
97
|
+
if self.class.const_defined?("OPTABLE") && self.class::OPTABLE.has_key?(request.operation)
|
98
|
+
request.describe(self.class::OPTABLE[request.operation])
|
99
|
+
return self.__send__(request.operation, *request.arguments) { request }
|
100
|
+
else
|
101
|
+
return self.__send__(request.operation) { request }
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
#--------------------------------------------------------------------
|
2
|
+
# Struct.rb - Definition of CORBA Struct class as baseclass for all
|
3
|
+
# IDL defined structs
|
4
|
+
#
|
5
|
+
# Author: Martin Corino
|
6
|
+
#
|
7
|
+
# This program is free software; you can redistribute it and/or
|
8
|
+
# modify it under the terms of the R2CORBA LICENSE which is
|
9
|
+
# included with this program.
|
10
|
+
#
|
11
|
+
# Copyright (c) Remedy IT Expertise BV
|
12
|
+
# Chamber of commerce Rotterdam nr.276339, The Netherlands
|
13
|
+
#--------------------------------------------------------------------
|
14
|
+
|
15
|
+
module R2CORBA
|
16
|
+
module CORBA
|
17
|
+
module Portable
|
18
|
+
class Struct
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
#--------------------------------------------------------------------
|
2
|
+
# Stub.rb - basic CORBA Stub 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
|
+
module R2CORBA
|
14
|
+
module CORBA
|
15
|
+
module Portable
|
16
|
+
module Stub
|
17
|
+
|
18
|
+
def self.included(klass)
|
19
|
+
klass.class_eval do
|
20
|
+
|
21
|
+
def init()
|
22
|
+
init_corba_portable_stub()
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.create_stub(obj)
|
26
|
+
raise CORBA::INV_OBJREF.new unless obj.is_a?(CORBA::Object)
|
27
|
+
obj.extend(self) unless obj.is_a?(self)
|
28
|
+
obj.init()
|
29
|
+
return obj
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
Id = "IDL:omg.org/CORBA/Object:1.0".freeze
|
36
|
+
Ids = [ Id ].freeze
|
37
|
+
|
38
|
+
protected
|
39
|
+
def init_corba_portable_stub()
|
40
|
+
@ids ||= ["IDL:omg.org/CORBA/Object:1.0"]
|
41
|
+
end
|
42
|
+
|
43
|
+
def _ids; @ids; end
|
44
|
+
|
45
|
+
def _append_ids(*ids)
|
46
|
+
@ids.concat(ids) unless ids.nil?
|
47
|
+
end
|
48
|
+
|
49
|
+
public
|
50
|
+
def _narrow!(klass)
|
51
|
+
raise CORBA::OBJECT_NOT_EXIST.new("Nil object narrowed!") if self._is_nil?
|
52
|
+
raise(TypeError, "invalid object narrowed: #{self.class}") unless self.is_a?(CORBA::Stub) && self._is_a?(klass::Id)
|
53
|
+
self.extend klass
|
54
|
+
_append_ids(*klass::Ids)
|
55
|
+
return self
|
56
|
+
end
|
57
|
+
|
58
|
+
def _unchecked_narrow!(klass)
|
59
|
+
raise CORBA::OBJECT_NOT_EXIST.new("Nil object narrowed!") if self._is_nil?
|
60
|
+
raise(TypeError, "invalid object narrowed: #{self.class}") unless self.is_a?(CORBA::Stub)
|
61
|
+
self.extend klass
|
62
|
+
_append_ids(*klass::Ids)
|
63
|
+
return self
|
64
|
+
end
|
65
|
+
|
66
|
+
def _is_a?(str)
|
67
|
+
_ids.include?(str) || super(str)
|
68
|
+
end
|
69
|
+
|
70
|
+
def inspect()
|
71
|
+
s = ""
|
72
|
+
s << self.class.name.to_s << "\n" <<
|
73
|
+
"type_id: \n" <<
|
74
|
+
" " << @ids.join("\n ") << "\n"
|
75
|
+
end
|
76
|
+
end # Stub
|
77
|
+
end # Portable
|
78
|
+
end # CORBA
|
79
|
+
end # R2CORBA
|
@@ -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
|