r2corba 1.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGES +159 -0
- data/LICENSE +59 -0
- data/README +62 -0
- data/THANKS +52 -0
- data/bin/r2corba +8 -0
- data/bin/ridlc +11 -0
- data/bin/rins +7 -0
- data/ext/ext.mwc +6 -0
- data/ext/extload/extload.c +60 -0
- data/ext/libr2tao/any.cpp +1543 -0
- data/ext/libr2tao/exception.cpp +202 -0
- data/ext/libr2tao/exception.h +104 -0
- data/ext/libr2tao/longdouble.cpp +173 -0
- data/ext/libr2tao/longdouble.h +31 -0
- data/ext/libr2tao/object.cpp +1150 -0
- data/ext/libr2tao/object.h +38 -0
- data/ext/libr2tao/orb.cpp +1029 -0
- data/ext/libr2tao/orb.h +36 -0
- data/ext/libr2tao/r2tao_export.h +45 -0
- data/ext/libr2tao/r2tao_ext.h +38 -0
- data/ext/libr2tao/required.cpp +463 -0
- data/ext/libr2tao/required.h +187 -0
- data/ext/libr2tao/typecode.cpp +888 -0
- data/ext/libr2tao/typecode.h +45 -0
- data/ext/libr2tao/values.cpp +2938 -0
- data/ext/libr2tao/values.h +396 -0
- data/ext/librpoa/iortable.cpp +250 -0
- data/ext/librpoa/poa.cpp +1076 -0
- data/ext/librpoa/poa.h +24 -0
- data/ext/librpoa/rpoa_export.h +44 -0
- data/ext/librpoa/servant.cpp +1338 -0
- data/ext/librpoa/servant.h +116 -0
- data/ext/librpoa/srvreq_fix.cpp +283 -0
- data/ext/librpoa/srvreq_fix.h +149 -0
- data/ext/librpol/policies.cpp +763 -0
- data/ext/librpol/policies.h +15 -0
- data/ext/librpol/rpol_export.h +44 -0
- data/lib/corba/cbase/IORMap.rb +33 -0
- data/lib/corba/cbase/ORB.rb +231 -0
- data/lib/corba/cbase/Request.rb +134 -0
- data/lib/corba/cbase/Streams.rb +129 -0
- data/lib/corba/cbase/Stub.rb +19 -0
- data/lib/corba/cbase/Typecode.rb +441 -0
- data/lib/corba/cbase/Values.rb +129 -0
- data/lib/corba/cbase/exception.rb +66 -0
- data/lib/corba/cbase/poa.rb +23 -0
- data/lib/corba/cbase/policies.rb +78 -0
- data/lib/corba/cbase/post_require.rb +14 -0
- data/lib/corba/cbase/require.rb +28 -0
- data/lib/corba/cmds/base.rb +85 -0
- data/lib/corba/cmds/test.rb +30 -0
- data/lib/corba/common/Any.rb +91 -0
- data/lib/corba/common/IDL.rb +104 -0
- data/lib/corba/common/ORB.rb +368 -0
- data/lib/corba/common/Object.rb +208 -0
- data/lib/corba/common/Request.rb +20 -0
- data/lib/corba/common/Servant.rb +108 -0
- data/lib/corba/common/Struct.rb +22 -0
- data/lib/corba/common/Stub.rb +79 -0
- data/lib/corba/common/Typecode.rb +1121 -0
- data/lib/corba/common/Union.rb +56 -0
- data/lib/corba/common/Values.rb +92 -0
- data/lib/corba/common/const.rb +22 -0
- data/lib/corba/common/exception.rb +68 -0
- data/lib/corba/common/require.rb +27 -0
- data/lib/corba/common/version.rb +22 -0
- data/lib/corba/idl/IDL.rb +21 -0
- data/lib/corba/idl/IORTable.pidl +62 -0
- data/lib/corba/idl/TAO_Ext.pidl +46 -0
- data/lib/corba/idl/require.rb +20 -0
- data/lib/corba/jbase/Any.rb +273 -0
- data/lib/corba/jbase/IORMap.rb +36 -0
- data/lib/corba/jbase/ORB.rb +99 -0
- data/lib/corba/jbase/Object.rb +98 -0
- data/lib/corba/jbase/Request.rb +226 -0
- data/lib/corba/jbase/Servant.rb +247 -0
- data/lib/corba/jbase/ServerRequest.rb +128 -0
- data/lib/corba/jbase/Streams.rb +671 -0
- data/lib/corba/jbase/Stub.rb +38 -0
- data/lib/corba/jbase/Typecode.rb +520 -0
- data/lib/corba/jbase/Values.rb +173 -0
- data/lib/corba/jbase/exception.rb +106 -0
- data/lib/corba/jbase/poa.rb +229 -0
- data/lib/corba/jbase/policies.rb +300 -0
- data/lib/corba/jbase/post_require.rb +14 -0
- data/lib/corba/jbase/require.rb +86 -0
- data/lib/corba/naming.rb +14 -0
- data/lib/corba/naming_service.rb +15 -0
- data/lib/corba/poa.rb +15 -0
- data/lib/corba/policies.rb +18 -0
- data/lib/corba/require.rb +17 -0
- data/lib/corba/svcs/ins/cos_naming.rb +426 -0
- data/lib/corba/svcs/ins/ins.rb +526 -0
- data/lib/corba/svcs/ins/naming_service.rb +119 -0
- data/lib/corba.rb +16 -0
- data/lib/ridlbe/ruby/config.rb +336 -0
- data/lib/ridlbe/ruby/require.rb +16 -0
- data/lib/ridlbe/ruby/walker.rb +1582 -0
- data/mkrf_conf_srcgem.rb +186 -0
- data/rakelib/bin.rake +80 -0
- data/rakelib/bin.rb +146 -0
- data/rakelib/build.rake +87 -0
- data/rakelib/config.rake +52 -0
- data/rakelib/config.rb +450 -0
- data/rakelib/ext.rake +242 -0
- data/rakelib/ext.rb +308 -0
- data/rakelib/ext_r2tao.rb +232 -0
- data/rakelib/gem.rake +212 -0
- data/rakelib/gem.rb +146 -0
- data/rakelib/package.rake +26 -0
- data/rakelib/test.rake +23 -0
- data/test/BiDirectional/Test.idl +34 -0
- data/test/BiDirectional/client.rb +132 -0
- data/test/BiDirectional/run_test.rb +68 -0
- data/test/BiDirectional/server.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/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/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/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.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.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.rb +131 -0
- data/test/Hello/Test.idl +27 -0
- data/test/Hello/client.rb +78 -0
- data/test/Hello/run_test.rb +71 -0
- data/test/Hello/server.rb +95 -0
- data/test/IDL_Test/Test.idl +113 -0
- data/test/IDL_Test/Test_inc.idl +17 -0
- data/test/IDL_Test/client.rb +102 -0
- data/test/IDL_Test/run_test.rb +69 -0
- data/test/IDL_Test/server.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.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.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.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/Simple/Test.idl +27 -0
- data/test/Multi_Threading/Simple/client.rb +88 -0
- data/test/Multi_Threading/Simple/run_test.rb +69 -0
- data/test/Multi_Threading/Simple/server.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.rb +119 -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.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.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.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.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.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.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.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.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.rb +271 -0
- data/test/OBV/ValueBox/valuebox.idl +101 -0
- data/test/OBV/ValueBox/vb_basic.idl +75 -0
- data/test/OBV/ValueBox/vb_struct.idl +68 -0
- data/test/OBV/ValueBox/vb_union.idl +21 -0
- data/test/Object/Test.idl +27 -0
- data/test/Object/client.rb +103 -0
- data/test/Object/run_test.rb +69 -0
- data/test/Object/server.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.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.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.rb +109 -0
- data/test/Timeout/test.idl +19 -0
- data/test/lib/assert.rb +43 -0
- data/test/lib/test.rb +542 -0
- data/test/test_runner.rb +193 -0
- metadata +334 -0
|
@@ -0,0 +1,396 @@
|
|
|
1
|
+
/*--------------------------------------------------------------------
|
|
2
|
+
# values.h - R2TAO CORBA Valuetype 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
|
+
#include "tao/Valuetype/AbstractBase.h"
|
|
15
|
+
#include "tao/Valuetype/ValueBase.h"
|
|
16
|
+
#include "tao/Valuetype/ValueFactory.h"
|
|
17
|
+
#include "tao/Stub.h"
|
|
18
|
+
#include "tao/AnyTypeCode/Any.h"
|
|
19
|
+
#include "tao/AnyTypeCode/Any_Impl_T.h"
|
|
20
|
+
#include "tao/AnyTypeCode/Any_Dual_Impl_T.h"
|
|
21
|
+
#include "tao/Valuetype/Value_VarOut_T.h"
|
|
22
|
+
#include "tao/Objref_VarOut_T.h"
|
|
23
|
+
#include "tao/VarOut_T.h"
|
|
24
|
+
//#include "ace/Auto_Ptr.h"
|
|
25
|
+
//#include "ace/Array_Base.h"
|
|
26
|
+
|
|
27
|
+
extern VALUE r2tao_cBoxedValueBase;
|
|
28
|
+
|
|
29
|
+
//-------------------------------------------------------------------
|
|
30
|
+
// R2TAO_ArrayAny_Impl_T
|
|
31
|
+
//
|
|
32
|
+
// Template for Any implementation containing C array typs
|
|
33
|
+
// to marshal to TAO CDR streams (not used for demarshaling).
|
|
34
|
+
//===================================================================
|
|
35
|
+
|
|
36
|
+
template<typename T>
|
|
37
|
+
class R2TAO_ArrayAny_Impl_T : public TAO::Any_Impl
|
|
38
|
+
{
|
|
39
|
+
public:
|
|
40
|
+
R2TAO_ArrayAny_Impl_T (CORBA::TypeCode_ptr,
|
|
41
|
+
T * const,
|
|
42
|
+
CORBA::ULong);
|
|
43
|
+
virtual ~R2TAO_ArrayAny_Impl_T (void);
|
|
44
|
+
|
|
45
|
+
static void insert (CORBA::Any &,
|
|
46
|
+
CORBA::TypeCode_ptr,
|
|
47
|
+
T * const,
|
|
48
|
+
CORBA::ULong);
|
|
49
|
+
|
|
50
|
+
virtual CORBA::Boolean marshal_value (TAO_OutputCDR &);
|
|
51
|
+
virtual const void *value (void) const;
|
|
52
|
+
virtual void free_value (void);
|
|
53
|
+
|
|
54
|
+
private:
|
|
55
|
+
void* value_;
|
|
56
|
+
CORBA::ULong length_;
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
//-------------------------------------------------------------------
|
|
61
|
+
// R2TAO Value class
|
|
62
|
+
//
|
|
63
|
+
// Wrapper class for reference to R2CORBA Value instance to enable
|
|
64
|
+
// to marshal/demarshal to/from TAO CDR streams.
|
|
65
|
+
//===================================================================
|
|
66
|
+
|
|
67
|
+
class R2TAO_Value;
|
|
68
|
+
typedef R2TAO_Value * R2TAO_Value_ptr;
|
|
69
|
+
typedef
|
|
70
|
+
TAO_Value_Var_T<
|
|
71
|
+
R2TAO_Value
|
|
72
|
+
>
|
|
73
|
+
R2TAO_Value_var;
|
|
74
|
+
|
|
75
|
+
typedef
|
|
76
|
+
TAO_Value_Out_T<
|
|
77
|
+
R2TAO_Value
|
|
78
|
+
>
|
|
79
|
+
R2TAO_Value_out;
|
|
80
|
+
|
|
81
|
+
class R2TAO_Value : public ::CORBA::DefaultValueRefCountBase
|
|
82
|
+
{
|
|
83
|
+
public:
|
|
84
|
+
R2TAO_Value (VALUE rbValue, bool for_unmarshal=false);
|
|
85
|
+
virtual ~R2TAO_Value ();
|
|
86
|
+
|
|
87
|
+
virtual CORBA::ValueBase* _copy_value (void);
|
|
88
|
+
|
|
89
|
+
static void _tao_any_destructor (void *);
|
|
90
|
+
|
|
91
|
+
virtual void truncation_hook ();
|
|
92
|
+
|
|
93
|
+
static R2TAO_Value* _downcast (::CORBA::ValueBase *v);
|
|
94
|
+
|
|
95
|
+
virtual CORBA::TypeCode_ptr _tao_type (void) const;
|
|
96
|
+
|
|
97
|
+
/// Return the repository id of this valuetype.
|
|
98
|
+
virtual const char * _tao_obv_repository_id (void) const;
|
|
99
|
+
|
|
100
|
+
/// Give the list of the RepositoryIds in the valuetype "truncatable"
|
|
101
|
+
/// inheritance hierarchy. List the id of this valuetype as first
|
|
102
|
+
/// RepositoryID and go up the "truncatable" derivation hierarchy.
|
|
103
|
+
/// Note the truncatable repo ids only list the truncatable base types
|
|
104
|
+
/// to which this type is safe to truncate, not all its parents.
|
|
105
|
+
virtual void _tao_obv_truncatable_repo_ids (Repository_Id_List &) const;
|
|
106
|
+
|
|
107
|
+
virtual ::CORBA::Boolean _tao_marshal_v (TAO_OutputCDR &) const;
|
|
108
|
+
virtual ::CORBA::Boolean _tao_unmarshal_v (TAO_InputCDR &);
|
|
109
|
+
|
|
110
|
+
// always return false -> i.e. always marshal type Id
|
|
111
|
+
virtual ::CORBA::Boolean _tao_match_formal_type (ptrdiff_t ) const;
|
|
112
|
+
|
|
113
|
+
VALUE get_ruby_value () const { return this->rbValue_; }
|
|
114
|
+
|
|
115
|
+
bool add_chunk ();
|
|
116
|
+
|
|
117
|
+
bool add_chunk_element (CORBA::Any_var& elem);
|
|
118
|
+
|
|
119
|
+
bool requires_truncation () const { return this->requires_truncation_; }
|
|
120
|
+
|
|
121
|
+
bool has_started_chunk_unmarshalling () const { return this->started_chunk_unmarshal_; }
|
|
122
|
+
|
|
123
|
+
void started_chunk_unmarshalling () { this->started_chunk_unmarshal_ = true; }
|
|
124
|
+
|
|
125
|
+
void ended_chunk_unmarshalling () { this->started_chunk_unmarshal_ = false; }
|
|
126
|
+
|
|
127
|
+
private:
|
|
128
|
+
typedef ACE_Array_Base<CORBA::Any*> ChunkElements;
|
|
129
|
+
struct Chunk {
|
|
130
|
+
Chunk () : next_(0) {}
|
|
131
|
+
~Chunk() {
|
|
132
|
+
for (ChunkElements::size_type i=0; i<this->elems_.size () ;++i)
|
|
133
|
+
{ delete this->elems_[i]; }
|
|
134
|
+
delete this->next_;
|
|
135
|
+
this->next_ = 0;
|
|
136
|
+
}
|
|
137
|
+
ChunkElements elems_;
|
|
138
|
+
Chunk* next_;
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
void init ();
|
|
142
|
+
|
|
143
|
+
bool for_unmarshal_;
|
|
144
|
+
bool started_chunk_unmarshal_;
|
|
145
|
+
|
|
146
|
+
bool requires_truncation_;
|
|
147
|
+
|
|
148
|
+
VALUE rbValue_; // the Ruby valuetype instance
|
|
149
|
+
|
|
150
|
+
VALUE rbValueClass_; // the Ruby valuetype class
|
|
151
|
+
|
|
152
|
+
VALUE rbCIHolder_; // Ruby wrapper object to hold TAO_ChunkInfo
|
|
153
|
+
|
|
154
|
+
CORBA::TypeCode_var val_tc_; // the typecode for the valuetype
|
|
155
|
+
|
|
156
|
+
ACE_Auto_Ptr<Chunk> chunk_list_;
|
|
157
|
+
Chunk* last_chunk_;
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
void operator<<= (::CORBA::Any &, R2TAO_Value_ptr); // copying
|
|
161
|
+
void operator<<= (::CORBA::Any &, R2TAO_Value_ptr *); // non-copying
|
|
162
|
+
|
|
163
|
+
::CORBA::Boolean operator<< (TAO_OutputCDR &/*strm*/, const R2TAO_Value * /*_tao_valref*/);
|
|
164
|
+
::CORBA::Boolean operator>> (TAO_InputCDR &/*strm*/, R2TAO_Value *&/*_tao_valref*/);
|
|
165
|
+
|
|
166
|
+
VALUE r2tao_wrap_Valuebox(VALUE rval, CORBA::TypeCode_ptr tc);
|
|
167
|
+
|
|
168
|
+
//-------------------------------------------------------------------
|
|
169
|
+
// R2TAO Valuefactory class
|
|
170
|
+
//
|
|
171
|
+
// Wrapper class for reference to R2CORBA valuefactory instance
|
|
172
|
+
//===================================================================
|
|
173
|
+
|
|
174
|
+
class R2TAO_ValueFactory
|
|
175
|
+
: public CORBA::ValueFactoryBase
|
|
176
|
+
{
|
|
177
|
+
public:
|
|
178
|
+
R2TAO_ValueFactory (VALUE rbValueFactory);
|
|
179
|
+
|
|
180
|
+
static R2TAO_ValueFactory* _downcast ( ::CORBA::ValueFactoryBase *);
|
|
181
|
+
|
|
182
|
+
virtual ::CORBA::ValueBase *
|
|
183
|
+
create_for_unmarshal (void);
|
|
184
|
+
|
|
185
|
+
virtual ::CORBA::AbstractBase_ptr
|
|
186
|
+
create_for_unmarshal_abstract (void);
|
|
187
|
+
|
|
188
|
+
// TAO-specific extensions
|
|
189
|
+
virtual const char* tao_repository_id (void);
|
|
190
|
+
|
|
191
|
+
VALUE get_ruby_factory () { return this->rbValueFactory_; }
|
|
192
|
+
|
|
193
|
+
protected:
|
|
194
|
+
virtual ~R2TAO_ValueFactory (void);
|
|
195
|
+
|
|
196
|
+
private:
|
|
197
|
+
VALUE rbValueFactory_;
|
|
198
|
+
|
|
199
|
+
static R2TAO_RBFuncall fn_create_default_;
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
VALUE r2tao_VFB_register_value_factory(VALUE self, VALUE id, VALUE rfact);
|
|
203
|
+
VALUE r2tao_VFB_unregister_value_factory(VALUE self, VALUE id);
|
|
204
|
+
VALUE r2tao_VFB_lookup_value_factory(VALUE self, VALUE id);
|
|
205
|
+
|
|
206
|
+
//-------------------------------------------------------------------
|
|
207
|
+
// R2TAO AbstractValue class
|
|
208
|
+
//
|
|
209
|
+
// Wrapper class for value type to present CORBA::AbstractBase
|
|
210
|
+
// interface to TAO Any
|
|
211
|
+
//===================================================================
|
|
212
|
+
|
|
213
|
+
class R2TAO_AbstractValue;
|
|
214
|
+
typedef R2TAO_AbstractValue* R2TAO_AbstractValue_ptr;
|
|
215
|
+
|
|
216
|
+
typedef
|
|
217
|
+
TAO_Objref_Var_T<
|
|
218
|
+
R2TAO_AbstractValue
|
|
219
|
+
>
|
|
220
|
+
R2TAO_AbstractValue_var;
|
|
221
|
+
|
|
222
|
+
typedef
|
|
223
|
+
TAO_Objref_Out_T<
|
|
224
|
+
R2TAO_AbstractValue
|
|
225
|
+
>
|
|
226
|
+
R2TAO_AbstractValue_out;
|
|
227
|
+
|
|
228
|
+
class R2TAO_AbstractValue :
|
|
229
|
+
public ::CORBA::AbstractBase,
|
|
230
|
+
public R2TAO_Value
|
|
231
|
+
{
|
|
232
|
+
public:
|
|
233
|
+
R2TAO_AbstractValue (VALUE rbValue,
|
|
234
|
+
CORBA::TypeCode_ptr abs_tc);
|
|
235
|
+
R2TAO_AbstractValue (VALUE rbValue); // for unmarshaling only
|
|
236
|
+
virtual ~R2TAO_AbstractValue ();
|
|
237
|
+
|
|
238
|
+
static void _tao_any_destructor (void *);
|
|
239
|
+
|
|
240
|
+
static R2TAO_AbstractValue_ptr _duplicate (R2TAO_AbstractValue_ptr obj);
|
|
241
|
+
|
|
242
|
+
static R2TAO_AbstractValue* _downcast ( ::CORBA::ValueBase *v);
|
|
243
|
+
|
|
244
|
+
virtual const char* _tao_obv_repository_id (void) const;
|
|
245
|
+
virtual CORBA::Boolean _tao_marshal_v (TAO_OutputCDR &strm) const;
|
|
246
|
+
virtual CORBA::Boolean _tao_unmarshal_v (TAO_InputCDR &strm);
|
|
247
|
+
virtual CORBA::Boolean _tao_match_formal_type (ptrdiff_t) const;
|
|
248
|
+
|
|
249
|
+
virtual void _add_ref (void);
|
|
250
|
+
virtual void _remove_ref (void);
|
|
251
|
+
virtual ::CORBA::ValueBase *_tao_to_value (void);
|
|
252
|
+
|
|
253
|
+
CORBA::TypeCode_ptr abstract_type () const;
|
|
254
|
+
|
|
255
|
+
private:
|
|
256
|
+
CORBA::TypeCode_var abs_tc_;
|
|
257
|
+
};
|
|
258
|
+
|
|
259
|
+
void operator<<= (::CORBA::Any &, R2TAO_AbstractValue_ptr); // copying
|
|
260
|
+
void operator<<= (::CORBA::Any &, R2TAO_AbstractValue_ptr *); // non-copying
|
|
261
|
+
|
|
262
|
+
/* Extract through:
|
|
263
|
+
*
|
|
264
|
+
TAO::Any_Impl_T<R2TAO_AbstractValue>::extract (
|
|
265
|
+
const CORBA::Any & _tao_any,
|
|
266
|
+
R2TAO_AbstractValue::_tao_any_destructor,
|
|
267
|
+
CORBA::TypeCode_ptr _tc,
|
|
268
|
+
R2TAO_AbstractValue_ptr & _tao_elem);
|
|
269
|
+
*/
|
|
270
|
+
|
|
271
|
+
::CORBA::Boolean operator<< (TAO_OutputCDR &, const R2TAO_AbstractValue_ptr);
|
|
272
|
+
/* Extract through:
|
|
273
|
+
*
|
|
274
|
+
::CORBA::Boolean operator>> (TAO_InputCDR &, CORBA::AbstractBase_ptr & abs_ptr);
|
|
275
|
+
|
|
276
|
+
* then use abs_ptr->to_object () or abs_ptr->to_value ()
|
|
277
|
+
*/
|
|
278
|
+
// Dummy to allow compilation
|
|
279
|
+
::CORBA::Boolean operator>> (TAO_InputCDR &/*strm*/, R2TAO_AbstractValue_ptr &/*_tao_objref*/);
|
|
280
|
+
|
|
281
|
+
//-------------------------------------------------------------------
|
|
282
|
+
// R2TAO AbstractObject class
|
|
283
|
+
//
|
|
284
|
+
// Wrapper class for object reference to present CORBA::AbstractBase
|
|
285
|
+
// interface to TAO Any
|
|
286
|
+
//===================================================================
|
|
287
|
+
|
|
288
|
+
class R2TAO_AbstractObject;
|
|
289
|
+
typedef R2TAO_AbstractObject* R2TAO_AbstractObject_ptr;
|
|
290
|
+
|
|
291
|
+
typedef
|
|
292
|
+
TAO_Objref_Var_T<
|
|
293
|
+
R2TAO_AbstractObject
|
|
294
|
+
>
|
|
295
|
+
R2TAO_AbstractObject_var;
|
|
296
|
+
|
|
297
|
+
typedef
|
|
298
|
+
TAO_Objref_Out_T<
|
|
299
|
+
R2TAO_AbstractObject
|
|
300
|
+
>
|
|
301
|
+
R2TAO_AbstractObject_out;
|
|
302
|
+
|
|
303
|
+
class R2TAO_AbstractObject :
|
|
304
|
+
public ::CORBA::AbstractBase,
|
|
305
|
+
public ::CORBA::Object
|
|
306
|
+
{
|
|
307
|
+
public:
|
|
308
|
+
R2TAO_AbstractObject (CORBA::Object_ptr objref,
|
|
309
|
+
CORBA::TypeCode_ptr abs_tc);
|
|
310
|
+
virtual ~R2TAO_AbstractObject () ;
|
|
311
|
+
|
|
312
|
+
static void _tao_any_destructor (void *);
|
|
313
|
+
|
|
314
|
+
static R2TAO_AbstractObject_ptr _duplicate (R2TAO_AbstractObject_ptr obj);
|
|
315
|
+
|
|
316
|
+
static void _tao_release (R2TAO_AbstractObject_ptr obj);
|
|
317
|
+
|
|
318
|
+
virtual void _add_ref (void);
|
|
319
|
+
virtual void _remove_ref (void);
|
|
320
|
+
|
|
321
|
+
virtual ::CORBA::Boolean _is_a (const char *type_id);
|
|
322
|
+
virtual const char* _interface_repository_id (void) const;
|
|
323
|
+
virtual ::CORBA::Boolean marshal (TAO_OutputCDR &cdr);
|
|
324
|
+
|
|
325
|
+
CORBA::TypeCode_ptr abstract_type () const;
|
|
326
|
+
|
|
327
|
+
private:
|
|
328
|
+
CORBA::TypeCode_var abs_tc_;
|
|
329
|
+
};
|
|
330
|
+
|
|
331
|
+
void operator<<= (::CORBA::Any &, R2TAO_AbstractObject_ptr); // copying
|
|
332
|
+
void operator<<= (::CORBA::Any &, R2TAO_AbstractObject_ptr *); // non-copying
|
|
333
|
+
|
|
334
|
+
/* Extract through:
|
|
335
|
+
*
|
|
336
|
+
TAO::Any_Impl_T<R2TAO_AbstractObject>::extract (
|
|
337
|
+
const CORBA::Any & _tao_any,
|
|
338
|
+
R2TAO_AbstractObject::_tao_any_destructor,
|
|
339
|
+
CORBA::TypeCode_ptr _tc,
|
|
340
|
+
R2TAO_AbstractObject_ptr & _tao_elem);
|
|
341
|
+
*/
|
|
342
|
+
|
|
343
|
+
::CORBA::Boolean operator<< (TAO_OutputCDR &, const R2TAO_AbstractObject_ptr);
|
|
344
|
+
/* Extract through:
|
|
345
|
+
*
|
|
346
|
+
::CORBA::Boolean operator>> (TAO_InputCDR &, CORBA::AbstractBase_ptr & abs_ptr);
|
|
347
|
+
|
|
348
|
+
* then use abs_ptr->to_object () or abs_ptr->to_value ()
|
|
349
|
+
*/
|
|
350
|
+
// Dummy to allow compilation
|
|
351
|
+
::CORBA::Boolean operator>> (TAO_InputCDR &/*strm*/, R2TAO_AbstractObject_ptr &/*_tao_objref*/);
|
|
352
|
+
|
|
353
|
+
namespace CORBA
|
|
354
|
+
{
|
|
355
|
+
void release (R2TAO_AbstractObject_ptr);
|
|
356
|
+
::CORBA::Boolean is_nil (R2TAO_AbstractObject_ptr);
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
R2TAO_AbstractObject_ptr r2tao_AbstractObject_r2t (VALUE rval, VALUE rtc, CORBA::TypeCode_ptr tc);
|
|
360
|
+
|
|
361
|
+
namespace TAO
|
|
362
|
+
{
|
|
363
|
+
template<>
|
|
364
|
+
struct Value_Traits<R2TAO_Value>
|
|
365
|
+
{
|
|
366
|
+
static void add_ref (R2TAO_Value *);
|
|
367
|
+
static void remove_ref (R2TAO_Value *);
|
|
368
|
+
static void release (R2TAO_Value *);
|
|
369
|
+
};
|
|
370
|
+
|
|
371
|
+
template<>
|
|
372
|
+
struct Objref_Traits< R2TAO_AbstractValue>
|
|
373
|
+
{
|
|
374
|
+
static R2TAO_AbstractValue_ptr duplicate (
|
|
375
|
+
R2TAO_AbstractValue_ptr p);
|
|
376
|
+
static void release (
|
|
377
|
+
R2TAO_AbstractValue_ptr p);
|
|
378
|
+
static R2TAO_AbstractValue_ptr nil (void);
|
|
379
|
+
static ::CORBA::Boolean marshal (
|
|
380
|
+
const R2TAO_AbstractValue_ptr p,
|
|
381
|
+
TAO_OutputCDR & cdr);
|
|
382
|
+
};
|
|
383
|
+
|
|
384
|
+
template<>
|
|
385
|
+
struct Objref_Traits< R2TAO_AbstractObject>
|
|
386
|
+
{
|
|
387
|
+
static R2TAO_AbstractObject_ptr duplicate (
|
|
388
|
+
R2TAO_AbstractObject_ptr p);
|
|
389
|
+
static void release (
|
|
390
|
+
R2TAO_AbstractObject_ptr p);
|
|
391
|
+
static R2TAO_AbstractObject_ptr nil (void);
|
|
392
|
+
static ::CORBA::Boolean marshal (
|
|
393
|
+
const R2TAO_AbstractObject_ptr p,
|
|
394
|
+
TAO_OutputCDR & cdr);
|
|
395
|
+
};
|
|
396
|
+
}
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
/*--------------------------------------------------------------------
|
|
2
|
+
# iortable.cpp - R2TAO TAO IORTable support (non-standard extension)
|
|
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
|
+
#include "poa.h"
|
|
15
|
+
#include "tao/ORB.h"
|
|
16
|
+
#include "tao/IORTable/IORTable.h"
|
|
17
|
+
#include "object.h"
|
|
18
|
+
#include "exception.h"
|
|
19
|
+
#include "orb.h"
|
|
20
|
+
|
|
21
|
+
#define RUBY_INVOKE_FUNC RUBY_ALLOC_FUNC
|
|
22
|
+
|
|
23
|
+
static VALUE r2tao_nsIORTable;
|
|
24
|
+
static VALUE r2tao_cIORTableLocator;
|
|
25
|
+
static VALUE r2tao_cIORTableNotFoundX;
|
|
26
|
+
|
|
27
|
+
static VALUE r2tao_IORTable_bind(VALUE self, VALUE obj_key, VALUE ior);
|
|
28
|
+
static VALUE r2tao_IORTable_rebind(VALUE self, VALUE obj_key, VALUE ior);
|
|
29
|
+
static VALUE r2tao_IORTable_unbind(VALUE self, VALUE obj_key);
|
|
30
|
+
static VALUE r2tao_IORTable_set_locator(VALUE self, VALUE locator);
|
|
31
|
+
|
|
32
|
+
void r2tao_init_IORTable()
|
|
33
|
+
{
|
|
34
|
+
VALUE klass;
|
|
35
|
+
|
|
36
|
+
r2tao_nsIORTable = klass = rb_eval_string("::R2CORBA::IORTable::Table");
|
|
37
|
+
|
|
38
|
+
rb_define_method(klass, "bind", RUBY_METHOD_FUNC(r2tao_IORTable_bind), 2);
|
|
39
|
+
rb_define_method(klass, "rebind", RUBY_METHOD_FUNC(r2tao_IORTable_rebind), 2);
|
|
40
|
+
rb_define_method(klass, "unbind", RUBY_METHOD_FUNC(r2tao_IORTable_unbind), 1);
|
|
41
|
+
rb_define_method(klass, "set_locator", RUBY_METHOD_FUNC(r2tao_IORTable_set_locator), 1);
|
|
42
|
+
|
|
43
|
+
r2tao_cIORTableNotFoundX = rb_eval_string("::R2CORBA::IORTable::NotFound");
|
|
44
|
+
r2tao_cIORTableLocator = rb_eval_string("::R2CORBA::IORTable::Locator");
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
//-------------------------------------------------------------------
|
|
48
|
+
// Ruby IORTable methods
|
|
49
|
+
//
|
|
50
|
+
//===================================================================
|
|
51
|
+
|
|
52
|
+
class R2taoLocator : public IORTable::Locator
|
|
53
|
+
{
|
|
54
|
+
public:
|
|
55
|
+
R2taoLocator(VALUE rbloc)
|
|
56
|
+
: IORTable::Locator(), rb_locator_(rbloc)
|
|
57
|
+
{
|
|
58
|
+
// register to prevent GC
|
|
59
|
+
r2tao_register_object (this->rb_locator_);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
~R2taoLocator()
|
|
63
|
+
{
|
|
64
|
+
// unregister to allow GC; mind GVL
|
|
65
|
+
r2tao_call_thread_safe (R2taoLocator::thread_safe_unregister, this);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
virtual char * locate (const char * object_key);
|
|
69
|
+
|
|
70
|
+
private:
|
|
71
|
+
VALUE rb_locator_;
|
|
72
|
+
|
|
73
|
+
void inner_unregister ();
|
|
74
|
+
char * inner_locate (const char * object_key);
|
|
75
|
+
|
|
76
|
+
struct ThreadSafeArg
|
|
77
|
+
{
|
|
78
|
+
ThreadSafeArg (R2taoLocator* loc,
|
|
79
|
+
const char * obj_key)
|
|
80
|
+
: locator_(loc),
|
|
81
|
+
object_key_(obj_key),
|
|
82
|
+
exception_ (false) {}
|
|
83
|
+
R2taoLocator* locator_;
|
|
84
|
+
const char * object_key_;
|
|
85
|
+
bool exception_;
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
static void* thread_safe_invoke (void * arg);
|
|
89
|
+
static void* thread_safe_unregister (void* arg);
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
void R2taoLocator::inner_unregister()
|
|
93
|
+
{
|
|
94
|
+
// unregister to allow GC
|
|
95
|
+
r2tao_unregister_object (this->rb_locator_);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// invocation helper for threadsafe calling of Ruby code
|
|
99
|
+
void* R2taoLocator::thread_safe_unregister (void * arg)
|
|
100
|
+
{
|
|
101
|
+
R2taoLocator* tloc = reinterpret_cast<R2taoLocator*> (arg);
|
|
102
|
+
|
|
103
|
+
try {
|
|
104
|
+
tloc->inner_unregister ();
|
|
105
|
+
}
|
|
106
|
+
catch (...) {
|
|
107
|
+
return ::CORBA::UNKNOWN (0, CORBA::COMPLETED_MAYBE)._tao_duplicate ();
|
|
108
|
+
}
|
|
109
|
+
return 0;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// invocation helper for threadsafe calling of Ruby code
|
|
113
|
+
void* R2taoLocator::thread_safe_invoke (void * arg)
|
|
114
|
+
{
|
|
115
|
+
ThreadSafeArg* tca = reinterpret_cast<ThreadSafeArg*> (arg);
|
|
116
|
+
|
|
117
|
+
try {
|
|
118
|
+
return tca->locator_->inner_locate (tca->object_key_);
|
|
119
|
+
}
|
|
120
|
+
catch (const CORBA::SystemException& ex) {
|
|
121
|
+
tca->exception_ = true;
|
|
122
|
+
return ex._tao_duplicate ();
|
|
123
|
+
}
|
|
124
|
+
catch (...) {
|
|
125
|
+
tca->exception_ = true;
|
|
126
|
+
return ::CORBA::UNKNOWN (0, CORBA::COMPLETED_MAYBE)._tao_duplicate ();
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
char* R2taoLocator::locate (const char * object_key)
|
|
131
|
+
{
|
|
132
|
+
ThreadSafeArg tca_(this, object_key);
|
|
133
|
+
|
|
134
|
+
void* rc = r2tao_call_thread_safe (R2taoLocator::thread_safe_invoke, &tca_);
|
|
135
|
+
if (tca_.exception_)
|
|
136
|
+
{
|
|
137
|
+
CORBA::SystemException* exc = reinterpret_cast<CORBA::SystemException*> (rc);
|
|
138
|
+
ACE_Auto_Basic_Ptr<CORBA::SystemException> e_ptr(exc);
|
|
139
|
+
exc->_raise ();
|
|
140
|
+
return 0;
|
|
141
|
+
}
|
|
142
|
+
else
|
|
143
|
+
{
|
|
144
|
+
return reinterpret_cast<char*> (rc);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
char* R2taoLocator::inner_locate (const char * object_key)
|
|
149
|
+
{
|
|
150
|
+
static R2TAO_RBFuncall FN_locate ("locate", false);
|
|
151
|
+
|
|
152
|
+
// invoke locator implementation
|
|
153
|
+
VALUE rargs = rb_ary_new2 (1);
|
|
154
|
+
rb_ary_push (rargs, object_key ? rb_str_new2 (object_key) : Qnil);
|
|
155
|
+
VALUE ior = FN_locate.invoke (this->rb_locator_, rargs);
|
|
156
|
+
if (FN_locate.has_caught_exception ())
|
|
157
|
+
{
|
|
158
|
+
// handle exception
|
|
159
|
+
VALUE rexc = rb_gv_get ("$!");
|
|
160
|
+
if (rb_obj_is_kind_of(rexc, r2tao_cIORTableNotFoundX) == Qtrue)
|
|
161
|
+
{
|
|
162
|
+
throw ::IORTable::NotFound();
|
|
163
|
+
}
|
|
164
|
+
else if(rb_obj_is_kind_of(rexc, r2tao_cSystemException) == Qtrue)
|
|
165
|
+
{
|
|
166
|
+
VALUE rid = rb_funcall (rexc, rb_intern ("_interface_repository_id"), 0);
|
|
167
|
+
CORBA::SystemException* _exc = TAO::create_system_exception (RSTRING_PTR(rid));
|
|
168
|
+
|
|
169
|
+
_exc->minor (
|
|
170
|
+
static_cast<CORBA::ULong> (NUM2ULONG (rb_iv_get (rexc, "@minor"))));
|
|
171
|
+
_exc->completed (
|
|
172
|
+
static_cast<CORBA::CompletionStatus> (NUM2ULONG (rb_iv_get (rexc, "@completed"))));
|
|
173
|
+
|
|
174
|
+
ACE_Auto_Basic_Ptr<CORBA::SystemException> e_ptr(_exc);
|
|
175
|
+
_exc->_raise ();
|
|
176
|
+
}
|
|
177
|
+
else
|
|
178
|
+
{
|
|
179
|
+
rb_eval_string ("STDERR.puts $!.to_s+\"\\n\"+$!.backtrace.join(\"\\n\")");
|
|
180
|
+
throw ::CORBA::UNKNOWN (0, CORBA::COMPLETED_MAYBE);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
if (rb_type (ior) != T_STRING)
|
|
185
|
+
{
|
|
186
|
+
throw CORBA::BAD_PARAM(0, CORBA::COMPLETED_NO);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
return CORBA::string_dup (RSTRING_PTR (ior));
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
IORTable::Table_ptr r2tao_IORTable_r2t(VALUE obj)
|
|
193
|
+
{
|
|
194
|
+
CORBA::Object_ptr _obj = r2corba_Object_r2t (obj);
|
|
195
|
+
return IORTable::Table::_narrow (_obj);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
VALUE r2tao_IORTable_bind(VALUE self, VALUE obj_key, VALUE ior)
|
|
199
|
+
{
|
|
200
|
+
obj_key = rb_check_convert_type (obj_key, T_STRING, "String", "to_s");
|
|
201
|
+
ior = rb_check_convert_type (ior, T_STRING, "String", "to_s");
|
|
202
|
+
R2TAO_TRY
|
|
203
|
+
{
|
|
204
|
+
IORTable::Table_var _iortbl = r2tao_IORTable_r2t (self);
|
|
205
|
+
_iortbl->bind (RSTRING_PTR (obj_key), RSTRING_PTR (ior));
|
|
206
|
+
}
|
|
207
|
+
R2TAO_CATCH;
|
|
208
|
+
return Qnil;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
VALUE r2tao_IORTable_rebind(VALUE self, VALUE obj_key, VALUE ior)
|
|
212
|
+
{
|
|
213
|
+
obj_key = rb_check_convert_type (obj_key, T_STRING, "String", "to_s");
|
|
214
|
+
ior = rb_check_convert_type (ior, T_STRING, "String", "to_s");
|
|
215
|
+
R2TAO_TRY
|
|
216
|
+
{
|
|
217
|
+
IORTable::Table_var _iortbl = r2tao_IORTable_r2t (self);
|
|
218
|
+
_iortbl->rebind (RSTRING_PTR (obj_key), RSTRING_PTR (ior));
|
|
219
|
+
}
|
|
220
|
+
R2TAO_CATCH;
|
|
221
|
+
return Qnil;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
VALUE r2tao_IORTable_unbind(VALUE self, VALUE obj_key)
|
|
225
|
+
{
|
|
226
|
+
obj_key = rb_check_convert_type (obj_key, T_STRING, "String", "to_s");
|
|
227
|
+
R2TAO_TRY
|
|
228
|
+
{
|
|
229
|
+
IORTable::Table_var _iortbl = r2tao_IORTable_r2t (self);
|
|
230
|
+
_iortbl->unbind (RSTRING_PTR (obj_key));
|
|
231
|
+
}
|
|
232
|
+
R2TAO_CATCH;
|
|
233
|
+
return Qnil;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
VALUE r2tao_IORTable_set_locator(VALUE self, VALUE locator)
|
|
237
|
+
{
|
|
238
|
+
r2tao_check_type (locator, r2tao_cIORTableLocator);
|
|
239
|
+
|
|
240
|
+
R2TAO_TRY
|
|
241
|
+
{
|
|
242
|
+
IORTable::Table_var _iortbl = r2tao_IORTable_r2t (self);
|
|
243
|
+
|
|
244
|
+
IORTable::Locator_var _locvar = new R2taoLocator(locator);
|
|
245
|
+
|
|
246
|
+
_iortbl->set_locator (_locvar.in ());
|
|
247
|
+
}
|
|
248
|
+
R2TAO_CATCH;
|
|
249
|
+
return Qnil;
|
|
250
|
+
}
|