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,2938 @@
|
|
|
1
|
+
/*--------------------------------------------------------------------
|
|
2
|
+
# values.cpp - 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 "required.h"
|
|
15
|
+
#include "exception.h"
|
|
16
|
+
#include "object.h"
|
|
17
|
+
#include "typecode.h"
|
|
18
|
+
#include "longdouble.h"
|
|
19
|
+
#include "values.h"
|
|
20
|
+
#include "tao/CDR.h"
|
|
21
|
+
#include "tao/ORB_Core.h"
|
|
22
|
+
#include "tao/DynamicAny/DynamicAny.h"
|
|
23
|
+
|
|
24
|
+
#define RUBY_INVOKE_FUNC RUBY_ALLOC_FUNC
|
|
25
|
+
|
|
26
|
+
static ID ci_ivar_ID;
|
|
27
|
+
static ID val_ivar_ID;
|
|
28
|
+
|
|
29
|
+
static VALUE r2tao_nsValueBase;
|
|
30
|
+
static VALUE r2tao_nsInputStream;
|
|
31
|
+
static VALUE r2tao_nsOutputStream;
|
|
32
|
+
static VALUE r2tao_cInputStream;
|
|
33
|
+
static VALUE r2tao_cOutputStream;
|
|
34
|
+
|
|
35
|
+
VALUE r2tao_cValueFactoryBase = 0;
|
|
36
|
+
VALUE r2tao_cBoxedValueBase = 0;
|
|
37
|
+
|
|
38
|
+
// Ruby ValueBase methods
|
|
39
|
+
VALUE r2tao_Value_pre_marshal(VALUE self, VALUE strm);
|
|
40
|
+
VALUE r2tao_Value_post_marshal(VALUE self, VALUE strm);
|
|
41
|
+
VALUE r2tao_Value_pre_unmarshal(VALUE self, VALUE strm);
|
|
42
|
+
VALUE r2tao_Value_post_unmarshal(VALUE self, VALUE strm);
|
|
43
|
+
|
|
44
|
+
// Ruby Stream methods
|
|
45
|
+
static VALUE r2tao_InputStream_t2r(TAO_InputCDR* strm);
|
|
46
|
+
static VALUE r2tao_OutputStream_t2r(R2TAO_Value* val);
|
|
47
|
+
static TAO_InputCDR* r2tao_InputStream_r2t(VALUE strm);
|
|
48
|
+
static R2TAO_Value* r2tao_OutputStream_r2t(VALUE strm);
|
|
49
|
+
|
|
50
|
+
VALUE r2tao_OStream_write_any (VALUE self, VALUE rval);
|
|
51
|
+
VALUE r2tao_OStream_write_boolean (VALUE self, VALUE rval);
|
|
52
|
+
VALUE r2tao_OStream_write_char (VALUE self, VALUE rval);
|
|
53
|
+
VALUE r2tao_OStream_write_wchar (VALUE self, VALUE rval);
|
|
54
|
+
VALUE r2tao_OStream_write_octet (VALUE self, VALUE rval);
|
|
55
|
+
VALUE r2tao_OStream_write_short (VALUE self, VALUE rval);
|
|
56
|
+
VALUE r2tao_OStream_write_ushort (VALUE self, VALUE rval);
|
|
57
|
+
VALUE r2tao_OStream_write_long (VALUE self, VALUE rval);
|
|
58
|
+
VALUE r2tao_OStream_write_ulong (VALUE self, VALUE rval);
|
|
59
|
+
VALUE r2tao_OStream_write_longlong (VALUE self, VALUE rval);
|
|
60
|
+
VALUE r2tao_OStream_write_ulonglong (VALUE self, VALUE rval);
|
|
61
|
+
VALUE r2tao_OStream_write_float (VALUE self, VALUE rval);
|
|
62
|
+
VALUE r2tao_OStream_write_double (VALUE self, VALUE rval);
|
|
63
|
+
VALUE r2tao_OStream_write_longdouble (VALUE self, VALUE rval);
|
|
64
|
+
VALUE r2tao_OStream_write_Object (VALUE self, VALUE rval);
|
|
65
|
+
VALUE r2tao_OStream_write_Abstract (VALUE self, VALUE rval);
|
|
66
|
+
VALUE r2tao_OStream_write_Value (VALUE self, VALUE rval);
|
|
67
|
+
VALUE r2tao_OStream_write_TypeCode (VALUE self, VALUE rval);
|
|
68
|
+
VALUE r2tao_OStream_write_fixed (VALUE self, VALUE rval);
|
|
69
|
+
|
|
70
|
+
VALUE r2tao_OStream_write_string (VALUE self, VALUE rval);
|
|
71
|
+
VALUE r2tao_OStream_write_wstring (VALUE self, VALUE rval);
|
|
72
|
+
|
|
73
|
+
VALUE r2tao_OStream_write_any_array (VALUE self, VALUE rval, VALUE offset, VALUE length);
|
|
74
|
+
VALUE r2tao_OStream_write_boolean_array (VALUE self, VALUE rval, VALUE offset, VALUE length);
|
|
75
|
+
VALUE r2tao_OStream_write_char_array (VALUE self, VALUE rval, VALUE offset, VALUE length);
|
|
76
|
+
VALUE r2tao_OStream_write_wchar_array (VALUE self, VALUE rval, VALUE offset, VALUE length);
|
|
77
|
+
VALUE r2tao_OStream_write_octet_array (VALUE self, VALUE rval, VALUE offset, VALUE length);
|
|
78
|
+
VALUE r2tao_OStream_write_short_array (VALUE self, VALUE rval, VALUE offset, VALUE length);
|
|
79
|
+
VALUE r2tao_OStream_write_ushort_array (VALUE self, VALUE rval, VALUE offset, VALUE length);
|
|
80
|
+
VALUE r2tao_OStream_write_long_array (VALUE self, VALUE rval, VALUE offset, VALUE length);
|
|
81
|
+
VALUE r2tao_OStream_write_ulong_array (VALUE self, VALUE rval, VALUE offset, VALUE length);
|
|
82
|
+
VALUE r2tao_OStream_write_longlong_array (VALUE self, VALUE rval, VALUE offset, VALUE length);
|
|
83
|
+
VALUE r2tao_OStream_write_ulonglong_array (VALUE self, VALUE rval, VALUE offset, VALUE length);
|
|
84
|
+
VALUE r2tao_OStream_write_float_array (VALUE self, VALUE rval, VALUE offset, VALUE length);
|
|
85
|
+
VALUE r2tao_OStream_write_double_array (VALUE self, VALUE rval, VALUE offset, VALUE length);
|
|
86
|
+
VALUE r2tao_OStream_write_longdouble_array (VALUE self, VALUE rval, VALUE offset, VALUE length);
|
|
87
|
+
VALUE r2tao_OStream_write_fixed_array (VALUE self, VALUE rval, VALUE offset, VALUE length);
|
|
88
|
+
|
|
89
|
+
VALUE r2tao_OStream_write_construct (VALUE self, VALUE rval, VALUE rtc);
|
|
90
|
+
|
|
91
|
+
VALUE r2tao_IStream_read_any (VALUE self);
|
|
92
|
+
VALUE r2tao_IStream_read_boolean (VALUE self);
|
|
93
|
+
VALUE r2tao_IStream_read_char (VALUE self);
|
|
94
|
+
VALUE r2tao_IStream_read_wchar (VALUE self);
|
|
95
|
+
VALUE r2tao_IStream_read_octet (VALUE self);
|
|
96
|
+
VALUE r2tao_IStream_read_short (VALUE self);
|
|
97
|
+
VALUE r2tao_IStream_read_ushort (VALUE self);
|
|
98
|
+
VALUE r2tao_IStream_read_long (VALUE self);
|
|
99
|
+
VALUE r2tao_IStream_read_ulong (VALUE self);
|
|
100
|
+
VALUE r2tao_IStream_read_longlong (VALUE self);
|
|
101
|
+
VALUE r2tao_IStream_read_ulonglong (VALUE self);
|
|
102
|
+
VALUE r2tao_IStream_read_float (VALUE self);
|
|
103
|
+
VALUE r2tao_IStream_read_double (VALUE self);
|
|
104
|
+
VALUE r2tao_IStream_read_longdouble (VALUE self);
|
|
105
|
+
VALUE r2tao_IStream_read_Object (VALUE self);
|
|
106
|
+
VALUE r2tao_IStream_read_Abstract (VALUE self);
|
|
107
|
+
VALUE r2tao_IStream_read_Value (VALUE self);
|
|
108
|
+
VALUE r2tao_IStream_read_TypeCode (VALUE self);
|
|
109
|
+
VALUE r2tao_IStream_read_fixed (VALUE self);
|
|
110
|
+
|
|
111
|
+
VALUE r2tao_IStream_read_string (VALUE self);
|
|
112
|
+
VALUE r2tao_IStream_read_wstring (VALUE self);
|
|
113
|
+
|
|
114
|
+
VALUE r2tao_IStream_read_any_array (VALUE self, VALUE rval, VALUE offset, VALUE length);
|
|
115
|
+
VALUE r2tao_IStream_read_boolean_array (VALUE self, VALUE rval, VALUE offset, VALUE length);
|
|
116
|
+
VALUE r2tao_IStream_read_char_array (VALUE self, VALUE rval, VALUE offset, VALUE length);
|
|
117
|
+
VALUE r2tao_IStream_read_wchar_array (VALUE self, VALUE rval, VALUE offset, VALUE length);
|
|
118
|
+
VALUE r2tao_IStream_read_octet_array (VALUE self, VALUE rval, VALUE offset, VALUE length);
|
|
119
|
+
VALUE r2tao_IStream_read_short_array (VALUE self, VALUE rval, VALUE offset, VALUE length);
|
|
120
|
+
VALUE r2tao_IStream_read_ushort_array (VALUE self, VALUE rval, VALUE offset, VALUE length);
|
|
121
|
+
VALUE r2tao_IStream_read_long_array (VALUE self, VALUE rval, VALUE offset, VALUE length);
|
|
122
|
+
VALUE r2tao_IStream_read_ulong_array (VALUE self, VALUE rval, VALUE offset, VALUE length);
|
|
123
|
+
VALUE r2tao_IStream_read_longlong_array (VALUE self, VALUE rval, VALUE offset, VALUE length);
|
|
124
|
+
VALUE r2tao_IStream_read_ulonglong_array (VALUE self, VALUE rval, VALUE offset, VALUE length);
|
|
125
|
+
VALUE r2tao_IStream_read_float_array (VALUE self, VALUE rval, VALUE offset, VALUE length);
|
|
126
|
+
VALUE r2tao_IStream_read_double_array (VALUE self, VALUE rval, VALUE offset, VALUE length);
|
|
127
|
+
VALUE r2tao_IStream_read_longdouble_array (VALUE self, VALUE rval, VALUE offset, VALUE length);
|
|
128
|
+
VALUE r2tao_IStream_read_fixed_array (VALUE self, VALUE rval, VALUE offset, VALUE length);
|
|
129
|
+
|
|
130
|
+
VALUE r2tao_IStream_read_construct (VALUE self, VALUE rtc);
|
|
131
|
+
|
|
132
|
+
VALUE r2tao_VFB_register_value_factory(VALUE self, VALUE id, VALUE rfact);
|
|
133
|
+
VALUE r2tao_VFB_unregister_value_factory(VALUE self, VALUE id);
|
|
134
|
+
VALUE r2tao_VFB_lookup_value_factory(VALUE self, VALUE id);
|
|
135
|
+
|
|
136
|
+
void r2tao_init_Values()
|
|
137
|
+
{
|
|
138
|
+
VALUE k;
|
|
139
|
+
|
|
140
|
+
ci_ivar_ID = rb_intern ("@__ci_holder_");
|
|
141
|
+
val_ivar_ID = rb_intern ("@__native_value_");
|
|
142
|
+
|
|
143
|
+
/*
|
|
144
|
+
* Define Portable stream modules
|
|
145
|
+
*/
|
|
146
|
+
k = rb_eval_string ("R2CORBA::CORBA::Portable");
|
|
147
|
+
r2tao_nsInputStream = rb_define_module_under(k, "InputStream");
|
|
148
|
+
r2tao_nsOutputStream = rb_define_module_under(k, "OutputStream");
|
|
149
|
+
|
|
150
|
+
/*
|
|
151
|
+
* Define single instance writers
|
|
152
|
+
*/
|
|
153
|
+
#define R2TAO_DEFMETHOD(type) \
|
|
154
|
+
rb_define_method (r2tao_nsOutputStream, "write_" #type, RUBY_METHOD_FUNC (r2tao_OStream_write_ ## type), 1)
|
|
155
|
+
|
|
156
|
+
R2TAO_DEFMETHOD (any);
|
|
157
|
+
R2TAO_DEFMETHOD (boolean);
|
|
158
|
+
R2TAO_DEFMETHOD (char);
|
|
159
|
+
R2TAO_DEFMETHOD (wchar);
|
|
160
|
+
R2TAO_DEFMETHOD (octet);
|
|
161
|
+
R2TAO_DEFMETHOD (short);
|
|
162
|
+
R2TAO_DEFMETHOD (ushort);
|
|
163
|
+
R2TAO_DEFMETHOD (long);
|
|
164
|
+
R2TAO_DEFMETHOD (ulong);
|
|
165
|
+
R2TAO_DEFMETHOD (longlong);
|
|
166
|
+
R2TAO_DEFMETHOD (ulonglong);
|
|
167
|
+
R2TAO_DEFMETHOD (float);
|
|
168
|
+
R2TAO_DEFMETHOD (double);
|
|
169
|
+
R2TAO_DEFMETHOD (longdouble);
|
|
170
|
+
R2TAO_DEFMETHOD (Object);
|
|
171
|
+
R2TAO_DEFMETHOD (Abstract);
|
|
172
|
+
R2TAO_DEFMETHOD (Value);
|
|
173
|
+
R2TAO_DEFMETHOD (TypeCode);
|
|
174
|
+
R2TAO_DEFMETHOD (fixed);
|
|
175
|
+
R2TAO_DEFMETHOD (string);
|
|
176
|
+
R2TAO_DEFMETHOD (wstring);
|
|
177
|
+
|
|
178
|
+
/*
|
|
179
|
+
* Define array writers
|
|
180
|
+
*/
|
|
181
|
+
#undef R2TAO_DEFMETHOD
|
|
182
|
+
#define R2TAO_DEFMETHOD(type) \
|
|
183
|
+
rb_define_method (r2tao_nsOutputStream, "write_" #type "_array", RUBY_METHOD_FUNC (r2tao_OStream_write_ ## type ## _array), 3)
|
|
184
|
+
|
|
185
|
+
R2TAO_DEFMETHOD (any);
|
|
186
|
+
R2TAO_DEFMETHOD (boolean);
|
|
187
|
+
R2TAO_DEFMETHOD (char);
|
|
188
|
+
R2TAO_DEFMETHOD (wchar);
|
|
189
|
+
R2TAO_DEFMETHOD (octet);
|
|
190
|
+
R2TAO_DEFMETHOD (short);
|
|
191
|
+
R2TAO_DEFMETHOD (ushort);
|
|
192
|
+
R2TAO_DEFMETHOD (long);
|
|
193
|
+
R2TAO_DEFMETHOD (ulong);
|
|
194
|
+
R2TAO_DEFMETHOD (longlong);
|
|
195
|
+
R2TAO_DEFMETHOD (ulonglong);
|
|
196
|
+
R2TAO_DEFMETHOD (float);
|
|
197
|
+
R2TAO_DEFMETHOD (double);
|
|
198
|
+
R2TAO_DEFMETHOD (longdouble);
|
|
199
|
+
R2TAO_DEFMETHOD (fixed);
|
|
200
|
+
|
|
201
|
+
/*
|
|
202
|
+
* Define construct writer
|
|
203
|
+
*/
|
|
204
|
+
rb_define_method (r2tao_nsOutputStream, "write_construct", RUBY_METHOD_FUNC (r2tao_OStream_write_construct), 2);
|
|
205
|
+
|
|
206
|
+
/*
|
|
207
|
+
* Define single instance readers
|
|
208
|
+
*/
|
|
209
|
+
#undef R2TAO_DEFMETHOD
|
|
210
|
+
#define R2TAO_DEFMETHOD(type) \
|
|
211
|
+
rb_define_method (r2tao_nsInputStream, "read_" #type, RUBY_METHOD_FUNC (r2tao_IStream_read_ ## type), 0)
|
|
212
|
+
|
|
213
|
+
R2TAO_DEFMETHOD (any);
|
|
214
|
+
R2TAO_DEFMETHOD (boolean);
|
|
215
|
+
R2TAO_DEFMETHOD (char);
|
|
216
|
+
R2TAO_DEFMETHOD (wchar);
|
|
217
|
+
R2TAO_DEFMETHOD (octet);
|
|
218
|
+
R2TAO_DEFMETHOD (short);
|
|
219
|
+
R2TAO_DEFMETHOD (ushort);
|
|
220
|
+
R2TAO_DEFMETHOD (long);
|
|
221
|
+
R2TAO_DEFMETHOD (ulong);
|
|
222
|
+
R2TAO_DEFMETHOD (longlong);
|
|
223
|
+
R2TAO_DEFMETHOD (ulonglong);
|
|
224
|
+
R2TAO_DEFMETHOD (float);
|
|
225
|
+
R2TAO_DEFMETHOD (double);
|
|
226
|
+
R2TAO_DEFMETHOD (longdouble);
|
|
227
|
+
R2TAO_DEFMETHOD (Object);
|
|
228
|
+
R2TAO_DEFMETHOD (Abstract);
|
|
229
|
+
R2TAO_DEFMETHOD (Value);
|
|
230
|
+
R2TAO_DEFMETHOD (TypeCode);
|
|
231
|
+
R2TAO_DEFMETHOD (fixed);
|
|
232
|
+
R2TAO_DEFMETHOD (string);
|
|
233
|
+
R2TAO_DEFMETHOD (wstring);
|
|
234
|
+
|
|
235
|
+
/*
|
|
236
|
+
* Define array readers
|
|
237
|
+
*/
|
|
238
|
+
#undef R2TAO_DEFMETHOD
|
|
239
|
+
#define R2TAO_DEFMETHOD(type) \
|
|
240
|
+
rb_define_method (r2tao_nsInputStream, "read_" #type "_array", RUBY_METHOD_FUNC (r2tao_IStream_read_ ## type ## _array), 3)
|
|
241
|
+
|
|
242
|
+
R2TAO_DEFMETHOD (any);
|
|
243
|
+
R2TAO_DEFMETHOD (boolean);
|
|
244
|
+
R2TAO_DEFMETHOD (char);
|
|
245
|
+
R2TAO_DEFMETHOD (wchar);
|
|
246
|
+
R2TAO_DEFMETHOD (octet);
|
|
247
|
+
R2TAO_DEFMETHOD (short);
|
|
248
|
+
R2TAO_DEFMETHOD (ushort);
|
|
249
|
+
R2TAO_DEFMETHOD (long);
|
|
250
|
+
R2TAO_DEFMETHOD (ulong);
|
|
251
|
+
R2TAO_DEFMETHOD (longlong);
|
|
252
|
+
R2TAO_DEFMETHOD (ulonglong);
|
|
253
|
+
R2TAO_DEFMETHOD (float);
|
|
254
|
+
R2TAO_DEFMETHOD (double);
|
|
255
|
+
R2TAO_DEFMETHOD (longdouble);
|
|
256
|
+
R2TAO_DEFMETHOD (fixed);
|
|
257
|
+
|
|
258
|
+
/*
|
|
259
|
+
* Define construct reader
|
|
260
|
+
*/
|
|
261
|
+
rb_define_method (r2tao_nsInputStream, "read_construct", RUBY_METHOD_FUNC (r2tao_IStream_read_construct), 1);
|
|
262
|
+
|
|
263
|
+
/*
|
|
264
|
+
* Create anonymous classes to wrap native streams;
|
|
265
|
+
* include Portable stream modules to provide wrapper methods
|
|
266
|
+
*/
|
|
267
|
+
r2tao_cInputStream = rb_class_new (rb_cObject);
|
|
268
|
+
rb_global_variable (&r2tao_cInputStream); // pin it down so GC doesn't get it
|
|
269
|
+
rb_include_module (r2tao_cInputStream, r2tao_nsInputStream);
|
|
270
|
+
r2tao_cOutputStream = rb_class_new (rb_cObject);
|
|
271
|
+
rb_global_variable (&r2tao_cOutputStream); // pin it down so GC doesn't get it
|
|
272
|
+
rb_include_module (r2tao_cOutputStream, r2tao_nsOutputStream);
|
|
273
|
+
|
|
274
|
+
/*
|
|
275
|
+
* Define marshaling hooks for ValueBase
|
|
276
|
+
*/
|
|
277
|
+
r2tao_nsValueBase = k = rb_eval_string ("R2CORBA::CORBA::ValueBase");
|
|
278
|
+
rb_define_protected_method(k, "pre_marshal", RUBY_METHOD_FUNC(r2tao_Value_pre_marshal), 1);
|
|
279
|
+
rb_define_protected_method(k, "post_marshal", RUBY_METHOD_FUNC(r2tao_Value_post_marshal), 1);
|
|
280
|
+
rb_define_protected_method(k, "pre_unmarshal", RUBY_METHOD_FUNC(r2tao_Value_pre_unmarshal), 1);
|
|
281
|
+
rb_define_protected_method(k, "post_unmarshal", RUBY_METHOD_FUNC(r2tao_Value_post_unmarshal), 1);
|
|
282
|
+
|
|
283
|
+
r2tao_cValueFactoryBase = k = rb_eval_string ("R2CORBA::CORBA::Portable::ValueFactoryBase");
|
|
284
|
+
|
|
285
|
+
rb_define_singleton_method(k, "_register_value_factory", RUBY_METHOD_FUNC(r2tao_VFB_register_value_factory), 2);
|
|
286
|
+
rb_define_singleton_method(k, "_unregister_value_factory", RUBY_METHOD_FUNC(r2tao_VFB_unregister_value_factory), 1);
|
|
287
|
+
rb_define_singleton_method(k, "_lookup_value_factory", RUBY_METHOD_FUNC(r2tao_VFB_lookup_value_factory), 1);
|
|
288
|
+
|
|
289
|
+
r2tao_cBoxedValueBase = rb_eval_string ("R2CORBA::CORBA::Portable::BoxedValueBase");
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
//-------------------------------------------------------------------
|
|
293
|
+
// R2TAO_ArrayAny_Impl_T template class
|
|
294
|
+
//
|
|
295
|
+
//===================================================================
|
|
296
|
+
|
|
297
|
+
template<typename T>
|
|
298
|
+
R2TAO_ArrayAny_Impl_T<T>::R2TAO_ArrayAny_Impl_T (CORBA::TypeCode_ptr tc,
|
|
299
|
+
T * const val,
|
|
300
|
+
CORBA::ULong len)
|
|
301
|
+
: TAO::Any_Impl (0, CORBA::TypeCode::_duplicate (tc)),
|
|
302
|
+
value_ (val),
|
|
303
|
+
length_ (len)
|
|
304
|
+
{
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
template<typename T>
|
|
308
|
+
R2TAO_ArrayAny_Impl_T<T>::~R2TAO_ArrayAny_Impl_T (void)
|
|
309
|
+
{
|
|
310
|
+
this->free_value ();
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
template<typename T>
|
|
314
|
+
void R2TAO_ArrayAny_Impl_T<T>::insert (CORBA::Any &any,
|
|
315
|
+
CORBA::TypeCode_ptr tc,
|
|
316
|
+
T * const val,
|
|
317
|
+
CORBA::ULong len)
|
|
318
|
+
{
|
|
319
|
+
R2TAO_ArrayAny_Impl_T<T> *new_impl = 0;
|
|
320
|
+
ACE_NEW (new_impl,
|
|
321
|
+
R2TAO_ArrayAny_Impl_T<T> (tc,
|
|
322
|
+
val,
|
|
323
|
+
len));
|
|
324
|
+
any.replace (new_impl);
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
template<typename T>
|
|
328
|
+
CORBA::Boolean R2TAO_ArrayAny_Impl_T<T>::marshal_value (TAO_OutputCDR &cdr)
|
|
329
|
+
{
|
|
330
|
+
switch (this->type_->kind ())
|
|
331
|
+
{
|
|
332
|
+
case CORBA::tk_short:
|
|
333
|
+
case CORBA::tk_ushort:
|
|
334
|
+
case CORBA::tk_long:
|
|
335
|
+
case CORBA::tk_ulong:
|
|
336
|
+
case CORBA::tk_float:
|
|
337
|
+
case CORBA::tk_double:
|
|
338
|
+
case CORBA::tk_longlong:
|
|
339
|
+
case CORBA::tk_ulonglong:
|
|
340
|
+
case CORBA::tk_longdouble:
|
|
341
|
+
case CORBA::tk_any:
|
|
342
|
+
{
|
|
343
|
+
for (CORBA::ULong i=0; i<this->length_ ;++i)
|
|
344
|
+
{
|
|
345
|
+
cdr << (reinterpret_cast<T*> (this->value_))[i];
|
|
346
|
+
}
|
|
347
|
+
return true;
|
|
348
|
+
}
|
|
349
|
+
default:
|
|
350
|
+
return false;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
template<>
|
|
355
|
+
CORBA::Boolean R2TAO_ArrayAny_Impl_T<CORBA::Boolean>::marshal_value (TAO_OutputCDR &cdr)
|
|
356
|
+
{
|
|
357
|
+
for (CORBA::ULong i=0; i<this->length_ ;++i)
|
|
358
|
+
{
|
|
359
|
+
cdr << ACE_OutputCDR::from_boolean ((reinterpret_cast<CORBA::Boolean*> (this->value_))[i]);
|
|
360
|
+
}
|
|
361
|
+
return true;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
template<>
|
|
365
|
+
CORBA::Boolean R2TAO_ArrayAny_Impl_T<CORBA::Char>::marshal_value (TAO_OutputCDR &cdr)
|
|
366
|
+
{
|
|
367
|
+
for (CORBA::ULong i=0; i<this->length_ ;++i)
|
|
368
|
+
{
|
|
369
|
+
cdr << ACE_OutputCDR::from_char ((reinterpret_cast<CORBA::Char*> (this->value_))[i]);
|
|
370
|
+
}
|
|
371
|
+
return true;
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
template<>
|
|
375
|
+
CORBA::Boolean R2TAO_ArrayAny_Impl_T<CORBA::WChar>::marshal_value (TAO_OutputCDR &cdr)
|
|
376
|
+
{
|
|
377
|
+
for (CORBA::ULong i=0; i<this->length_ ;++i)
|
|
378
|
+
{
|
|
379
|
+
cdr << ACE_OutputCDR::from_wchar ((reinterpret_cast<CORBA::WChar*> (this->value_))[i]);
|
|
380
|
+
}
|
|
381
|
+
return true;
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
template<>
|
|
385
|
+
CORBA::Boolean R2TAO_ArrayAny_Impl_T<CORBA::Octet>::marshal_value (TAO_OutputCDR &cdr)
|
|
386
|
+
{
|
|
387
|
+
for (CORBA::ULong i=0; i<this->length_ ;++i)
|
|
388
|
+
{
|
|
389
|
+
cdr << ACE_OutputCDR::from_octet ((reinterpret_cast<CORBA::Octet*> (this->value_))[i]);
|
|
390
|
+
}
|
|
391
|
+
return true;
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
template<typename T>
|
|
395
|
+
const void *R2TAO_ArrayAny_Impl_T<T>::value (void) const
|
|
396
|
+
{
|
|
397
|
+
return this->value_;
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
template<typename T>
|
|
401
|
+
void R2TAO_ArrayAny_Impl_T<T>::free_value (void)
|
|
402
|
+
{
|
|
403
|
+
if (this->value_ != 0)
|
|
404
|
+
{
|
|
405
|
+
delete [] reinterpret_cast<T*> (this->value_);
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
::CORBA::release (this->type_);
|
|
409
|
+
this->value_ = 0;
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
//-------------------------------------------------------------------
|
|
413
|
+
// R2TAO Value class
|
|
414
|
+
//
|
|
415
|
+
//===================================================================
|
|
416
|
+
|
|
417
|
+
R2TAO_Value::R2TAO_Value (VALUE rbValue, bool for_unmarshal)
|
|
418
|
+
: for_unmarshal_ (for_unmarshal),
|
|
419
|
+
started_chunk_unmarshal_ (false),
|
|
420
|
+
requires_truncation_ (false),
|
|
421
|
+
rbValue_ (rbValue),
|
|
422
|
+
rbValueClass_ (Qnil),
|
|
423
|
+
rbCIHolder_ (Qnil),
|
|
424
|
+
last_chunk_ (0)
|
|
425
|
+
{
|
|
426
|
+
init ();
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
R2TAO_Value::~R2TAO_Value ()
|
|
430
|
+
{
|
|
431
|
+
if (TAO_debug_level > 9)
|
|
432
|
+
ACE_DEBUG ((LM_INFO, "R2TAO (%P|%t) - R2TAO_Value::dtor "
|
|
433
|
+
"destroying Value wrapper %@ for %C\n",
|
|
434
|
+
this, this->val_tc_->id ()));
|
|
435
|
+
// reset value reference
|
|
436
|
+
rb_ivar_set (this->rbValue_, val_ivar_ID, Qnil);
|
|
437
|
+
// free Ruby value for gc collection
|
|
438
|
+
r2tao_unregister_object (this->rbValue_);
|
|
439
|
+
this->rbValue_ = Qnil;
|
|
440
|
+
this->rbCIHolder_ = Qnil;
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
CORBA::ValueBase* R2TAO_Value::_copy_value (void)
|
|
444
|
+
{
|
|
445
|
+
return 0; // noop
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
void R2TAO_Value::init ()
|
|
449
|
+
{
|
|
450
|
+
static ID tc_ID = rb_intern ("_tc");
|
|
451
|
+
static R2TAO_RBFuncall FN_marshal ("do_marshal", false);
|
|
452
|
+
|
|
453
|
+
// mark Ruby value to prevent gc collection
|
|
454
|
+
r2tao_register_object (this->rbValue_);
|
|
455
|
+
|
|
456
|
+
this->rbValueClass_ = rb_class_of(this->rbValue_);
|
|
457
|
+
VALUE rtc = rb_funcall (this->rbValueClass_, tc_ID, 0);
|
|
458
|
+
this->val_tc_ = CORBA::TypeCode::_duplicate (r2corba_TypeCode_r2t (rtc));
|
|
459
|
+
|
|
460
|
+
// determin if this is a truncatable value type
|
|
461
|
+
if (this->val_tc_->kind () == CORBA::tk_value)
|
|
462
|
+
this->is_truncatable_ = (CORBA::VM_TRUNCATABLE == this->val_tc_->type_modifier ());
|
|
463
|
+
else
|
|
464
|
+
this->is_truncatable_ = false; // value box
|
|
465
|
+
|
|
466
|
+
// create special wrapper object to hold this value reference
|
|
467
|
+
VALUE valref = Data_Wrap_Struct (rb_cObject, 0, 0, this);
|
|
468
|
+
|
|
469
|
+
// create an instance variable to value reference
|
|
470
|
+
rb_ivar_set (this->rbValue_, val_ivar_ID, valref);
|
|
471
|
+
|
|
472
|
+
if (this->for_unmarshal_)
|
|
473
|
+
{
|
|
474
|
+
// create special wrapper object to hold chunk info
|
|
475
|
+
this->rbCIHolder_ = Data_Wrap_Struct (rb_cObject, 0, 0, 0);
|
|
476
|
+
|
|
477
|
+
// create an instance variable to hold chunk info while (de)marshaling
|
|
478
|
+
rb_ivar_set (this->rbValue_, ci_ivar_ID, this->rbCIHolder_);
|
|
479
|
+
}
|
|
480
|
+
else
|
|
481
|
+
{
|
|
482
|
+
// invoke Ruby Value marshaling to collect element data
|
|
483
|
+
VALUE rargs = rb_ary_new2 (1);
|
|
484
|
+
rb_ary_push (rargs, r2tao_OutputStream_t2r (this));
|
|
485
|
+
|
|
486
|
+
if (TAO_debug_level > 10)
|
|
487
|
+
ACE_DEBUG ((LM_INFO, "R2TAO (%P|%t) - R2TAO_Value::init: "
|
|
488
|
+
"invoking Ruby marshaling for value %@ for %C\n",
|
|
489
|
+
this->rbValue_,
|
|
490
|
+
this->val_tc_->id ()));
|
|
491
|
+
|
|
492
|
+
FN_marshal.invoke (this->rbValue_, rargs);
|
|
493
|
+
if (FN_marshal.has_caught_exception ())
|
|
494
|
+
{
|
|
495
|
+
rb_eval_string ("STDERR.puts $!.to_s+\"\\n\"+$!.backtrace.join(\"\\n\")");
|
|
496
|
+
throw ::CORBA::MARSHAL (0, CORBA::COMPLETED_NO);
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
if (TAO_debug_level > 10)
|
|
500
|
+
ACE_DEBUG ((LM_INFO, "R2TAO (%P|%t) - R2TAO_Value::init: "
|
|
501
|
+
"Ruby marshaling succeeded for value %@ for %C\n",
|
|
502
|
+
this->rbValue_,
|
|
503
|
+
this->val_tc_->id ()));
|
|
504
|
+
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
if (TAO_debug_level > 9)
|
|
508
|
+
ACE_DEBUG ((LM_INFO, "R2TAO (%P|%t) - R2TAO_Value::ctor "
|
|
509
|
+
"created Value wrapper %@ for %s %s\n",
|
|
510
|
+
this, this->val_tc_->id (),
|
|
511
|
+
this->is_truncatable_ ? "(truncatable)" : ""));
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
void R2TAO_Value::_tao_any_destructor (void *_tao_void_pointer)
|
|
515
|
+
{
|
|
516
|
+
R2TAO_Value *_tao_tmp_pointer =
|
|
517
|
+
static_cast<R2TAO_Value *> (_tao_void_pointer);
|
|
518
|
+
::CORBA::remove_ref (_tao_tmp_pointer);
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
void R2TAO_Value::truncation_hook ()
|
|
522
|
+
{
|
|
523
|
+
this->requires_truncation_ = true;
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
R2TAO_Value* R2TAO_Value::_downcast (::CORBA::ValueBase *v)
|
|
527
|
+
{
|
|
528
|
+
return dynamic_cast<R2TAO_Value*> (v);
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
CORBA::TypeCode_ptr R2TAO_Value::_tao_type (void) const
|
|
532
|
+
{
|
|
533
|
+
return this->val_tc_.in ();
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
const char * R2TAO_Value::_tao_obv_repository_id (void) const
|
|
537
|
+
{
|
|
538
|
+
return this->val_tc_->id ();
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
void R2TAO_Value::_tao_obv_truncatable_repo_ids (Repository_Id_List & ids) const
|
|
542
|
+
{
|
|
543
|
+
static ID TRUNC_IDS_ID = rb_intern ("TRUNCATABLE_IDS");
|
|
544
|
+
|
|
545
|
+
VALUE rb_ids = rb_const_get(this->rbValueClass_, TRUNC_IDS_ID);
|
|
546
|
+
CHECK_RTYPE (rb_ids, T_ARRAY);
|
|
547
|
+
CORBA::ULong alen = static_cast<unsigned long> (RARRAY_LEN (rb_ids));
|
|
548
|
+
for (CORBA::ULong l=0; l<alen ;++l)
|
|
549
|
+
{
|
|
550
|
+
VALUE id = rb_ary_entry (rb_ids, l);
|
|
551
|
+
CHECK_RTYPE (id, T_STRING);
|
|
552
|
+
ids.push_back (RSTRING_PTR (id));
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
class CI_Guard
|
|
557
|
+
{
|
|
558
|
+
public:
|
|
559
|
+
CI_Guard (VALUE rbval, TAO_ChunkInfo *pci)
|
|
560
|
+
: rbval_ (rbval)
|
|
561
|
+
{ DATA_PTR (this->rbval_) = static_cast<void*> (pci); }
|
|
562
|
+
~CI_Guard () { DATA_PTR (this->rbval_) = 0; }
|
|
563
|
+
private:
|
|
564
|
+
VALUE rbval_;
|
|
565
|
+
};
|
|
566
|
+
|
|
567
|
+
::CORBA::Boolean R2TAO_Value::_tao_marshal_v (TAO_OutputCDR &strm) const
|
|
568
|
+
{
|
|
569
|
+
if (this->for_unmarshal_) return false;
|
|
570
|
+
|
|
571
|
+
// setup chunking info
|
|
572
|
+
TAO_ChunkInfo ci (this->is_truncatable_ || this->chunking_);
|
|
573
|
+
|
|
574
|
+
if (TAO_debug_level > 9)
|
|
575
|
+
ACE_DEBUG ((LM_INFO, "R2TAO (%P|%t) - R2TAO_Value::_tao_marshal_v: "
|
|
576
|
+
"marshaling value %@ for %s %s\n",
|
|
577
|
+
this,
|
|
578
|
+
this->val_tc_->id (),
|
|
579
|
+
ci.chunking_ ? "(chunked)" : ""));
|
|
580
|
+
|
|
581
|
+
if (! ci.start_chunk (strm))
|
|
582
|
+
return false;
|
|
583
|
+
|
|
584
|
+
// marshal all elements in all chunks (== all concrete values from inheritance chain)
|
|
585
|
+
Chunk* p = this->chunk_list_.get ();
|
|
586
|
+
while (p)
|
|
587
|
+
{
|
|
588
|
+
if (! ci.start_chunk (strm))
|
|
589
|
+
return false;
|
|
590
|
+
|
|
591
|
+
if (TAO_debug_level > 10)
|
|
592
|
+
ACE_DEBUG ((LM_INFO, "R2TAO (%P|%t) - R2TAO_Value::_tao_marshal_v: "
|
|
593
|
+
"marshaling chunk %@ for value %@ for %s\n",
|
|
594
|
+
p,
|
|
595
|
+
this,
|
|
596
|
+
this->val_tc_->id ()));
|
|
597
|
+
|
|
598
|
+
ChunkElements::size_type n = p->elems_.size ();
|
|
599
|
+
for (ChunkElements::size_type e = 0; e < n ;++e)
|
|
600
|
+
{
|
|
601
|
+
if (TAO_debug_level > 10)
|
|
602
|
+
ACE_DEBUG ((LM_INFO, "R2TAO (%P|%t) - R2TAO_Value::_tao_marshal_v: "
|
|
603
|
+
"marshaling chunk element %u for value %@ for %s\n",
|
|
604
|
+
e,
|
|
605
|
+
this,
|
|
606
|
+
this->val_tc_->id ()));
|
|
607
|
+
|
|
608
|
+
if (p->elems_[e] == 0 || p->elems_[e]->impl () == 0)
|
|
609
|
+
{
|
|
610
|
+
// should not ever happen
|
|
611
|
+
ACE_DEBUG ((LM_ERROR, "R2TAO (%P|%t) - R2TAO_Value::_tao_marshal_v: "
|
|
612
|
+
"chunk element %u for value %@ for %s is INVALID (%C is null)\n",
|
|
613
|
+
e,
|
|
614
|
+
this,
|
|
615
|
+
this->val_tc_->id (),
|
|
616
|
+
p->elems_[e] == 0 ? "_var ptr" : "Any impl"));
|
|
617
|
+
return false;
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
p->elems_[e]->impl ()->marshal_value (strm);
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
if (! ci.end_chunk (strm))
|
|
624
|
+
return false;
|
|
625
|
+
|
|
626
|
+
p = p->next_;
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
if (TAO_debug_level > 9)
|
|
630
|
+
ACE_DEBUG ((LM_INFO, "R2TAO (%P|%t) - R2TAO_Value::_tao_marshal_v: "
|
|
631
|
+
"succeeded marshaling value %@ for %s\n",
|
|
632
|
+
this,
|
|
633
|
+
this->val_tc_->id ()));
|
|
634
|
+
|
|
635
|
+
return ci.end_chunk (strm);
|
|
636
|
+
}
|
|
637
|
+
|
|
638
|
+
bool R2TAO_Value::add_chunk ()
|
|
639
|
+
{
|
|
640
|
+
Chunk* new_chunk = 0;
|
|
641
|
+
ACE_NEW_NORETURN (new_chunk, Chunk());
|
|
642
|
+
if (new_chunk != 0)
|
|
643
|
+
{
|
|
644
|
+
if (this->last_chunk_)
|
|
645
|
+
{
|
|
646
|
+
this->last_chunk_->next_ = new_chunk;
|
|
647
|
+
}
|
|
648
|
+
else
|
|
649
|
+
{
|
|
650
|
+
this->chunk_list_.reset (new_chunk);
|
|
651
|
+
}
|
|
652
|
+
this->last_chunk_ = new_chunk;
|
|
653
|
+
|
|
654
|
+
if (TAO_debug_level > 10)
|
|
655
|
+
ACE_DEBUG ((LM_INFO, "R2TAO (%P|%t) - R2TAO_Value::add_chunk: "
|
|
656
|
+
"added chunk %@ for value %@ for %s\n",
|
|
657
|
+
new_chunk,
|
|
658
|
+
this,
|
|
659
|
+
this->val_tc_->id ()));
|
|
660
|
+
|
|
661
|
+
return true;
|
|
662
|
+
}
|
|
663
|
+
return false;
|
|
664
|
+
}
|
|
665
|
+
|
|
666
|
+
bool R2TAO_Value::add_chunk_element (CORBA::Any_var& elem)
|
|
667
|
+
{
|
|
668
|
+
if (this->last_chunk_ || this->add_chunk())
|
|
669
|
+
{
|
|
670
|
+
ChunkElements::size_type last_ix = this->last_chunk_->elems_.size ();
|
|
671
|
+
this->last_chunk_->elems_.size (last_ix+1);
|
|
672
|
+
this->last_chunk_->elems_[last_ix] = elem._retn ();
|
|
673
|
+
|
|
674
|
+
if (TAO_debug_level > 10)
|
|
675
|
+
ACE_DEBUG ((LM_INFO, "R2TAO (%P|%t) - R2TAO_Value::add_chunk: "
|
|
676
|
+
"added chunk %@ element %u for value %@ for %s\n",
|
|
677
|
+
this->last_chunk_,
|
|
678
|
+
last_ix,
|
|
679
|
+
this,
|
|
680
|
+
this->val_tc_->id ()));
|
|
681
|
+
|
|
682
|
+
return true;
|
|
683
|
+
}
|
|
684
|
+
return false;
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
|
|
688
|
+
::CORBA::Boolean R2TAO_Value::_tao_unmarshal_v (TAO_InputCDR &strm)
|
|
689
|
+
{
|
|
690
|
+
static R2TAO_RBFuncall FN_unmarshal ("do_unmarshal", false);
|
|
691
|
+
|
|
692
|
+
if (!this->for_unmarshal_) return false;
|
|
693
|
+
|
|
694
|
+
// setup chunking info
|
|
695
|
+
TAO_ChunkInfo ci (this->is_truncatable_ || this->chunking_, 1);
|
|
696
|
+
// store info with Ruby value
|
|
697
|
+
CI_Guard __ci_guard(this->rbCIHolder_, &ci);
|
|
698
|
+
|
|
699
|
+
if (TAO_debug_level > 9)
|
|
700
|
+
ACE_DEBUG ((LM_INFO, "R2TAO (%P|%t) - R2TAO_Value::_tao_unmarshal_v: "
|
|
701
|
+
"unmarshaling value %@ for %s\n",
|
|
702
|
+
this->rbValue_,
|
|
703
|
+
this->val_tc_->id ()));
|
|
704
|
+
|
|
705
|
+
if (!ci.handle_chunking (strm))
|
|
706
|
+
return false;
|
|
707
|
+
|
|
708
|
+
// invoke Ruby Value unmarshaling
|
|
709
|
+
VALUE rargs = rb_ary_new2 (1);
|
|
710
|
+
rb_ary_push (rargs, r2tao_InputStream_t2r (&strm));
|
|
711
|
+
|
|
712
|
+
if (TAO_debug_level > 10)
|
|
713
|
+
ACE_DEBUG ((LM_INFO, "R2TAO (%P|%t) - R2TAO_Value::_tao_unmarshal_v: "
|
|
714
|
+
"invoking Ruby unmarshaling for value %@ for %s\n",
|
|
715
|
+
this->rbValue_,
|
|
716
|
+
this->val_tc_->id ()));
|
|
717
|
+
|
|
718
|
+
FN_unmarshal.invoke (this->rbValue_, rargs);
|
|
719
|
+
if (FN_unmarshal.has_caught_exception ())
|
|
720
|
+
{
|
|
721
|
+
rb_eval_string ("STDERR.puts $!.to_s+\"\\n\"+$!.backtrace.join(\"\\n\")");
|
|
722
|
+
return false;
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
if (TAO_debug_level > 10)
|
|
726
|
+
ACE_DEBUG ((LM_INFO, "R2TAO (%P|%t) - R2TAO_Value::_tao_unmarshal_v: "
|
|
727
|
+
"succeeded unmarshaling value %@ for %s %s\n",
|
|
728
|
+
this->rbValue_,
|
|
729
|
+
this->val_tc_->id (),
|
|
730
|
+
this->requires_truncation_ ? "(with truncation)" : ""));
|
|
731
|
+
|
|
732
|
+
if (this->requires_truncation_)
|
|
733
|
+
return ci.skip_chunks (strm);
|
|
734
|
+
else
|
|
735
|
+
return ci.handle_chunking (strm);
|
|
736
|
+
}
|
|
737
|
+
|
|
738
|
+
// always return false -> i.e. always marshal type Id
|
|
739
|
+
::CORBA::Boolean R2TAO_Value::_tao_match_formal_type (ptrdiff_t ) const
|
|
740
|
+
{
|
|
741
|
+
return 0;
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
void operator<<= (::CORBA::Any & _tao_any, R2TAO_Value_ptr _tao_elem)
|
|
745
|
+
{
|
|
746
|
+
::CORBA::add_ref (_tao_elem);
|
|
747
|
+
_tao_any <<= &_tao_elem;
|
|
748
|
+
}
|
|
749
|
+
void operator<<= (::CORBA::Any & _tao_any, R2TAO_Value_ptr * _tao_elem)
|
|
750
|
+
{
|
|
751
|
+
TAO::Any_Impl_T<R2TAO_Value>::insert (
|
|
752
|
+
_tao_any,
|
|
753
|
+
R2TAO_Value::_tao_any_destructor,
|
|
754
|
+
(*_tao_elem)->_tao_type (),
|
|
755
|
+
*_tao_elem);
|
|
756
|
+
}
|
|
757
|
+
|
|
758
|
+
::CORBA::Boolean operator<< (TAO_OutputCDR &strm, const R2TAO_Value * _tao_valref)
|
|
759
|
+
{
|
|
760
|
+
// check for existence of TAO valuetype indirection map
|
|
761
|
+
if (!strm.get_value_map ().is_nil ())
|
|
762
|
+
{
|
|
763
|
+
// keep map clear effectively disabling indirection
|
|
764
|
+
// because this does not work with R2TAO Value objects
|
|
765
|
+
strm.get_value_map ()->get ()->unbind_all ();
|
|
766
|
+
}
|
|
767
|
+
|
|
768
|
+
return
|
|
769
|
+
::CORBA::ValueBase::_tao_marshal (
|
|
770
|
+
strm,
|
|
771
|
+
_tao_valref,
|
|
772
|
+
reinterpret_cast<ptrdiff_t> (&R2TAO_Value::_downcast)
|
|
773
|
+
);
|
|
774
|
+
}
|
|
775
|
+
|
|
776
|
+
::CORBA::Boolean operator>> (TAO_InputCDR &strm, R2TAO_Value *&_tao_valref)
|
|
777
|
+
{
|
|
778
|
+
CORBA::ValueBase * _tao_valbase = _tao_valref;
|
|
779
|
+
::CORBA::Boolean ret = R2TAO_Value::_tao_unmarshal (strm, _tao_valbase);
|
|
780
|
+
_tao_valref = dynamic_cast <R2TAO_Value*> (_tao_valbase);
|
|
781
|
+
return ret;
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
void TAO::Value_Traits<R2TAO_Value>::add_ref (R2TAO_Value * p)
|
|
785
|
+
{
|
|
786
|
+
::CORBA::add_ref (p);
|
|
787
|
+
}
|
|
788
|
+
|
|
789
|
+
void TAO::Value_Traits<R2TAO_Value>::remove_ref (R2TAO_Value * p)
|
|
790
|
+
{
|
|
791
|
+
::CORBA::remove_ref (p);
|
|
792
|
+
}
|
|
793
|
+
|
|
794
|
+
void TAO::Value_Traits<R2TAO_Value>::release (R2TAO_Value * p)
|
|
795
|
+
{
|
|
796
|
+
::CORBA::remove_ref (p);
|
|
797
|
+
}
|
|
798
|
+
|
|
799
|
+
VALUE r2tao_wrap_Valuebox(VALUE rval, CORBA::TypeCode_ptr tc)
|
|
800
|
+
{
|
|
801
|
+
static ID set_value_ID = rb_intern ("value=");
|
|
802
|
+
|
|
803
|
+
CORBA::ValueFactory factory =
|
|
804
|
+
TAO_ORB_Core_instance ()->orb ()->lookup_value_factory (
|
|
805
|
+
tc->id ());
|
|
806
|
+
if (factory)
|
|
807
|
+
{
|
|
808
|
+
CORBA::ValueBase * vb = factory->create_for_unmarshal ();
|
|
809
|
+
R2TAO_Value_var r2tval = R2TAO_Value::_downcast (vb);
|
|
810
|
+
factory->_remove_ref (); // we're done with this
|
|
811
|
+
rb_funcall (r2tval->get_ruby_value(), set_value_ID, 1, rval);
|
|
812
|
+
return r2tval->get_ruby_value();
|
|
813
|
+
}
|
|
814
|
+
else
|
|
815
|
+
{
|
|
816
|
+
throw CORBA::BAD_PARAM();
|
|
817
|
+
}
|
|
818
|
+
}
|
|
819
|
+
|
|
820
|
+
//-------------------------------------------------------------------
|
|
821
|
+
// R2TAO Value methods
|
|
822
|
+
//
|
|
823
|
+
//===================================================================
|
|
824
|
+
|
|
825
|
+
VALUE r2tao_Value_pre_marshal(VALUE /*self*/, VALUE rstrm)
|
|
826
|
+
{
|
|
827
|
+
R2TAO_Value* val = r2tao_OutputStream_r2t(rstrm);
|
|
828
|
+
|
|
829
|
+
if (!val->add_chunk ())
|
|
830
|
+
X_CORBA (MARSHAL);
|
|
831
|
+
|
|
832
|
+
return Qtrue;
|
|
833
|
+
}
|
|
834
|
+
|
|
835
|
+
VALUE r2tao_Value_post_marshal(VALUE /*self*/, VALUE /*rstrm*/)
|
|
836
|
+
{
|
|
837
|
+
return Qtrue;
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
VALUE r2tao_Value_pre_unmarshal(VALUE self, VALUE rstrm)
|
|
841
|
+
{
|
|
842
|
+
// get reference holder for native value
|
|
843
|
+
VALUE rb_val = rb_ivar_get (self, val_ivar_ID);
|
|
844
|
+
// get native Value
|
|
845
|
+
R2TAO_Value* val = static_cast<R2TAO_Value*> (DATA_PTR (rb_val));
|
|
846
|
+
|
|
847
|
+
if (TAO_debug_level > 10)
|
|
848
|
+
ACE_DEBUG ((LM_INFO, "R2TAO (%P|%t) - R2CORBA::CORBA::ValueBase::pre_unmarshal: "
|
|
849
|
+
"unmarshaling value state for %@ %s\n",
|
|
850
|
+
self,
|
|
851
|
+
val->requires_truncation () ? "with truncation" : ""));
|
|
852
|
+
|
|
853
|
+
// get ChunkInfo holder
|
|
854
|
+
VALUE rb_ci = rb_ivar_get (self, ci_ivar_ID);
|
|
855
|
+
// get ChunkInfo
|
|
856
|
+
TAO_ChunkInfo &ci = *static_cast<TAO_ChunkInfo*> (DATA_PTR (rb_ci));
|
|
857
|
+
|
|
858
|
+
TAO_InputCDR& strm = *r2tao_InputStream_r2t(rstrm);
|
|
859
|
+
|
|
860
|
+
if (val->has_started_chunk_unmarshalling ())
|
|
861
|
+
{
|
|
862
|
+
if (TAO_debug_level > 10)
|
|
863
|
+
ACE_DEBUG ((LM_INFO, "R2TAO (%P|%t) - R2CORBA::CORBA::ValueBase::pre_unmarshal: "
|
|
864
|
+
"finish unmarshalling previous value state chunk for %@\n",
|
|
865
|
+
self));
|
|
866
|
+
// need to finish the previous chunk unmarshalling
|
|
867
|
+
if (!ci.handle_chunking (strm))
|
|
868
|
+
X_CORBA (MARSHAL);
|
|
869
|
+
|
|
870
|
+
val->ended_chunk_unmarshalling ();
|
|
871
|
+
}
|
|
872
|
+
|
|
873
|
+
// start next chunk
|
|
874
|
+
if (!ci.handle_chunking (strm))
|
|
875
|
+
X_CORBA (MARSHAL);
|
|
876
|
+
|
|
877
|
+
val->started_chunk_unmarshalling ();
|
|
878
|
+
|
|
879
|
+
return Qtrue;
|
|
880
|
+
}
|
|
881
|
+
|
|
882
|
+
VALUE r2tao_Value_post_unmarshal(VALUE /*self*/, VALUE /*rstrm*/)
|
|
883
|
+
{
|
|
884
|
+
return Qtrue;
|
|
885
|
+
}
|
|
886
|
+
|
|
887
|
+
//-------------------------------------------------------------------
|
|
888
|
+
// R2TAO Valuefactory class
|
|
889
|
+
//
|
|
890
|
+
// Wrapper class for reference to R2CORBA valuefactory instance
|
|
891
|
+
//===================================================================
|
|
892
|
+
|
|
893
|
+
R2TAO_RBFuncall R2TAO_ValueFactory::fn_create_default_ ("_create_default", false);
|
|
894
|
+
|
|
895
|
+
R2TAO_ValueFactory::R2TAO_ValueFactory (VALUE rbValueFactory)
|
|
896
|
+
: rbValueFactory_ (rbValueFactory)
|
|
897
|
+
{
|
|
898
|
+
r2tao_register_object (this->rbValueFactory_);
|
|
899
|
+
}
|
|
900
|
+
|
|
901
|
+
R2TAO_ValueFactory::~R2TAO_ValueFactory (void)
|
|
902
|
+
{
|
|
903
|
+
r2tao_unregister_object (this->rbValueFactory_);
|
|
904
|
+
}
|
|
905
|
+
|
|
906
|
+
R2TAO_ValueFactory* R2TAO_ValueFactory::_downcast ( ::CORBA::ValueFactoryBase * vfb)
|
|
907
|
+
{
|
|
908
|
+
return dynamic_cast <R2TAO_ValueFactory*> (vfb);
|
|
909
|
+
}
|
|
910
|
+
|
|
911
|
+
::CORBA::ValueBase * R2TAO_ValueFactory::create_for_unmarshal (void)
|
|
912
|
+
{
|
|
913
|
+
// create new Ruby Value
|
|
914
|
+
VALUE rval = fn_create_default_.invoke (this->rbValueFactory_);
|
|
915
|
+
if (fn_create_default_.has_caught_exception ())
|
|
916
|
+
{
|
|
917
|
+
rb_eval_string ("STDERR.puts $!.to_s+\"\\n\"+$!.backtrace.join(\"\\n\")");
|
|
918
|
+
return 0;
|
|
919
|
+
}
|
|
920
|
+
|
|
921
|
+
R2TAO_Value *ret_val = 0;
|
|
922
|
+
ACE_NEW_THROW_EX (
|
|
923
|
+
ret_val,
|
|
924
|
+
R2TAO_Value (rval, true),
|
|
925
|
+
::CORBA::NO_MEMORY ()
|
|
926
|
+
);
|
|
927
|
+
|
|
928
|
+
if (TAO_debug_level > 9)
|
|
929
|
+
ACE_DEBUG ((LM_INFO, "R2TAO (%P|%t) - R2TAO_ValueFactory::create_for_unmarshal: "
|
|
930
|
+
"created value wrapper %@ for %s\n",
|
|
931
|
+
ret_val,
|
|
932
|
+
this->tao_repository_id ()));
|
|
933
|
+
|
|
934
|
+
return ret_val;
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
::CORBA::AbstractBase_ptr R2TAO_ValueFactory::create_for_unmarshal_abstract (void)
|
|
938
|
+
{
|
|
939
|
+
// create new Ruby Value
|
|
940
|
+
VALUE rval = fn_create_default_.invoke (this->rbValueFactory_);
|
|
941
|
+
if (fn_create_default_.has_caught_exception ())
|
|
942
|
+
{
|
|
943
|
+
rb_eval_string ("STDERR.puts $!.to_s+\"\\n\"+$!.backtrace.join(\"\\n\")");
|
|
944
|
+
return 0;
|
|
945
|
+
}
|
|
946
|
+
|
|
947
|
+
// create without 'abs_tc' below since this object will not be
|
|
948
|
+
// used for marshaling but only for unmarshaling
|
|
949
|
+
// through a call to _tao_unmarshal_v()
|
|
950
|
+
R2TAO_AbstractValue *ret_val = 0;
|
|
951
|
+
ACE_NEW_THROW_EX (
|
|
952
|
+
ret_val,
|
|
953
|
+
R2TAO_AbstractValue (rval),
|
|
954
|
+
::CORBA::NO_MEMORY ()
|
|
955
|
+
);
|
|
956
|
+
return ret_val;
|
|
957
|
+
}
|
|
958
|
+
|
|
959
|
+
// TAO-specific extensions
|
|
960
|
+
const char* R2TAO_ValueFactory::tao_repository_id (void)
|
|
961
|
+
{
|
|
962
|
+
static ID value_id_ID = rb_intern ("value_id");
|
|
963
|
+
|
|
964
|
+
VALUE id = rb_funcall (this->rbValueFactory_, value_id_ID, 0);
|
|
965
|
+
CHECK_RTYPE (id, T_STRING);
|
|
966
|
+
return RSTRING_PTR (id);
|
|
967
|
+
}
|
|
968
|
+
|
|
969
|
+
VALUE r2tao_VFB_register_value_factory(VALUE /*self*/, VALUE id, VALUE rfact)
|
|
970
|
+
{
|
|
971
|
+
#if !defined(CORBA_E_MICRO)
|
|
972
|
+
R2TAO_TRY {
|
|
973
|
+
CHECK_RTYPE (id, T_STRING);
|
|
974
|
+
if (rb_obj_is_kind_of (rfact, r2tao_cValueFactoryBase) != Qtrue)
|
|
975
|
+
{
|
|
976
|
+
throw CORBA::BAD_PARAM (0, CORBA::COMPLETED_NO);
|
|
977
|
+
}
|
|
978
|
+
|
|
979
|
+
if (TAO_debug_level > 5)
|
|
980
|
+
ACE_DEBUG ((LM_INFO, "R2TAO (%P|%t) - ValueFactoryBase::register_value_factory:: "
|
|
981
|
+
"registering factory for %s\n",
|
|
982
|
+
RSTRING_PTR (id)));
|
|
983
|
+
|
|
984
|
+
CORBA::ValueFactory factory = new R2TAO_ValueFactory (rfact);
|
|
985
|
+
CORBA::ValueFactory prev_factory =
|
|
986
|
+
TAO_ORB_Core_instance ()->orb ()->register_value_factory (
|
|
987
|
+
RSTRING_PTR (id),
|
|
988
|
+
factory);
|
|
989
|
+
if (prev_factory) prev_factory->_remove_ref ();
|
|
990
|
+
factory->_remove_ref ();
|
|
991
|
+
} R2TAO_CATCH;
|
|
992
|
+
#else
|
|
993
|
+
X_CORBA(NO_IMPLEMENT);
|
|
994
|
+
#endif
|
|
995
|
+
return Qnil;
|
|
996
|
+
}
|
|
997
|
+
|
|
998
|
+
VALUE r2tao_VFB_unregister_value_factory(VALUE /*self*/, VALUE id)
|
|
999
|
+
{
|
|
1000
|
+
#if !defined(CORBA_E_MICRO)
|
|
1001
|
+
R2TAO_TRY {
|
|
1002
|
+
CHECK_RTYPE (id, T_STRING);
|
|
1003
|
+
|
|
1004
|
+
if (TAO_debug_level > 5)
|
|
1005
|
+
ACE_DEBUG ((LM_INFO, "R2TAO (%P|%t) - ORB::unregister_value_factory:: "
|
|
1006
|
+
"unregistering factory for %s\n",
|
|
1007
|
+
RSTRING_PTR (id)));
|
|
1008
|
+
|
|
1009
|
+
TAO_ORB_Core_instance ()->orb ()->unregister_value_factory (
|
|
1010
|
+
RSTRING_PTR (id));
|
|
1011
|
+
} R2TAO_CATCH;
|
|
1012
|
+
#else
|
|
1013
|
+
X_CORBA(NO_IMPLEMENT);
|
|
1014
|
+
#endif
|
|
1015
|
+
return Qnil;
|
|
1016
|
+
}
|
|
1017
|
+
|
|
1018
|
+
VALUE r2tao_VFB_lookup_value_factory(VALUE /*self*/, VALUE id)
|
|
1019
|
+
{
|
|
1020
|
+
VALUE ret = Qnil;
|
|
1021
|
+
#if !defined(CORBA_E_MICRO)
|
|
1022
|
+
R2TAO_TRY {
|
|
1023
|
+
CHECK_RTYPE (id, T_STRING);
|
|
1024
|
+
|
|
1025
|
+
if (TAO_debug_level > 5)
|
|
1026
|
+
ACE_DEBUG ((LM_INFO, "R2TAO (%P|%t) - ORB::lookup_value_factory:: "
|
|
1027
|
+
"looking up factory for %s\n",
|
|
1028
|
+
RSTRING_PTR (id)));
|
|
1029
|
+
|
|
1030
|
+
CORBA::ValueFactory factory =
|
|
1031
|
+
TAO_ORB_Core_instance ()->orb ()->lookup_value_factory (
|
|
1032
|
+
RSTRING_PTR (id));
|
|
1033
|
+
if (factory)
|
|
1034
|
+
{
|
|
1035
|
+
R2TAO_ValueFactory* r2tfact = dynamic_cast <R2TAO_ValueFactory*> (factory);
|
|
1036
|
+
ret = r2tfact->get_ruby_factory();
|
|
1037
|
+
factory->_remove_ref ();
|
|
1038
|
+
}
|
|
1039
|
+
} R2TAO_CATCH;
|
|
1040
|
+
#else
|
|
1041
|
+
X_CORBA(NO_IMPLEMENT);
|
|
1042
|
+
#endif
|
|
1043
|
+
return ret;
|
|
1044
|
+
}
|
|
1045
|
+
|
|
1046
|
+
//-------------------------------------------------------------------
|
|
1047
|
+
// R2TAO AbstractValue class
|
|
1048
|
+
//
|
|
1049
|
+
// Wrapper class for value type to present CORBA::AbstractBase
|
|
1050
|
+
// interface to TAO Any
|
|
1051
|
+
//===================================================================
|
|
1052
|
+
|
|
1053
|
+
R2TAO_AbstractValue::R2TAO_AbstractValue (VALUE rbValue,
|
|
1054
|
+
CORBA::TypeCode_ptr abs_tc)
|
|
1055
|
+
: ::CORBA::AbstractBase (),
|
|
1056
|
+
R2TAO_Value (rbValue),
|
|
1057
|
+
abs_tc_ (CORBA::TypeCode::_duplicate (abs_tc))
|
|
1058
|
+
{
|
|
1059
|
+
}
|
|
1060
|
+
|
|
1061
|
+
R2TAO_AbstractValue::R2TAO_AbstractValue (VALUE rbValue)
|
|
1062
|
+
: ::CORBA::AbstractBase (),
|
|
1063
|
+
R2TAO_Value (rbValue, true)
|
|
1064
|
+
{
|
|
1065
|
+
}
|
|
1066
|
+
|
|
1067
|
+
R2TAO_AbstractValue::~R2TAO_AbstractValue ()
|
|
1068
|
+
{
|
|
1069
|
+
}
|
|
1070
|
+
|
|
1071
|
+
void R2TAO_AbstractValue::_tao_any_destructor (void *_tao_void_pointer)
|
|
1072
|
+
{
|
|
1073
|
+
R2TAO_AbstractValue *_tao_tmp_pointer =
|
|
1074
|
+
static_cast<R2TAO_AbstractValue *> (_tao_void_pointer);
|
|
1075
|
+
::CORBA::remove_ref (_tao_tmp_pointer);
|
|
1076
|
+
}
|
|
1077
|
+
|
|
1078
|
+
R2TAO_AbstractValue_ptr R2TAO_AbstractValue::_duplicate (R2TAO_AbstractValue_ptr obj)
|
|
1079
|
+
{
|
|
1080
|
+
if (! ::CORBA::is_nil (obj))
|
|
1081
|
+
{
|
|
1082
|
+
obj->_add_ref ();
|
|
1083
|
+
}
|
|
1084
|
+
|
|
1085
|
+
return obj;
|
|
1086
|
+
}
|
|
1087
|
+
|
|
1088
|
+
R2TAO_AbstractValue* R2TAO_AbstractValue::_downcast ( ::CORBA::ValueBase *v)
|
|
1089
|
+
{
|
|
1090
|
+
return dynamic_cast< ::R2TAO_AbstractValue * > (v);
|
|
1091
|
+
}
|
|
1092
|
+
|
|
1093
|
+
const char* R2TAO_AbstractValue::_tao_obv_repository_id (void) const
|
|
1094
|
+
{
|
|
1095
|
+
return this->R2TAO_Value::_tao_obv_repository_id ();
|
|
1096
|
+
}
|
|
1097
|
+
CORBA::Boolean R2TAO_AbstractValue::_tao_marshal_v (TAO_OutputCDR &strm) const
|
|
1098
|
+
{
|
|
1099
|
+
return this->R2TAO_Value::_tao_marshal_v (strm);
|
|
1100
|
+
}
|
|
1101
|
+
CORBA::Boolean R2TAO_AbstractValue::_tao_unmarshal_v (TAO_InputCDR &strm)
|
|
1102
|
+
{
|
|
1103
|
+
return this->R2TAO_Value::_tao_unmarshal_v (strm);
|
|
1104
|
+
}
|
|
1105
|
+
CORBA::Boolean R2TAO_AbstractValue::_tao_match_formal_type (ptrdiff_t p) const
|
|
1106
|
+
{
|
|
1107
|
+
return this->R2TAO_Value::_tao_match_formal_type (p);
|
|
1108
|
+
}
|
|
1109
|
+
|
|
1110
|
+
void R2TAO_AbstractValue::_add_ref (void)
|
|
1111
|
+
{
|
|
1112
|
+
this->::CORBA::DefaultValueRefCountBase::_add_ref ();
|
|
1113
|
+
}
|
|
1114
|
+
|
|
1115
|
+
void R2TAO_AbstractValue::_remove_ref (void)
|
|
1116
|
+
{
|
|
1117
|
+
this->::CORBA::DefaultValueRefCountBase::_remove_ref ();
|
|
1118
|
+
}
|
|
1119
|
+
|
|
1120
|
+
::CORBA::ValueBase *R2TAO_AbstractValue::_tao_to_value (void)
|
|
1121
|
+
{
|
|
1122
|
+
return this;
|
|
1123
|
+
}
|
|
1124
|
+
|
|
1125
|
+
CORBA::TypeCode_ptr R2TAO_AbstractValue::abstract_type () const
|
|
1126
|
+
{
|
|
1127
|
+
return this->abs_tc_.in ();
|
|
1128
|
+
}
|
|
1129
|
+
|
|
1130
|
+
void operator<<= (::CORBA::Any & _tao_any, R2TAO_AbstractValue_ptr _tao_elem)
|
|
1131
|
+
{
|
|
1132
|
+
R2TAO_AbstractValue_ptr _tao_valptr =
|
|
1133
|
+
R2TAO_AbstractValue::_duplicate (_tao_elem);
|
|
1134
|
+
_tao_any <<= &_tao_valptr;
|
|
1135
|
+
}
|
|
1136
|
+
void operator<<= (::CORBA::Any & _tao_any, R2TAO_AbstractValue_ptr * _tao_elem)
|
|
1137
|
+
{
|
|
1138
|
+
TAO::Any_Impl_T<R2TAO_AbstractValue>::insert (
|
|
1139
|
+
_tao_any,
|
|
1140
|
+
R2TAO_AbstractValue::_tao_any_destructor,
|
|
1141
|
+
(*_tao_elem)->abstract_type (),
|
|
1142
|
+
*_tao_elem);
|
|
1143
|
+
}
|
|
1144
|
+
|
|
1145
|
+
::CORBA::Boolean operator<< (TAO_OutputCDR &strm, const R2TAO_AbstractValue_ptr _tao_valref)
|
|
1146
|
+
{
|
|
1147
|
+
::CORBA::AbstractBase_ptr _tao_corba_abs = _tao_valref;
|
|
1148
|
+
return (strm << _tao_corba_abs);
|
|
1149
|
+
}
|
|
1150
|
+
|
|
1151
|
+
// Dummy to allow compilation of Any_Impl_T<R2TAO_AbstractValue> template instantiation.
|
|
1152
|
+
// We never use the extraction code of that template though.
|
|
1153
|
+
::CORBA::Boolean operator>> (TAO_InputCDR &/*strm*/, R2TAO_AbstractValue_ptr &/*_tao_objref*/)
|
|
1154
|
+
{
|
|
1155
|
+
return false;
|
|
1156
|
+
}
|
|
1157
|
+
|
|
1158
|
+
R2TAO_AbstractValue_ptr
|
|
1159
|
+
TAO::Objref_Traits<R2TAO_AbstractValue>::duplicate (
|
|
1160
|
+
R2TAO_AbstractValue_ptr p)
|
|
1161
|
+
{
|
|
1162
|
+
return R2TAO_AbstractValue::_duplicate (p);
|
|
1163
|
+
}
|
|
1164
|
+
|
|
1165
|
+
void
|
|
1166
|
+
TAO::Objref_Traits<R2TAO_AbstractValue>::release (
|
|
1167
|
+
R2TAO_AbstractValue_ptr p)
|
|
1168
|
+
{
|
|
1169
|
+
::CORBA::release (p);
|
|
1170
|
+
}
|
|
1171
|
+
|
|
1172
|
+
R2TAO_AbstractValue_ptr
|
|
1173
|
+
TAO::Objref_Traits<R2TAO_AbstractValue>::nil (void)
|
|
1174
|
+
{
|
|
1175
|
+
return 0;
|
|
1176
|
+
}
|
|
1177
|
+
|
|
1178
|
+
::CORBA::Boolean
|
|
1179
|
+
TAO::Objref_Traits<R2TAO_AbstractValue>::marshal (
|
|
1180
|
+
const R2TAO_AbstractValue_ptr p,
|
|
1181
|
+
TAO_OutputCDR & cdr)
|
|
1182
|
+
{
|
|
1183
|
+
return cdr << p;
|
|
1184
|
+
}
|
|
1185
|
+
|
|
1186
|
+
//-------------------------------------------------------------------
|
|
1187
|
+
// R2TAO AbstractObject class
|
|
1188
|
+
//
|
|
1189
|
+
// Wrapper class for object reference to present CORBA::AbstractBase
|
|
1190
|
+
// interface to TAO Any
|
|
1191
|
+
//===================================================================
|
|
1192
|
+
|
|
1193
|
+
R2TAO_AbstractObject::R2TAO_AbstractObject (CORBA::Object_ptr objref,
|
|
1194
|
+
CORBA::TypeCode_ptr abs_tc)
|
|
1195
|
+
: CORBA::AbstractBase (objref->_stubobj(),
|
|
1196
|
+
objref->_is_collocated(),
|
|
1197
|
+
objref->_is_collocated() ? objref->_stubobj()->collocated_servant () : 0),
|
|
1198
|
+
CORBA::Object (),
|
|
1199
|
+
abs_tc_ (CORBA::TypeCode::_duplicate (abs_tc))
|
|
1200
|
+
{
|
|
1201
|
+
}
|
|
1202
|
+
|
|
1203
|
+
R2TAO_AbstractObject::~R2TAO_AbstractObject ()
|
|
1204
|
+
{
|
|
1205
|
+
}
|
|
1206
|
+
|
|
1207
|
+
void CORBA::release (R2TAO_AbstractObject_ptr p)
|
|
1208
|
+
{
|
|
1209
|
+
::CORBA::AbstractBase_ptr abs = p;
|
|
1210
|
+
::CORBA::release (abs);
|
|
1211
|
+
}
|
|
1212
|
+
|
|
1213
|
+
::CORBA::Boolean CORBA::is_nil (R2TAO_AbstractObject_ptr p)
|
|
1214
|
+
{
|
|
1215
|
+
::CORBA::Object_ptr obj = p;
|
|
1216
|
+
return ::CORBA::is_nil (obj);
|
|
1217
|
+
}
|
|
1218
|
+
|
|
1219
|
+
void R2TAO_AbstractObject::_tao_any_destructor (void *_tao_void_pointer)
|
|
1220
|
+
{
|
|
1221
|
+
R2TAO_AbstractObject *_tao_tmp_pointer =
|
|
1222
|
+
static_cast<R2TAO_AbstractObject *> (_tao_void_pointer);
|
|
1223
|
+
::CORBA::release (_tao_tmp_pointer);
|
|
1224
|
+
}
|
|
1225
|
+
|
|
1226
|
+
R2TAO_AbstractObject_ptr R2TAO_AbstractObject::_duplicate (R2TAO_AbstractObject_ptr obj)
|
|
1227
|
+
{
|
|
1228
|
+
if (! ::CORBA::is_nil (obj))
|
|
1229
|
+
{
|
|
1230
|
+
obj->_add_ref ();
|
|
1231
|
+
}
|
|
1232
|
+
|
|
1233
|
+
return obj;
|
|
1234
|
+
}
|
|
1235
|
+
|
|
1236
|
+
void R2TAO_AbstractObject::_tao_release (R2TAO_AbstractObject_ptr obj)
|
|
1237
|
+
{
|
|
1238
|
+
::CORBA::release (obj);
|
|
1239
|
+
}
|
|
1240
|
+
|
|
1241
|
+
void R2TAO_AbstractObject::_add_ref (void)
|
|
1242
|
+
{
|
|
1243
|
+
this->::CORBA::Object::_add_ref();
|
|
1244
|
+
}
|
|
1245
|
+
void R2TAO_AbstractObject::_remove_ref (void)
|
|
1246
|
+
{
|
|
1247
|
+
this->::CORBA::Object::_remove_ref();
|
|
1248
|
+
}
|
|
1249
|
+
|
|
1250
|
+
::CORBA::Boolean R2TAO_AbstractObject::_is_a (const char *type_id)
|
|
1251
|
+
{
|
|
1252
|
+
return this->::CORBA::AbstractBase::_is_a (type_id) ||
|
|
1253
|
+
ACE_OS::strcmp (type_id,
|
|
1254
|
+
"IDL:omg.org/CORBA/Object:1.0") == 0 ||
|
|
1255
|
+
this->::CORBA::Object::_is_a (type_id);
|
|
1256
|
+
}
|
|
1257
|
+
|
|
1258
|
+
const char* R2TAO_AbstractObject::_interface_repository_id (void) const
|
|
1259
|
+
{
|
|
1260
|
+
return this->abs_tc_->id ();
|
|
1261
|
+
}
|
|
1262
|
+
|
|
1263
|
+
::CORBA::Boolean R2TAO_AbstractObject::marshal (TAO_OutputCDR &cdr)
|
|
1264
|
+
{
|
|
1265
|
+
return (cdr << (::CORBA::AbstractBase_ptr)this);
|
|
1266
|
+
}
|
|
1267
|
+
|
|
1268
|
+
CORBA::TypeCode_ptr R2TAO_AbstractObject::abstract_type () const
|
|
1269
|
+
{
|
|
1270
|
+
return this->abs_tc_.in ();
|
|
1271
|
+
}
|
|
1272
|
+
|
|
1273
|
+
void operator<<= (::CORBA::Any & _tao_any, R2TAO_AbstractObject_ptr _tao_elem)
|
|
1274
|
+
{
|
|
1275
|
+
R2TAO_AbstractObject_ptr _tao_objptr =
|
|
1276
|
+
R2TAO_AbstractObject::_duplicate (_tao_elem);
|
|
1277
|
+
_tao_any <<= &_tao_objptr;
|
|
1278
|
+
}
|
|
1279
|
+
void operator<<= (::CORBA::Any & _tao_any, R2TAO_AbstractObject_ptr * _tao_elem)
|
|
1280
|
+
{
|
|
1281
|
+
TAO::Any_Impl_T<R2TAO_AbstractObject>::insert (
|
|
1282
|
+
_tao_any,
|
|
1283
|
+
R2TAO_AbstractObject::_tao_any_destructor,
|
|
1284
|
+
(*_tao_elem)->abstract_type (),
|
|
1285
|
+
*_tao_elem);
|
|
1286
|
+
}
|
|
1287
|
+
|
|
1288
|
+
::CORBA::Boolean operator<< (TAO_OutputCDR &strm, const R2TAO_AbstractObject_ptr _tao_objref)
|
|
1289
|
+
{
|
|
1290
|
+
::CORBA::AbstractBase_ptr _tao_corba_obj = _tao_objref;
|
|
1291
|
+
return (strm << _tao_corba_obj);
|
|
1292
|
+
}
|
|
1293
|
+
|
|
1294
|
+
// Dummy to allow compilation of Any_Impl_T<R2TAO_AbstractObject> template instantiation.
|
|
1295
|
+
// We never use the extraction code of that template though.
|
|
1296
|
+
::CORBA::Boolean operator>> (TAO_InputCDR &/*strm*/, R2TAO_AbstractObject_ptr &/*_tao_objref*/)
|
|
1297
|
+
{
|
|
1298
|
+
return false;
|
|
1299
|
+
}
|
|
1300
|
+
|
|
1301
|
+
R2TAO_AbstractObject_ptr
|
|
1302
|
+
TAO::Objref_Traits<R2TAO_AbstractObject>::duplicate (
|
|
1303
|
+
R2TAO_AbstractObject_ptr p)
|
|
1304
|
+
{
|
|
1305
|
+
return R2TAO_AbstractObject::_duplicate (p);
|
|
1306
|
+
}
|
|
1307
|
+
|
|
1308
|
+
void
|
|
1309
|
+
TAO::Objref_Traits<R2TAO_AbstractObject>::release (
|
|
1310
|
+
R2TAO_AbstractObject_ptr p)
|
|
1311
|
+
{
|
|
1312
|
+
::CORBA::release (p);
|
|
1313
|
+
}
|
|
1314
|
+
|
|
1315
|
+
R2TAO_AbstractObject_ptr
|
|
1316
|
+
TAO::Objref_Traits<R2TAO_AbstractObject>::nil (void)
|
|
1317
|
+
{
|
|
1318
|
+
return 0;
|
|
1319
|
+
}
|
|
1320
|
+
|
|
1321
|
+
::CORBA::Boolean
|
|
1322
|
+
TAO::Objref_Traits<R2TAO_AbstractObject>::marshal (
|
|
1323
|
+
const R2TAO_AbstractObject_ptr p,
|
|
1324
|
+
TAO_OutputCDR & cdr)
|
|
1325
|
+
{
|
|
1326
|
+
return cdr << p;
|
|
1327
|
+
}
|
|
1328
|
+
|
|
1329
|
+
//-------------------------------------------------------------------
|
|
1330
|
+
// R2TAO Stream methods
|
|
1331
|
+
//
|
|
1332
|
+
//===================================================================
|
|
1333
|
+
|
|
1334
|
+
// wrapping & unwrapping
|
|
1335
|
+
|
|
1336
|
+
static VALUE
|
|
1337
|
+
r2tao_InputStream_t2r(TAO_InputCDR* strm)
|
|
1338
|
+
{
|
|
1339
|
+
VALUE ret;
|
|
1340
|
+
|
|
1341
|
+
ret = Data_Wrap_Struct(r2tao_cInputStream, 0, 0, strm);
|
|
1342
|
+
|
|
1343
|
+
return ret;
|
|
1344
|
+
}
|
|
1345
|
+
|
|
1346
|
+
static VALUE
|
|
1347
|
+
r2tao_OutputStream_t2r(R2TAO_Value* val)
|
|
1348
|
+
{
|
|
1349
|
+
VALUE ret;
|
|
1350
|
+
|
|
1351
|
+
ret = Data_Wrap_Struct(r2tao_cOutputStream, 0, 0, val);
|
|
1352
|
+
|
|
1353
|
+
return ret;
|
|
1354
|
+
}
|
|
1355
|
+
|
|
1356
|
+
static TAO_InputCDR*
|
|
1357
|
+
r2tao_InputStream_r2t(VALUE strm)
|
|
1358
|
+
{
|
|
1359
|
+
TAO_InputCDR *ret;
|
|
1360
|
+
|
|
1361
|
+
Data_Get_Struct(strm, TAO_InputCDR, ret);
|
|
1362
|
+
|
|
1363
|
+
return ret;
|
|
1364
|
+
}
|
|
1365
|
+
|
|
1366
|
+
static R2TAO_Value*
|
|
1367
|
+
r2tao_OutputStream_r2t(VALUE strm)
|
|
1368
|
+
{
|
|
1369
|
+
R2TAO_Value *ret;
|
|
1370
|
+
|
|
1371
|
+
Data_Get_Struct(strm, R2TAO_Value, ret);
|
|
1372
|
+
|
|
1373
|
+
return ret;
|
|
1374
|
+
}
|
|
1375
|
+
|
|
1376
|
+
// ------------------------------------------------------------------
|
|
1377
|
+
// OutputStream
|
|
1378
|
+
|
|
1379
|
+
VALUE r2tao_OStream_write_any (VALUE self, VALUE rval)
|
|
1380
|
+
{
|
|
1381
|
+
R2TAO_Value* vt = r2tao_OutputStream_r2t(self);
|
|
1382
|
+
R2TAO_TRY {
|
|
1383
|
+
if (NIL_P (rval))
|
|
1384
|
+
{
|
|
1385
|
+
if (TAO_debug_level > 0)
|
|
1386
|
+
ACE_DEBUG ((LM_ERROR, "R2TAO (%P|%t) - OutputStream#write_any:: "
|
|
1387
|
+
"NIL value not allowed\n"));
|
|
1388
|
+
throw CORBA::MARSHAL ();
|
|
1389
|
+
}
|
|
1390
|
+
CORBA::Any* any = 0;
|
|
1391
|
+
ACE_NEW_THROW_EX (any,
|
|
1392
|
+
CORBA::Any (),
|
|
1393
|
+
CORBA::NO_MEMORY());
|
|
1394
|
+
CORBA::Any_var any_safe = any;
|
|
1395
|
+
r2tao_Ruby_to_Any(*any, rval);
|
|
1396
|
+
if (!vt->add_chunk_element (any_safe))
|
|
1397
|
+
throw CORBA::MARSHAL ();
|
|
1398
|
+
} R2TAO_CATCH;
|
|
1399
|
+
return Qnil;
|
|
1400
|
+
}
|
|
1401
|
+
|
|
1402
|
+
VALUE r2tao_OStream_write_boolean (VALUE self, VALUE rval)
|
|
1403
|
+
{
|
|
1404
|
+
R2TAO_Value* vt = r2tao_OutputStream_r2t(self);
|
|
1405
|
+
R2TAO_TRY {
|
|
1406
|
+
CORBA::Any* any = 0;
|
|
1407
|
+
ACE_NEW_THROW_EX (any,
|
|
1408
|
+
CORBA::Any (),
|
|
1409
|
+
CORBA::NO_MEMORY());
|
|
1410
|
+
CORBA::Any_var any_safe = any;
|
|
1411
|
+
CORBA::Boolean f = (NIL_P (rval) || rval == Qfalse) ? 0 : 1;
|
|
1412
|
+
*any <<= CORBA::Any::from_boolean (f);
|
|
1413
|
+
if (!vt->add_chunk_element (any_safe))
|
|
1414
|
+
throw CORBA::MARSHAL ();
|
|
1415
|
+
} R2TAO_CATCH;
|
|
1416
|
+
return Qnil;
|
|
1417
|
+
}
|
|
1418
|
+
|
|
1419
|
+
VALUE r2tao_OStream_write_char (VALUE self, VALUE rval)
|
|
1420
|
+
{
|
|
1421
|
+
R2TAO_Value* vt = r2tao_OutputStream_r2t(self);
|
|
1422
|
+
R2TAO_TRY {
|
|
1423
|
+
CORBA::Any* any = 0;
|
|
1424
|
+
ACE_NEW_THROW_EX (any,
|
|
1425
|
+
CORBA::Any (),
|
|
1426
|
+
CORBA::NO_MEMORY());
|
|
1427
|
+
CORBA::Any_var any_safe = any;
|
|
1428
|
+
CORBA::Char ch = 0;
|
|
1429
|
+
if (!NIL_P (rval))
|
|
1430
|
+
{
|
|
1431
|
+
CHECK_RTYPE(rval, T_STRING);
|
|
1432
|
+
ch = *RSTRING_PTR (rval);
|
|
1433
|
+
}
|
|
1434
|
+
*any <<= CORBA::Any::from_char (ch);
|
|
1435
|
+
if (!vt->add_chunk_element (any_safe))
|
|
1436
|
+
throw CORBA::MARSHAL ();
|
|
1437
|
+
} R2TAO_CATCH;
|
|
1438
|
+
return Qnil;
|
|
1439
|
+
}
|
|
1440
|
+
|
|
1441
|
+
VALUE r2tao_OStream_write_wchar (VALUE self, VALUE rval)
|
|
1442
|
+
{
|
|
1443
|
+
R2TAO_Value* vt = r2tao_OutputStream_r2t(self);
|
|
1444
|
+
R2TAO_TRY {
|
|
1445
|
+
CORBA::Any* any = 0;
|
|
1446
|
+
ACE_NEW_THROW_EX (any,
|
|
1447
|
+
CORBA::Any (),
|
|
1448
|
+
CORBA::NO_MEMORY());
|
|
1449
|
+
CORBA::Any_var any_safe = any;
|
|
1450
|
+
CORBA::WChar wc = NIL_P (rval) ? 0 : NUM2UINT (rval);
|
|
1451
|
+
*any <<= CORBA::Any::from_wchar (wc);
|
|
1452
|
+
if (!vt->add_chunk_element (any_safe))
|
|
1453
|
+
throw CORBA::MARSHAL ();
|
|
1454
|
+
} R2TAO_CATCH;
|
|
1455
|
+
return Qnil;
|
|
1456
|
+
}
|
|
1457
|
+
|
|
1458
|
+
VALUE r2tao_OStream_write_octet (VALUE self, VALUE rval)
|
|
1459
|
+
{
|
|
1460
|
+
R2TAO_Value* vt = r2tao_OutputStream_r2t(self);
|
|
1461
|
+
R2TAO_TRY {
|
|
1462
|
+
CORBA::Any* any = 0;
|
|
1463
|
+
ACE_NEW_THROW_EX (any,
|
|
1464
|
+
CORBA::Any (),
|
|
1465
|
+
CORBA::NO_MEMORY());
|
|
1466
|
+
CORBA::Any_var any_safe = any;
|
|
1467
|
+
CORBA::Octet byte = NIL_P (rval) ? 0 : NUM2UINT (rval);
|
|
1468
|
+
*any <<= CORBA::Any::from_octet (byte);
|
|
1469
|
+
if (!vt->add_chunk_element (any_safe))
|
|
1470
|
+
throw CORBA::MARSHAL ();
|
|
1471
|
+
} R2TAO_CATCH;
|
|
1472
|
+
return Qnil;
|
|
1473
|
+
}
|
|
1474
|
+
|
|
1475
|
+
VALUE r2tao_OStream_write_short (VALUE self, VALUE rval)
|
|
1476
|
+
{
|
|
1477
|
+
R2TAO_Value* vt = r2tao_OutputStream_r2t(self);
|
|
1478
|
+
R2TAO_TRY {
|
|
1479
|
+
CORBA::Any* any = 0;
|
|
1480
|
+
ACE_NEW_THROW_EX (any,
|
|
1481
|
+
CORBA::Any (),
|
|
1482
|
+
CORBA::NO_MEMORY());
|
|
1483
|
+
CORBA::Any_var any_safe = any;
|
|
1484
|
+
CORBA::Short sh = NIL_P (rval) ? 0 : NUM2INT (rval);
|
|
1485
|
+
*any <<= sh;
|
|
1486
|
+
if (!vt->add_chunk_element (any_safe))
|
|
1487
|
+
throw CORBA::MARSHAL ();
|
|
1488
|
+
} R2TAO_CATCH;
|
|
1489
|
+
return Qnil;
|
|
1490
|
+
}
|
|
1491
|
+
|
|
1492
|
+
VALUE r2tao_OStream_write_ushort (VALUE self, VALUE rval)
|
|
1493
|
+
{
|
|
1494
|
+
R2TAO_Value* vt = r2tao_OutputStream_r2t(self);
|
|
1495
|
+
R2TAO_TRY {
|
|
1496
|
+
CORBA::Any* any = 0;
|
|
1497
|
+
ACE_NEW_THROW_EX (any,
|
|
1498
|
+
CORBA::Any (),
|
|
1499
|
+
CORBA::NO_MEMORY());
|
|
1500
|
+
CORBA::Any_var any_safe = any;
|
|
1501
|
+
CORBA::UShort ush = NIL_P (rval) ? 0 : NUM2UINT (rval);
|
|
1502
|
+
*any <<= ush;
|
|
1503
|
+
if (!vt->add_chunk_element (any_safe))
|
|
1504
|
+
throw CORBA::MARSHAL ();
|
|
1505
|
+
} R2TAO_CATCH;
|
|
1506
|
+
return Qnil;
|
|
1507
|
+
}
|
|
1508
|
+
|
|
1509
|
+
VALUE r2tao_OStream_write_long (VALUE self, VALUE rval)
|
|
1510
|
+
{
|
|
1511
|
+
R2TAO_Value* vt = r2tao_OutputStream_r2t(self);
|
|
1512
|
+
R2TAO_TRY {
|
|
1513
|
+
CORBA::Any* any = 0;
|
|
1514
|
+
ACE_NEW_THROW_EX (any,
|
|
1515
|
+
CORBA::Any (),
|
|
1516
|
+
CORBA::NO_MEMORY());
|
|
1517
|
+
CORBA::Any_var any_safe = any;
|
|
1518
|
+
CORBA::Long l = NIL_P (rval) ? 0 : NUM2LONG (rval);
|
|
1519
|
+
*any <<= l;
|
|
1520
|
+
if (!vt->add_chunk_element (any_safe))
|
|
1521
|
+
throw CORBA::MARSHAL ();
|
|
1522
|
+
} R2TAO_CATCH;
|
|
1523
|
+
return Qnil;
|
|
1524
|
+
}
|
|
1525
|
+
|
|
1526
|
+
VALUE r2tao_OStream_write_ulong (VALUE self, VALUE rval)
|
|
1527
|
+
{
|
|
1528
|
+
R2TAO_Value* vt = r2tao_OutputStream_r2t(self);
|
|
1529
|
+
R2TAO_TRY {
|
|
1530
|
+
CORBA::Any* any = 0;
|
|
1531
|
+
ACE_NEW_THROW_EX (any,
|
|
1532
|
+
CORBA::Any (),
|
|
1533
|
+
CORBA::NO_MEMORY());
|
|
1534
|
+
CORBA::Any_var any_safe = any;
|
|
1535
|
+
CORBA::ULong ul = NIL_P (rval) ? 0 : NUM2ULONG (rval);
|
|
1536
|
+
*any <<= ul;
|
|
1537
|
+
if (!vt->add_chunk_element (any_safe))
|
|
1538
|
+
throw CORBA::MARSHAL ();
|
|
1539
|
+
} R2TAO_CATCH;
|
|
1540
|
+
return Qnil;
|
|
1541
|
+
}
|
|
1542
|
+
|
|
1543
|
+
VALUE r2tao_OStream_write_longlong (VALUE self, VALUE rval)
|
|
1544
|
+
{
|
|
1545
|
+
R2TAO_Value* vt = r2tao_OutputStream_r2t(self);
|
|
1546
|
+
R2TAO_TRY {
|
|
1547
|
+
CORBA::Any* any = 0;
|
|
1548
|
+
ACE_NEW_THROW_EX (any,
|
|
1549
|
+
CORBA::Any (),
|
|
1550
|
+
CORBA::NO_MEMORY());
|
|
1551
|
+
CORBA::Any_var any_safe = any;
|
|
1552
|
+
CORBA::LongLong ll = NIL_P (rval) ? 0 : NUM2LL (rval);
|
|
1553
|
+
*any <<= ll;
|
|
1554
|
+
if (!vt->add_chunk_element (any_safe))
|
|
1555
|
+
throw CORBA::MARSHAL ();
|
|
1556
|
+
} R2TAO_CATCH;
|
|
1557
|
+
return Qnil;
|
|
1558
|
+
}
|
|
1559
|
+
|
|
1560
|
+
VALUE r2tao_OStream_write_ulonglong (VALUE self, VALUE rval)
|
|
1561
|
+
{
|
|
1562
|
+
R2TAO_Value* vt = r2tao_OutputStream_r2t(self);
|
|
1563
|
+
R2TAO_TRY {
|
|
1564
|
+
CORBA::Any* any = 0;
|
|
1565
|
+
ACE_NEW_THROW_EX (any,
|
|
1566
|
+
CORBA::Any (),
|
|
1567
|
+
CORBA::NO_MEMORY());
|
|
1568
|
+
CORBA::Any_var any_safe = any;
|
|
1569
|
+
CORBA::ULongLong ull = NIL_P (rval) ? 0 : NUM2ULL (rval);
|
|
1570
|
+
*any <<= ull;
|
|
1571
|
+
if (!vt->add_chunk_element (any_safe))
|
|
1572
|
+
throw CORBA::MARSHAL ();
|
|
1573
|
+
} R2TAO_CATCH;
|
|
1574
|
+
return Qnil;
|
|
1575
|
+
}
|
|
1576
|
+
|
|
1577
|
+
VALUE r2tao_OStream_write_float (VALUE self, VALUE rval)
|
|
1578
|
+
{
|
|
1579
|
+
R2TAO_Value* vt = r2tao_OutputStream_r2t(self);
|
|
1580
|
+
R2TAO_TRY {
|
|
1581
|
+
CORBA::Any* any = 0;
|
|
1582
|
+
ACE_NEW_THROW_EX (any,
|
|
1583
|
+
CORBA::Any (),
|
|
1584
|
+
CORBA::NO_MEMORY());
|
|
1585
|
+
CORBA::Any_var any_safe = any;
|
|
1586
|
+
CORBA::Float f = NIL_P (rval) ? 0.0f : (CORBA::Float)NUM2DBL (rval);
|
|
1587
|
+
*any <<= f;
|
|
1588
|
+
if (!vt->add_chunk_element (any_safe))
|
|
1589
|
+
throw CORBA::MARSHAL ();
|
|
1590
|
+
} R2TAO_CATCH;
|
|
1591
|
+
return Qnil;
|
|
1592
|
+
}
|
|
1593
|
+
|
|
1594
|
+
VALUE r2tao_OStream_write_double (VALUE self, VALUE rval)
|
|
1595
|
+
{
|
|
1596
|
+
R2TAO_Value* vt = r2tao_OutputStream_r2t(self);
|
|
1597
|
+
R2TAO_TRY {
|
|
1598
|
+
CORBA::Any* any = 0;
|
|
1599
|
+
ACE_NEW_THROW_EX (any,
|
|
1600
|
+
CORBA::Any (),
|
|
1601
|
+
CORBA::NO_MEMORY());
|
|
1602
|
+
CORBA::Any_var any_safe = any;
|
|
1603
|
+
CORBA::Double d = NIL_P (rval) ? 0.0 : NUM2DBL (rval);
|
|
1604
|
+
*any <<= d;
|
|
1605
|
+
if (!vt->add_chunk_element (any_safe))
|
|
1606
|
+
throw CORBA::MARSHAL ();
|
|
1607
|
+
} R2TAO_CATCH;
|
|
1608
|
+
return Qnil;
|
|
1609
|
+
}
|
|
1610
|
+
|
|
1611
|
+
VALUE r2tao_OStream_write_longdouble (VALUE self, VALUE rval)
|
|
1612
|
+
{
|
|
1613
|
+
R2TAO_Value* vt = r2tao_OutputStream_r2t(self);
|
|
1614
|
+
R2TAO_TRY {
|
|
1615
|
+
CORBA::Any* any = 0;
|
|
1616
|
+
ACE_NEW_THROW_EX (any,
|
|
1617
|
+
CORBA::Any (),
|
|
1618
|
+
CORBA::NO_MEMORY());
|
|
1619
|
+
CORBA::Any_var any_safe = any;
|
|
1620
|
+
CORBA::LongDouble ld;
|
|
1621
|
+
ACE_CDR_LONG_DOUBLE_ASSIGNMENT (ld, NIL_P (rval) ? 0.0 : RLD2CLD (rval));
|
|
1622
|
+
*any <<= ld;
|
|
1623
|
+
if (!vt->add_chunk_element (any_safe))
|
|
1624
|
+
throw CORBA::MARSHAL ();
|
|
1625
|
+
} R2TAO_CATCH;
|
|
1626
|
+
return Qnil;
|
|
1627
|
+
}
|
|
1628
|
+
|
|
1629
|
+
VALUE r2tao_OStream_write_Object (VALUE self, VALUE rval)
|
|
1630
|
+
{
|
|
1631
|
+
R2TAO_Value* vt = r2tao_OutputStream_r2t(self);
|
|
1632
|
+
R2TAO_TRY {
|
|
1633
|
+
CORBA::Any* any = 0;
|
|
1634
|
+
ACE_NEW_THROW_EX (any,
|
|
1635
|
+
CORBA::Any (),
|
|
1636
|
+
CORBA::NO_MEMORY());
|
|
1637
|
+
CORBA::Any_var any_safe = any;
|
|
1638
|
+
if (!NIL_P (rval))
|
|
1639
|
+
{
|
|
1640
|
+
*any <<= r2corba_Object_r2t (rval);
|
|
1641
|
+
}
|
|
1642
|
+
else
|
|
1643
|
+
{
|
|
1644
|
+
*any <<= CORBA::Object::_nil ();
|
|
1645
|
+
}
|
|
1646
|
+
if (!vt->add_chunk_element (any_safe))
|
|
1647
|
+
throw CORBA::MARSHAL ();
|
|
1648
|
+
} R2TAO_CATCH;
|
|
1649
|
+
return Qnil;
|
|
1650
|
+
}
|
|
1651
|
+
|
|
1652
|
+
VALUE r2tao_OStream_write_Abstract (VALUE self, VALUE rval)
|
|
1653
|
+
{
|
|
1654
|
+
R2TAO_Value* vt = r2tao_OutputStream_r2t(self);
|
|
1655
|
+
R2TAO_TRY {
|
|
1656
|
+
CORBA::Any* any = 0;
|
|
1657
|
+
ACE_NEW_THROW_EX (any,
|
|
1658
|
+
CORBA::Any (),
|
|
1659
|
+
CORBA::NO_MEMORY());
|
|
1660
|
+
CORBA::Any_var any_safe = any;
|
|
1661
|
+
if (rval == Qnil)
|
|
1662
|
+
{
|
|
1663
|
+
TAO::Any_Impl_T<CORBA::AbstractBase>::insert (
|
|
1664
|
+
*any,
|
|
1665
|
+
CORBA::AbstractBase::_tao_any_destructor,
|
|
1666
|
+
CORBA::TypeCode::_nil (), // irrelevant in this case
|
|
1667
|
+
0);
|
|
1668
|
+
}
|
|
1669
|
+
else
|
|
1670
|
+
{
|
|
1671
|
+
r2tao_Ruby_to_Any(*any, rval);
|
|
1672
|
+
}
|
|
1673
|
+
if (!vt->add_chunk_element (any_safe))
|
|
1674
|
+
throw CORBA::MARSHAL ();
|
|
1675
|
+
} R2TAO_CATCH;
|
|
1676
|
+
return Qnil;
|
|
1677
|
+
}
|
|
1678
|
+
|
|
1679
|
+
VALUE r2tao_OStream_write_Value (VALUE self, VALUE rval)
|
|
1680
|
+
{
|
|
1681
|
+
R2TAO_Value* vt = r2tao_OutputStream_r2t(self);
|
|
1682
|
+
R2TAO_TRY {
|
|
1683
|
+
CORBA::Any* any = 0;
|
|
1684
|
+
ACE_NEW_THROW_EX (any,
|
|
1685
|
+
CORBA::Any (),
|
|
1686
|
+
CORBA::NO_MEMORY());
|
|
1687
|
+
CORBA::Any_var any_safe = any;
|
|
1688
|
+
if (rval == Qnil)
|
|
1689
|
+
{
|
|
1690
|
+
TAO::Any_Impl_T<R2TAO_Value>::insert (
|
|
1691
|
+
*any,
|
|
1692
|
+
R2TAO_Value::_tao_any_destructor,
|
|
1693
|
+
CORBA::TypeCode::_nil (), // irrelevant in this case
|
|
1694
|
+
0);
|
|
1695
|
+
}
|
|
1696
|
+
else
|
|
1697
|
+
{
|
|
1698
|
+
r2tao_Ruby_to_Any(*any, rval);
|
|
1699
|
+
}
|
|
1700
|
+
if (!vt->add_chunk_element (any_safe))
|
|
1701
|
+
throw CORBA::MARSHAL ();
|
|
1702
|
+
} R2TAO_CATCH;
|
|
1703
|
+
return Qnil;
|
|
1704
|
+
}
|
|
1705
|
+
|
|
1706
|
+
VALUE r2tao_OStream_write_TypeCode (VALUE self, VALUE rval)
|
|
1707
|
+
{
|
|
1708
|
+
R2TAO_Value* vt = r2tao_OutputStream_r2t(self);
|
|
1709
|
+
R2TAO_TRY {
|
|
1710
|
+
CORBA::Any* any = 0;
|
|
1711
|
+
ACE_NEW_THROW_EX (any,
|
|
1712
|
+
CORBA::Any (),
|
|
1713
|
+
CORBA::NO_MEMORY());
|
|
1714
|
+
CORBA::Any_var any_safe = any;
|
|
1715
|
+
if (!NIL_P (rval))
|
|
1716
|
+
{
|
|
1717
|
+
CORBA::TypeCode_ptr tctc = r2corba_TypeCode_r2t (rval);
|
|
1718
|
+
*any <<= tctc;
|
|
1719
|
+
}
|
|
1720
|
+
else
|
|
1721
|
+
{
|
|
1722
|
+
*any <<= CORBA::TypeCode::_nil ();
|
|
1723
|
+
}
|
|
1724
|
+
if (!vt->add_chunk_element (any_safe))
|
|
1725
|
+
throw CORBA::MARSHAL ();
|
|
1726
|
+
} R2TAO_CATCH;
|
|
1727
|
+
return Qnil;
|
|
1728
|
+
}
|
|
1729
|
+
|
|
1730
|
+
VALUE r2tao_OStream_write_fixed (VALUE , VALUE )
|
|
1731
|
+
{
|
|
1732
|
+
X_CORBA (NO_IMPLEMENT);
|
|
1733
|
+
}
|
|
1734
|
+
|
|
1735
|
+
VALUE r2tao_OStream_write_string (VALUE self, VALUE rval)
|
|
1736
|
+
{
|
|
1737
|
+
R2TAO_Value* vt = r2tao_OutputStream_r2t(self);
|
|
1738
|
+
R2TAO_TRY {
|
|
1739
|
+
CORBA::Any* any = 0;
|
|
1740
|
+
ACE_NEW_THROW_EX (any,
|
|
1741
|
+
CORBA::Any (),
|
|
1742
|
+
CORBA::NO_MEMORY());
|
|
1743
|
+
CORBA::Any_var any_safe = any;
|
|
1744
|
+
if (NIL_P (rval))
|
|
1745
|
+
{
|
|
1746
|
+
*any <<= (char*)0;
|
|
1747
|
+
}
|
|
1748
|
+
else
|
|
1749
|
+
{
|
|
1750
|
+
CHECK_RTYPE(rval, T_STRING);
|
|
1751
|
+
*any <<= RSTRING_PTR (rval);
|
|
1752
|
+
}
|
|
1753
|
+
if (!vt->add_chunk_element (any_safe))
|
|
1754
|
+
throw CORBA::MARSHAL ();
|
|
1755
|
+
} R2TAO_CATCH;
|
|
1756
|
+
return Qnil;
|
|
1757
|
+
}
|
|
1758
|
+
|
|
1759
|
+
VALUE r2tao_OStream_write_wstring (VALUE self, VALUE rval)
|
|
1760
|
+
{
|
|
1761
|
+
R2TAO_Value* vt = r2tao_OutputStream_r2t(self);
|
|
1762
|
+
R2TAO_TRY {
|
|
1763
|
+
CORBA::Any* any = 0;
|
|
1764
|
+
ACE_NEW_THROW_EX (any,
|
|
1765
|
+
CORBA::Any (),
|
|
1766
|
+
CORBA::NO_MEMORY());
|
|
1767
|
+
CORBA::Any_var any_safe = any;
|
|
1768
|
+
if (NIL_P (rval))
|
|
1769
|
+
{
|
|
1770
|
+
*any <<= (CORBA::WChar*)0;
|
|
1771
|
+
}
|
|
1772
|
+
else
|
|
1773
|
+
{
|
|
1774
|
+
CHECK_RTYPE(rval, T_ARRAY);
|
|
1775
|
+
CORBA::ULong alen = static_cast<unsigned long> (RARRAY_LEN (rval));
|
|
1776
|
+
CORBA::WString_var ws = CORBA::wstring_alloc (alen+1);
|
|
1777
|
+
for (CORBA::ULong l=0; l<alen ;++l)
|
|
1778
|
+
{
|
|
1779
|
+
ws[l] = static_cast<CORBA::WChar> (NUM2INT (rb_ary_entry (rval, l)));
|
|
1780
|
+
}
|
|
1781
|
+
ws[alen] = static_cast<CORBA::WChar> (0);
|
|
1782
|
+
*any <<= ws;
|
|
1783
|
+
}
|
|
1784
|
+
if (!vt->add_chunk_element (any_safe))
|
|
1785
|
+
throw CORBA::MARSHAL ();
|
|
1786
|
+
} R2TAO_CATCH;
|
|
1787
|
+
return Qnil;
|
|
1788
|
+
}
|
|
1789
|
+
|
|
1790
|
+
VALUE r2tao_OStream_write_any_array (VALUE self, VALUE rval, VALUE offset, VALUE length)
|
|
1791
|
+
{
|
|
1792
|
+
R2TAO_Value* vt = r2tao_OutputStream_r2t(self);
|
|
1793
|
+
R2TAO_TRY {
|
|
1794
|
+
CORBA::Any* any = 0;
|
|
1795
|
+
ACE_NEW_THROW_EX (any,
|
|
1796
|
+
CORBA::Any (),
|
|
1797
|
+
CORBA::NO_MEMORY());
|
|
1798
|
+
CORBA::Any_var any_safe = any;
|
|
1799
|
+
|
|
1800
|
+
CHECK_RTYPE(rval, T_ARRAY);
|
|
1801
|
+
CORBA::ULong asz = static_cast<unsigned long> (RARRAY_LEN (rval));
|
|
1802
|
+
CORBA::ULong offs = NUM2ULONG (offset);
|
|
1803
|
+
CORBA::ULong alen = NUM2ULONG (length);
|
|
1804
|
+
CORBA::ULong len = ((offs + alen) <= asz) ? alen : (offs < asz ? (asz - offs) : 0);
|
|
1805
|
+
if (len > 0)
|
|
1806
|
+
{
|
|
1807
|
+
CORBA::Any* any_array = 0;
|
|
1808
|
+
ACE_NEW_THROW_EX (any_array,
|
|
1809
|
+
CORBA::Any[len],
|
|
1810
|
+
CORBA::NO_MEMORY());
|
|
1811
|
+
ACE_Auto_Ptr<CORBA::Any> any_array_safe (any_array);
|
|
1812
|
+
for (CORBA::ULong l=0; l<len ;++l)
|
|
1813
|
+
{
|
|
1814
|
+
VALUE rel = rb_ary_entry (rval, offs+l);
|
|
1815
|
+
r2tao_Ruby_to_Any(any_array[l], rel);
|
|
1816
|
+
}
|
|
1817
|
+
R2TAO_ArrayAny_Impl_T<CORBA::Any>::insert (*any,
|
|
1818
|
+
CORBA::_tc_any,
|
|
1819
|
+
any_array_safe.release (),
|
|
1820
|
+
len);
|
|
1821
|
+
|
|
1822
|
+
if (!vt->add_chunk_element (any_safe))
|
|
1823
|
+
throw CORBA::MARSHAL ();
|
|
1824
|
+
}
|
|
1825
|
+
} R2TAO_CATCH;
|
|
1826
|
+
return Qnil;
|
|
1827
|
+
}
|
|
1828
|
+
|
|
1829
|
+
VALUE r2tao_OStream_write_boolean_array (VALUE self, VALUE rval, VALUE offset, VALUE length)
|
|
1830
|
+
{
|
|
1831
|
+
R2TAO_Value* vt = r2tao_OutputStream_r2t(self);
|
|
1832
|
+
R2TAO_TRY {
|
|
1833
|
+
CORBA::Any* any = 0;
|
|
1834
|
+
ACE_NEW_THROW_EX (any,
|
|
1835
|
+
CORBA::Any (),
|
|
1836
|
+
CORBA::NO_MEMORY());
|
|
1837
|
+
CORBA::Any_var any_safe = any;
|
|
1838
|
+
|
|
1839
|
+
CHECK_RTYPE(rval, T_ARRAY);
|
|
1840
|
+
CORBA::ULong asz = static_cast<unsigned long> (RARRAY_LEN (rval));
|
|
1841
|
+
CORBA::ULong offs = NUM2ULONG (offset);
|
|
1842
|
+
CORBA::ULong alen = NUM2ULONG (length);
|
|
1843
|
+
CORBA::ULong len = ((offs + alen) <= asz) ? alen : (offs < asz ? (asz - offs) : 0);
|
|
1844
|
+
if (len > 0)
|
|
1845
|
+
{
|
|
1846
|
+
CORBA::Boolean* native_array = 0;
|
|
1847
|
+
ACE_NEW_THROW_EX (native_array,
|
|
1848
|
+
CORBA::Boolean[len],
|
|
1849
|
+
CORBA::NO_MEMORY());
|
|
1850
|
+
ACE_Auto_Ptr<CORBA::Boolean> native_array_safe (native_array);
|
|
1851
|
+
for (CORBA::ULong l=0; l<len ;++l)
|
|
1852
|
+
{
|
|
1853
|
+
VALUE rel = rb_ary_entry (rval, offs+l);
|
|
1854
|
+
native_array[l] = (NIL_P (rel) || rel == Qfalse) ? 0 : 1;
|
|
1855
|
+
}
|
|
1856
|
+
R2TAO_ArrayAny_Impl_T<CORBA::Boolean>::insert (*any,
|
|
1857
|
+
CORBA::_tc_boolean,
|
|
1858
|
+
native_array_safe.release (),
|
|
1859
|
+
len);
|
|
1860
|
+
|
|
1861
|
+
if (!vt->add_chunk_element (any_safe))
|
|
1862
|
+
throw CORBA::MARSHAL ();
|
|
1863
|
+
}
|
|
1864
|
+
} R2TAO_CATCH;
|
|
1865
|
+
return Qnil;
|
|
1866
|
+
}
|
|
1867
|
+
|
|
1868
|
+
VALUE r2tao_OStream_write_char_array (VALUE self, VALUE rval, VALUE offset, VALUE length)
|
|
1869
|
+
{
|
|
1870
|
+
R2TAO_Value* vt = r2tao_OutputStream_r2t(self);
|
|
1871
|
+
R2TAO_TRY {
|
|
1872
|
+
CORBA::Any* any = 0;
|
|
1873
|
+
ACE_NEW_THROW_EX (any,
|
|
1874
|
+
CORBA::Any (),
|
|
1875
|
+
CORBA::NO_MEMORY());
|
|
1876
|
+
CORBA::Any_var any_safe = any;
|
|
1877
|
+
|
|
1878
|
+
CHECK_RTYPE(rval, T_STRING);
|
|
1879
|
+
CORBA::ULong asz = static_cast<unsigned long> (RSTRING_LEN (rval));
|
|
1880
|
+
CORBA::ULong offs = NUM2ULONG (offset);
|
|
1881
|
+
CORBA::ULong alen = NUM2ULONG (length);
|
|
1882
|
+
CORBA::ULong len = ((offs + alen) <= asz) ? alen : (offs < asz ? (asz - offs) : 0);
|
|
1883
|
+
if (len > 0)
|
|
1884
|
+
{
|
|
1885
|
+
CORBA::Char* native_array = 0;
|
|
1886
|
+
ACE_NEW_THROW_EX (native_array,
|
|
1887
|
+
CORBA::Char[len],
|
|
1888
|
+
CORBA::NO_MEMORY());
|
|
1889
|
+
ACE_Auto_Ptr<CORBA::Char> native_array_safe (native_array);
|
|
1890
|
+
char* s = RSTRING_PTR (rval);
|
|
1891
|
+
for (CORBA::ULong l=0; l<len ;++l)
|
|
1892
|
+
{
|
|
1893
|
+
native_array[l] = s[offs+l];
|
|
1894
|
+
}
|
|
1895
|
+
R2TAO_ArrayAny_Impl_T<CORBA::Char>::insert (*any,
|
|
1896
|
+
CORBA::_tc_char,
|
|
1897
|
+
native_array_safe.release (),
|
|
1898
|
+
len);
|
|
1899
|
+
|
|
1900
|
+
if (!vt->add_chunk_element (any_safe))
|
|
1901
|
+
throw CORBA::MARSHAL ();
|
|
1902
|
+
}
|
|
1903
|
+
} R2TAO_CATCH;
|
|
1904
|
+
return Qnil;
|
|
1905
|
+
}
|
|
1906
|
+
|
|
1907
|
+
VALUE r2tao_OStream_write_wchar_array (VALUE self, VALUE rval, VALUE offset, VALUE length)
|
|
1908
|
+
{
|
|
1909
|
+
R2TAO_Value* vt = r2tao_OutputStream_r2t(self);
|
|
1910
|
+
R2TAO_TRY {
|
|
1911
|
+
CORBA::Any* any = 0;
|
|
1912
|
+
ACE_NEW_THROW_EX (any,
|
|
1913
|
+
CORBA::Any (),
|
|
1914
|
+
CORBA::NO_MEMORY());
|
|
1915
|
+
CORBA::Any_var any_safe = any;
|
|
1916
|
+
|
|
1917
|
+
CHECK_RTYPE(rval, T_ARRAY);
|
|
1918
|
+
CORBA::ULong asz = static_cast<unsigned long> (RARRAY_LEN (rval));
|
|
1919
|
+
CORBA::ULong offs = NUM2ULONG (offset);
|
|
1920
|
+
CORBA::ULong alen = NUM2ULONG (length);
|
|
1921
|
+
CORBA::ULong len = ((offs + alen) <= asz) ? alen : (offs < asz ? (asz - offs) : 0);
|
|
1922
|
+
if (len > 0)
|
|
1923
|
+
{
|
|
1924
|
+
CORBA::WChar* native_array = 0;
|
|
1925
|
+
ACE_NEW_THROW_EX (native_array,
|
|
1926
|
+
CORBA::WChar[len],
|
|
1927
|
+
CORBA::NO_MEMORY());
|
|
1928
|
+
ACE_Auto_Ptr<CORBA::WChar> native_array_safe (native_array);
|
|
1929
|
+
for (CORBA::ULong l=0; l<len ;++l)
|
|
1930
|
+
{
|
|
1931
|
+
VALUE rel = rb_ary_entry (rval, offs+l);
|
|
1932
|
+
native_array[l] = (CORBA::WChar)NUM2INT (rel);
|
|
1933
|
+
}
|
|
1934
|
+
R2TAO_ArrayAny_Impl_T<CORBA::WChar>::insert (*any,
|
|
1935
|
+
CORBA::_tc_wchar,
|
|
1936
|
+
native_array_safe.release (),
|
|
1937
|
+
len);
|
|
1938
|
+
|
|
1939
|
+
if (!vt->add_chunk_element (any_safe))
|
|
1940
|
+
throw CORBA::MARSHAL ();
|
|
1941
|
+
}
|
|
1942
|
+
} R2TAO_CATCH;
|
|
1943
|
+
return Qnil;
|
|
1944
|
+
}
|
|
1945
|
+
|
|
1946
|
+
VALUE r2tao_OStream_write_octet_array (VALUE self, VALUE rval, VALUE offset, VALUE length)
|
|
1947
|
+
{
|
|
1948
|
+
R2TAO_Value* vt = r2tao_OutputStream_r2t(self);
|
|
1949
|
+
R2TAO_TRY {
|
|
1950
|
+
CORBA::Any* any = 0;
|
|
1951
|
+
ACE_NEW_THROW_EX (any,
|
|
1952
|
+
CORBA::Any (),
|
|
1953
|
+
CORBA::NO_MEMORY());
|
|
1954
|
+
CORBA::Any_var any_safe = any;
|
|
1955
|
+
|
|
1956
|
+
CHECK_RTYPE(rval, T_STRING);
|
|
1957
|
+
CORBA::ULong asz = static_cast<unsigned long> (RSTRING_LEN (rval));
|
|
1958
|
+
CORBA::ULong offs = NUM2ULONG (offset);
|
|
1959
|
+
CORBA::ULong alen = NUM2ULONG (length);
|
|
1960
|
+
CORBA::ULong len = ((offs + alen) <= asz) ? alen : (offs < asz ? (asz - offs) : 0);
|
|
1961
|
+
if (len > 0)
|
|
1962
|
+
{
|
|
1963
|
+
CORBA::Octet* native_array = 0;
|
|
1964
|
+
ACE_NEW_THROW_EX (native_array,
|
|
1965
|
+
CORBA::Octet[len],
|
|
1966
|
+
CORBA::NO_MEMORY());
|
|
1967
|
+
ACE_Auto_Ptr<CORBA::Octet> native_array_safe (native_array);
|
|
1968
|
+
unsigned char* s = (unsigned char*)RSTRING_PTR (rval);
|
|
1969
|
+
for (CORBA::ULong l=0; l<len ;++l)
|
|
1970
|
+
{
|
|
1971
|
+
native_array[l] = s[offs+l];
|
|
1972
|
+
}
|
|
1973
|
+
R2TAO_ArrayAny_Impl_T<CORBA::Octet>::insert (*any,
|
|
1974
|
+
CORBA::_tc_octet,
|
|
1975
|
+
native_array_safe.release (),
|
|
1976
|
+
len);
|
|
1977
|
+
|
|
1978
|
+
if (!vt->add_chunk_element (any_safe))
|
|
1979
|
+
throw CORBA::MARSHAL ();
|
|
1980
|
+
}
|
|
1981
|
+
} R2TAO_CATCH;
|
|
1982
|
+
return Qnil;
|
|
1983
|
+
}
|
|
1984
|
+
|
|
1985
|
+
VALUE r2tao_OStream_write_short_array (VALUE self, VALUE rval, VALUE offset, VALUE length)
|
|
1986
|
+
{
|
|
1987
|
+
R2TAO_Value* vt = r2tao_OutputStream_r2t(self);
|
|
1988
|
+
R2TAO_TRY {
|
|
1989
|
+
CORBA::Any* any = 0;
|
|
1990
|
+
ACE_NEW_THROW_EX (any,
|
|
1991
|
+
CORBA::Any (),
|
|
1992
|
+
CORBA::NO_MEMORY());
|
|
1993
|
+
CORBA::Any_var any_safe = any;
|
|
1994
|
+
|
|
1995
|
+
CHECK_RTYPE(rval, T_ARRAY);
|
|
1996
|
+
CORBA::ULong asz = static_cast<unsigned long> (RARRAY_LEN (rval));
|
|
1997
|
+
CORBA::ULong offs = NUM2ULONG (offset);
|
|
1998
|
+
CORBA::ULong alen = NUM2ULONG (length);
|
|
1999
|
+
CORBA::ULong len = ((offs + alen) <= asz) ? alen : (offs < asz ? (asz - offs) : 0);
|
|
2000
|
+
if (len > 0)
|
|
2001
|
+
{
|
|
2002
|
+
CORBA::Short* native_array = 0;
|
|
2003
|
+
ACE_NEW_THROW_EX (native_array,
|
|
2004
|
+
CORBA::Short[len],
|
|
2005
|
+
CORBA::NO_MEMORY());
|
|
2006
|
+
ACE_Auto_Ptr<CORBA::Short> native_array_safe (native_array);
|
|
2007
|
+
for (CORBA::ULong l=0; l<len ;++l)
|
|
2008
|
+
{
|
|
2009
|
+
VALUE rel = rb_ary_entry (rval, offs+l);
|
|
2010
|
+
native_array[l] = (CORBA::Short)NUM2INT (rel);
|
|
2011
|
+
}
|
|
2012
|
+
R2TAO_ArrayAny_Impl_T<CORBA::Short>::insert (*any,
|
|
2013
|
+
CORBA::_tc_short,
|
|
2014
|
+
native_array_safe.release (),
|
|
2015
|
+
len);
|
|
2016
|
+
|
|
2017
|
+
if (!vt->add_chunk_element (any_safe))
|
|
2018
|
+
throw CORBA::MARSHAL ();
|
|
2019
|
+
}
|
|
2020
|
+
} R2TAO_CATCH;
|
|
2021
|
+
return Qnil;
|
|
2022
|
+
}
|
|
2023
|
+
|
|
2024
|
+
VALUE r2tao_OStream_write_ushort_array (VALUE self, VALUE rval, VALUE offset, VALUE length)
|
|
2025
|
+
{
|
|
2026
|
+
R2TAO_Value* vt = r2tao_OutputStream_r2t(self);
|
|
2027
|
+
R2TAO_TRY {
|
|
2028
|
+
CORBA::Any* any = 0;
|
|
2029
|
+
ACE_NEW_THROW_EX (any,
|
|
2030
|
+
CORBA::Any (),
|
|
2031
|
+
CORBA::NO_MEMORY());
|
|
2032
|
+
CORBA::Any_var any_safe = any;
|
|
2033
|
+
|
|
2034
|
+
CHECK_RTYPE(rval, T_ARRAY);
|
|
2035
|
+
CORBA::ULong asz = static_cast<unsigned long> (RARRAY_LEN (rval));
|
|
2036
|
+
CORBA::ULong offs = NUM2ULONG (offset);
|
|
2037
|
+
CORBA::ULong alen = NUM2ULONG (length);
|
|
2038
|
+
CORBA::ULong len = ((offs + alen) <= asz) ? alen : (offs < asz ? (asz - offs) : 0);
|
|
2039
|
+
if (len > 0)
|
|
2040
|
+
{
|
|
2041
|
+
CORBA::UShort* native_array = 0;
|
|
2042
|
+
ACE_NEW_THROW_EX (native_array,
|
|
2043
|
+
CORBA::UShort[len],
|
|
2044
|
+
CORBA::NO_MEMORY());
|
|
2045
|
+
ACE_Auto_Ptr<CORBA::UShort> native_array_safe (native_array);
|
|
2046
|
+
for (CORBA::ULong l=0; l<len ;++l)
|
|
2047
|
+
{
|
|
2048
|
+
VALUE rel = rb_ary_entry (rval, offs+l);
|
|
2049
|
+
native_array[l] = (CORBA::UShort)NUM2UINT (rel);
|
|
2050
|
+
}
|
|
2051
|
+
R2TAO_ArrayAny_Impl_T<CORBA::UShort>::insert (*any,
|
|
2052
|
+
CORBA::_tc_ushort,
|
|
2053
|
+
native_array_safe.release (),
|
|
2054
|
+
len);
|
|
2055
|
+
|
|
2056
|
+
if (!vt->add_chunk_element (any_safe))
|
|
2057
|
+
throw CORBA::MARSHAL ();
|
|
2058
|
+
}
|
|
2059
|
+
} R2TAO_CATCH;
|
|
2060
|
+
return Qnil;
|
|
2061
|
+
}
|
|
2062
|
+
|
|
2063
|
+
VALUE r2tao_OStream_write_long_array (VALUE self, VALUE rval, VALUE offset, VALUE length)
|
|
2064
|
+
{
|
|
2065
|
+
R2TAO_Value* vt = r2tao_OutputStream_r2t(self);
|
|
2066
|
+
R2TAO_TRY {
|
|
2067
|
+
CORBA::Any* any = 0;
|
|
2068
|
+
ACE_NEW_THROW_EX (any,
|
|
2069
|
+
CORBA::Any (),
|
|
2070
|
+
CORBA::NO_MEMORY());
|
|
2071
|
+
CORBA::Any_var any_safe = any;
|
|
2072
|
+
|
|
2073
|
+
CHECK_RTYPE(rval, T_ARRAY);
|
|
2074
|
+
CORBA::ULong asz = static_cast<unsigned long> (RARRAY_LEN (rval));
|
|
2075
|
+
CORBA::ULong offs = NUM2ULONG (offset);
|
|
2076
|
+
CORBA::ULong alen = NUM2ULONG (length);
|
|
2077
|
+
CORBA::ULong len = ((offs + alen) <= asz) ? alen : (offs < asz ? (asz - offs) : 0);
|
|
2078
|
+
if (len > 0)
|
|
2079
|
+
{
|
|
2080
|
+
CORBA::Long* native_array = 0;
|
|
2081
|
+
ACE_NEW_THROW_EX (native_array,
|
|
2082
|
+
CORBA::Long[len],
|
|
2083
|
+
CORBA::NO_MEMORY());
|
|
2084
|
+
ACE_Auto_Ptr<CORBA::Long> native_array_safe (native_array);
|
|
2085
|
+
for (CORBA::ULong l=0; l<len ;++l)
|
|
2086
|
+
{
|
|
2087
|
+
VALUE rel = rb_ary_entry (rval, offs+l);
|
|
2088
|
+
native_array[l] = (CORBA::Long)NUM2LONG (rel);
|
|
2089
|
+
}
|
|
2090
|
+
R2TAO_ArrayAny_Impl_T<CORBA::Long>::insert (*any,
|
|
2091
|
+
CORBA::_tc_long,
|
|
2092
|
+
native_array_safe.release (),
|
|
2093
|
+
len);
|
|
2094
|
+
|
|
2095
|
+
if (!vt->add_chunk_element (any_safe))
|
|
2096
|
+
throw CORBA::MARSHAL ();
|
|
2097
|
+
}
|
|
2098
|
+
} R2TAO_CATCH;
|
|
2099
|
+
return Qnil;
|
|
2100
|
+
}
|
|
2101
|
+
|
|
2102
|
+
VALUE r2tao_OStream_write_ulong_array (VALUE self, VALUE rval, VALUE offset, VALUE length)
|
|
2103
|
+
{
|
|
2104
|
+
R2TAO_Value* vt = r2tao_OutputStream_r2t(self);
|
|
2105
|
+
R2TAO_TRY {
|
|
2106
|
+
CORBA::Any* any = 0;
|
|
2107
|
+
ACE_NEW_THROW_EX (any,
|
|
2108
|
+
CORBA::Any (),
|
|
2109
|
+
CORBA::NO_MEMORY());
|
|
2110
|
+
CORBA::Any_var any_safe = any;
|
|
2111
|
+
|
|
2112
|
+
CHECK_RTYPE(rval, T_ARRAY);
|
|
2113
|
+
CORBA::ULong asz = static_cast<unsigned long> (RARRAY_LEN (rval));
|
|
2114
|
+
CORBA::ULong offs = NUM2ULONG (offset);
|
|
2115
|
+
CORBA::ULong alen = NUM2ULONG (length);
|
|
2116
|
+
CORBA::ULong len = ((offs + alen) <= asz) ? alen : (offs < asz ? (asz - offs) : 0);
|
|
2117
|
+
if (len > 0)
|
|
2118
|
+
{
|
|
2119
|
+
CORBA::ULong* native_array = 0;
|
|
2120
|
+
ACE_NEW_THROW_EX (native_array,
|
|
2121
|
+
CORBA::ULong[len],
|
|
2122
|
+
CORBA::NO_MEMORY());
|
|
2123
|
+
ACE_Auto_Ptr<CORBA::ULong> native_array_safe (native_array);
|
|
2124
|
+
for (CORBA::ULong l=0; l<len ;++l)
|
|
2125
|
+
{
|
|
2126
|
+
VALUE rel = rb_ary_entry (rval, offs+l);
|
|
2127
|
+
native_array[l] = (CORBA::ULong)NUM2ULONG (rel);
|
|
2128
|
+
}
|
|
2129
|
+
R2TAO_ArrayAny_Impl_T<CORBA::ULong>::insert (*any,
|
|
2130
|
+
CORBA::_tc_ulong,
|
|
2131
|
+
native_array_safe.release (),
|
|
2132
|
+
len);
|
|
2133
|
+
|
|
2134
|
+
if (!vt->add_chunk_element (any_safe))
|
|
2135
|
+
throw CORBA::MARSHAL ();
|
|
2136
|
+
}
|
|
2137
|
+
} R2TAO_CATCH;
|
|
2138
|
+
return Qnil;
|
|
2139
|
+
}
|
|
2140
|
+
|
|
2141
|
+
VALUE r2tao_OStream_write_longlong_array (VALUE self, VALUE rval, VALUE offset, VALUE length)
|
|
2142
|
+
{
|
|
2143
|
+
R2TAO_Value* vt = r2tao_OutputStream_r2t(self);
|
|
2144
|
+
R2TAO_TRY {
|
|
2145
|
+
CORBA::Any* any = 0;
|
|
2146
|
+
ACE_NEW_THROW_EX (any,
|
|
2147
|
+
CORBA::Any (),
|
|
2148
|
+
CORBA::NO_MEMORY());
|
|
2149
|
+
CORBA::Any_var any_safe = any;
|
|
2150
|
+
|
|
2151
|
+
CHECK_RTYPE(rval, T_ARRAY);
|
|
2152
|
+
CORBA::ULong asz = static_cast<unsigned long> (RARRAY_LEN (rval));
|
|
2153
|
+
CORBA::ULong offs = NUM2ULONG (offset);
|
|
2154
|
+
CORBA::ULong alen = NUM2ULONG (length);
|
|
2155
|
+
CORBA::ULong len = ((offs + alen) <= asz) ? alen : (offs < asz ? (asz - offs) : 0);
|
|
2156
|
+
if (len > 0)
|
|
2157
|
+
{
|
|
2158
|
+
CORBA::LongLong* native_array = 0;
|
|
2159
|
+
ACE_NEW_THROW_EX (native_array,
|
|
2160
|
+
CORBA::LongLong[len],
|
|
2161
|
+
CORBA::NO_MEMORY());
|
|
2162
|
+
ACE_Auto_Ptr<CORBA::LongLong> native_array_safe (native_array);
|
|
2163
|
+
for (CORBA::ULong l=0; l<len ;++l)
|
|
2164
|
+
{
|
|
2165
|
+
VALUE rel = rb_ary_entry (rval, offs+l);
|
|
2166
|
+
native_array[l] = (CORBA::LongLong)NUM2LL (rel);
|
|
2167
|
+
}
|
|
2168
|
+
R2TAO_ArrayAny_Impl_T<CORBA::LongLong>::insert (*any,
|
|
2169
|
+
CORBA::_tc_longlong,
|
|
2170
|
+
native_array_safe.release (),
|
|
2171
|
+
len);
|
|
2172
|
+
|
|
2173
|
+
if (!vt->add_chunk_element (any_safe))
|
|
2174
|
+
throw CORBA::MARSHAL ();
|
|
2175
|
+
}
|
|
2176
|
+
} R2TAO_CATCH;
|
|
2177
|
+
return Qnil;
|
|
2178
|
+
}
|
|
2179
|
+
|
|
2180
|
+
VALUE r2tao_OStream_write_ulonglong_array (VALUE self, VALUE rval, VALUE offset, VALUE length)
|
|
2181
|
+
{
|
|
2182
|
+
R2TAO_Value* vt = r2tao_OutputStream_r2t(self);
|
|
2183
|
+
R2TAO_TRY {
|
|
2184
|
+
CORBA::Any* any = 0;
|
|
2185
|
+
ACE_NEW_THROW_EX (any,
|
|
2186
|
+
CORBA::Any (),
|
|
2187
|
+
CORBA::NO_MEMORY());
|
|
2188
|
+
CORBA::Any_var any_safe = any;
|
|
2189
|
+
|
|
2190
|
+
CHECK_RTYPE(rval, T_ARRAY);
|
|
2191
|
+
CORBA::ULong asz = static_cast<unsigned long> (RARRAY_LEN (rval));
|
|
2192
|
+
CORBA::ULong offs = NUM2ULONG (offset);
|
|
2193
|
+
CORBA::ULong alen = NUM2ULONG (length);
|
|
2194
|
+
CORBA::ULong len = ((offs + alen) <= asz) ? alen : (offs < asz ? (asz - offs) : 0);
|
|
2195
|
+
if (len > 0)
|
|
2196
|
+
{
|
|
2197
|
+
CORBA::ULongLong* native_array = 0;
|
|
2198
|
+
ACE_NEW_THROW_EX (native_array,
|
|
2199
|
+
CORBA::ULongLong[len],
|
|
2200
|
+
CORBA::NO_MEMORY());
|
|
2201
|
+
ACE_Auto_Ptr<CORBA::ULongLong> native_array_safe (native_array);
|
|
2202
|
+
for (CORBA::ULong l=0; l<len ;++l)
|
|
2203
|
+
{
|
|
2204
|
+
VALUE rel = rb_ary_entry (rval, offs+l);
|
|
2205
|
+
native_array[l] = (CORBA::ULongLong)NUM2ULL (rel);
|
|
2206
|
+
}
|
|
2207
|
+
R2TAO_ArrayAny_Impl_T<CORBA::ULongLong>::insert (*any,
|
|
2208
|
+
CORBA::_tc_ulonglong,
|
|
2209
|
+
native_array_safe.release (),
|
|
2210
|
+
len);
|
|
2211
|
+
|
|
2212
|
+
if (!vt->add_chunk_element (any_safe))
|
|
2213
|
+
throw CORBA::MARSHAL ();
|
|
2214
|
+
}
|
|
2215
|
+
} R2TAO_CATCH;
|
|
2216
|
+
return Qnil;
|
|
2217
|
+
}
|
|
2218
|
+
|
|
2219
|
+
VALUE r2tao_OStream_write_float_array (VALUE self, VALUE rval, VALUE offset, VALUE length)
|
|
2220
|
+
{
|
|
2221
|
+
R2TAO_Value* vt = r2tao_OutputStream_r2t(self);
|
|
2222
|
+
R2TAO_TRY {
|
|
2223
|
+
CORBA::Any* any = 0;
|
|
2224
|
+
ACE_NEW_THROW_EX (any,
|
|
2225
|
+
CORBA::Any (),
|
|
2226
|
+
CORBA::NO_MEMORY());
|
|
2227
|
+
CORBA::Any_var any_safe = any;
|
|
2228
|
+
|
|
2229
|
+
CHECK_RTYPE(rval, T_ARRAY);
|
|
2230
|
+
CORBA::ULong asz = static_cast<unsigned long> (RARRAY_LEN (rval));
|
|
2231
|
+
CORBA::ULong offs = NUM2ULONG (offset);
|
|
2232
|
+
CORBA::ULong alen = NUM2ULONG (length);
|
|
2233
|
+
CORBA::ULong len = ((offs + alen) <= asz) ? alen : (offs < asz ? (asz - offs) : 0);
|
|
2234
|
+
if (len > 0)
|
|
2235
|
+
{
|
|
2236
|
+
CORBA::Float* native_array = 0;
|
|
2237
|
+
ACE_NEW_THROW_EX (native_array,
|
|
2238
|
+
CORBA::Float[len],
|
|
2239
|
+
CORBA::NO_MEMORY());
|
|
2240
|
+
ACE_Auto_Ptr<CORBA::Float> native_array_safe (native_array);
|
|
2241
|
+
for (CORBA::ULong l=0; l<len ;++l)
|
|
2242
|
+
{
|
|
2243
|
+
VALUE rel = rb_ary_entry (rval, offs+l);
|
|
2244
|
+
native_array[l] = (CORBA::Float)NUM2DBL (rel);
|
|
2245
|
+
}
|
|
2246
|
+
R2TAO_ArrayAny_Impl_T<CORBA::Float>::insert (*any,
|
|
2247
|
+
CORBA::_tc_float,
|
|
2248
|
+
native_array_safe.release (),
|
|
2249
|
+
len);
|
|
2250
|
+
|
|
2251
|
+
if (!vt->add_chunk_element (any_safe))
|
|
2252
|
+
throw CORBA::MARSHAL ();
|
|
2253
|
+
}
|
|
2254
|
+
} R2TAO_CATCH;
|
|
2255
|
+
return Qnil;
|
|
2256
|
+
}
|
|
2257
|
+
|
|
2258
|
+
VALUE r2tao_OStream_write_double_array (VALUE self, VALUE rval, VALUE offset, VALUE length)
|
|
2259
|
+
{
|
|
2260
|
+
R2TAO_Value* vt = r2tao_OutputStream_r2t(self);
|
|
2261
|
+
R2TAO_TRY {
|
|
2262
|
+
CORBA::Any* any = 0;
|
|
2263
|
+
ACE_NEW_THROW_EX (any,
|
|
2264
|
+
CORBA::Any (),
|
|
2265
|
+
CORBA::NO_MEMORY());
|
|
2266
|
+
CORBA::Any_var any_safe = any;
|
|
2267
|
+
|
|
2268
|
+
CHECK_RTYPE(rval, T_ARRAY);
|
|
2269
|
+
CORBA::ULong asz = static_cast<unsigned long> (RARRAY_LEN (rval));
|
|
2270
|
+
CORBA::ULong offs = NUM2ULONG (offset);
|
|
2271
|
+
CORBA::ULong alen = NUM2ULONG (length);
|
|
2272
|
+
CORBA::ULong len = ((offs + alen) <= asz) ? alen : (offs < asz ? (asz - offs) : 0);
|
|
2273
|
+
if (len > 0)
|
|
2274
|
+
{
|
|
2275
|
+
CORBA::Double* native_array = 0;
|
|
2276
|
+
ACE_NEW_THROW_EX (native_array,
|
|
2277
|
+
CORBA::Double[len],
|
|
2278
|
+
CORBA::NO_MEMORY());
|
|
2279
|
+
ACE_Auto_Ptr<CORBA::Double> native_array_safe (native_array);
|
|
2280
|
+
for (CORBA::ULong l=0; l<len ;++l)
|
|
2281
|
+
{
|
|
2282
|
+
VALUE rel = rb_ary_entry (rval, offs+l);
|
|
2283
|
+
native_array[l] = (CORBA::Double)NUM2DBL (rel);
|
|
2284
|
+
}
|
|
2285
|
+
R2TAO_ArrayAny_Impl_T<CORBA::Double>::insert (*any,
|
|
2286
|
+
CORBA::_tc_double,
|
|
2287
|
+
native_array_safe.release (),
|
|
2288
|
+
len);
|
|
2289
|
+
|
|
2290
|
+
if (!vt->add_chunk_element (any_safe))
|
|
2291
|
+
throw CORBA::MARSHAL ();
|
|
2292
|
+
}
|
|
2293
|
+
} R2TAO_CATCH;
|
|
2294
|
+
return Qnil;
|
|
2295
|
+
}
|
|
2296
|
+
|
|
2297
|
+
VALUE r2tao_OStream_write_longdouble_array (VALUE self, VALUE rval, VALUE offset, VALUE length)
|
|
2298
|
+
{
|
|
2299
|
+
R2TAO_Value* vt = r2tao_OutputStream_r2t(self);
|
|
2300
|
+
R2TAO_TRY {
|
|
2301
|
+
CORBA::Any* any = 0;
|
|
2302
|
+
ACE_NEW_THROW_EX (any,
|
|
2303
|
+
CORBA::Any (),
|
|
2304
|
+
CORBA::NO_MEMORY());
|
|
2305
|
+
CORBA::Any_var any_safe = any;
|
|
2306
|
+
|
|
2307
|
+
CHECK_RTYPE(rval, T_ARRAY);
|
|
2308
|
+
CORBA::ULong asz = static_cast<unsigned long> (RARRAY_LEN (rval));
|
|
2309
|
+
CORBA::ULong offs = NUM2ULONG (offset);
|
|
2310
|
+
CORBA::ULong alen = NUM2ULONG (length);
|
|
2311
|
+
CORBA::ULong len = ((offs + alen) <= asz) ? alen : (offs < asz ? (asz - offs) : 0);
|
|
2312
|
+
if (len > 0)
|
|
2313
|
+
{
|
|
2314
|
+
CORBA::LongDouble* native_array = 0;
|
|
2315
|
+
ACE_NEW_THROW_EX (native_array,
|
|
2316
|
+
CORBA::LongDouble[len],
|
|
2317
|
+
CORBA::NO_MEMORY());
|
|
2318
|
+
ACE_Auto_Ptr<CORBA::LongDouble> native_array_safe (native_array);
|
|
2319
|
+
for (CORBA::ULong l=0; l<len ;++l)
|
|
2320
|
+
{
|
|
2321
|
+
VALUE rel = rb_ary_entry (rval, offs+l);
|
|
2322
|
+
ACE_CDR_LONG_DOUBLE_ASSIGNMENT (native_array[l], CLD2RLD (rel));
|
|
2323
|
+
}
|
|
2324
|
+
R2TAO_ArrayAny_Impl_T<CORBA::LongDouble>::insert (*any,
|
|
2325
|
+
CORBA::_tc_longdouble,
|
|
2326
|
+
native_array_safe.release (),
|
|
2327
|
+
len);
|
|
2328
|
+
|
|
2329
|
+
if (!vt->add_chunk_element (any_safe))
|
|
2330
|
+
throw CORBA::MARSHAL ();
|
|
2331
|
+
}
|
|
2332
|
+
} R2TAO_CATCH;
|
|
2333
|
+
return Qnil;
|
|
2334
|
+
}
|
|
2335
|
+
|
|
2336
|
+
VALUE r2tao_OStream_write_fixed_array (VALUE , VALUE , VALUE , VALUE )
|
|
2337
|
+
{
|
|
2338
|
+
X_CORBA (NO_IMPLEMENT);
|
|
2339
|
+
}
|
|
2340
|
+
|
|
2341
|
+
VALUE r2tao_OStream_write_construct (VALUE self, VALUE rval, VALUE rtc)
|
|
2342
|
+
{
|
|
2343
|
+
R2TAO_Value* val = r2tao_OutputStream_r2t(self);
|
|
2344
|
+
R2TAO_TRY {
|
|
2345
|
+
CORBA::TypeCode_ptr tc_ = r2corba_TypeCode_r2t (rtc);
|
|
2346
|
+
|
|
2347
|
+
CORBA::Any* any = 0;
|
|
2348
|
+
ACE_NEW_THROW_EX (any,
|
|
2349
|
+
CORBA::Any (),
|
|
2350
|
+
CORBA::NO_MEMORY());
|
|
2351
|
+
CORBA::Any_var any_safe = any;
|
|
2352
|
+
r2tao_Ruby2Any (*any, tc_, rval);
|
|
2353
|
+
if (!val->add_chunk_element (any_safe))
|
|
2354
|
+
throw CORBA::MARSHAL ();
|
|
2355
|
+
} R2TAO_CATCH;
|
|
2356
|
+
return Qnil;
|
|
2357
|
+
}
|
|
2358
|
+
|
|
2359
|
+
// ------------------------------------------------------------------
|
|
2360
|
+
// InputStream
|
|
2361
|
+
|
|
2362
|
+
VALUE r2tao_IStream_read_any (VALUE self)
|
|
2363
|
+
{
|
|
2364
|
+
VALUE ret = Qnil;
|
|
2365
|
+
TAO_InputCDR &strm = *r2tao_InputStream_r2t(self);
|
|
2366
|
+
R2TAO_TRY {
|
|
2367
|
+
CORBA::Any any;
|
|
2368
|
+
strm >> any;
|
|
2369
|
+
ret = r2tao_Any_to_Ruby (any);
|
|
2370
|
+
} R2TAO_CATCH;
|
|
2371
|
+
return ret;
|
|
2372
|
+
}
|
|
2373
|
+
|
|
2374
|
+
VALUE r2tao_IStream_read_boolean (VALUE self)
|
|
2375
|
+
{
|
|
2376
|
+
VALUE ret = Qnil;
|
|
2377
|
+
TAO_InputCDR &strm = *r2tao_InputStream_r2t(self);
|
|
2378
|
+
R2TAO_TRY {
|
|
2379
|
+
CORBA::Boolean val = false;
|
|
2380
|
+
TAO_InputCDR::to_boolean bool_ (val);
|
|
2381
|
+
strm >> bool_;
|
|
2382
|
+
ret = val ? Qtrue : Qfalse;
|
|
2383
|
+
} R2TAO_CATCH;
|
|
2384
|
+
return ret;
|
|
2385
|
+
}
|
|
2386
|
+
|
|
2387
|
+
VALUE r2tao_IStream_read_char (VALUE self)
|
|
2388
|
+
{
|
|
2389
|
+
VALUE ret = Qnil;
|
|
2390
|
+
TAO_InputCDR &strm = *r2tao_InputStream_r2t(self);
|
|
2391
|
+
R2TAO_TRY {
|
|
2392
|
+
CORBA::Char val = 0;
|
|
2393
|
+
TAO_InputCDR::to_char ch_ (val);
|
|
2394
|
+
strm >> ch_;
|
|
2395
|
+
ret = rb_str_new (&val, 1);
|
|
2396
|
+
} R2TAO_CATCH;
|
|
2397
|
+
return ret;
|
|
2398
|
+
}
|
|
2399
|
+
|
|
2400
|
+
VALUE r2tao_IStream_read_wchar (VALUE self)
|
|
2401
|
+
{
|
|
2402
|
+
VALUE ret = Qnil;
|
|
2403
|
+
TAO_InputCDR &strm = *r2tao_InputStream_r2t(self);
|
|
2404
|
+
R2TAO_TRY {
|
|
2405
|
+
CORBA::WChar val = 0;
|
|
2406
|
+
TAO_InputCDR::to_wchar wch_ (val);
|
|
2407
|
+
strm >> wch_;
|
|
2408
|
+
ret = INT2FIX ((int)val);
|
|
2409
|
+
} R2TAO_CATCH;
|
|
2410
|
+
return ret;
|
|
2411
|
+
}
|
|
2412
|
+
|
|
2413
|
+
VALUE r2tao_IStream_read_octet (VALUE self)
|
|
2414
|
+
{
|
|
2415
|
+
VALUE ret = Qnil;
|
|
2416
|
+
TAO_InputCDR &strm = *r2tao_InputStream_r2t(self);
|
|
2417
|
+
R2TAO_TRY {
|
|
2418
|
+
CORBA::Octet val = 0;
|
|
2419
|
+
TAO_InputCDR::to_octet byte_ (val);
|
|
2420
|
+
strm >> byte_;
|
|
2421
|
+
ret = INT2FIX ((int)val);
|
|
2422
|
+
} R2TAO_CATCH;
|
|
2423
|
+
return ret;
|
|
2424
|
+
}
|
|
2425
|
+
|
|
2426
|
+
VALUE r2tao_IStream_read_short (VALUE self)
|
|
2427
|
+
{
|
|
2428
|
+
VALUE ret = Qnil;
|
|
2429
|
+
TAO_InputCDR &strm = *r2tao_InputStream_r2t(self);
|
|
2430
|
+
R2TAO_TRY {
|
|
2431
|
+
CORBA::Short val = 0;
|
|
2432
|
+
strm >> val;
|
|
2433
|
+
ret = INT2FIX ((int)val);
|
|
2434
|
+
} R2TAO_CATCH;
|
|
2435
|
+
return ret;
|
|
2436
|
+
}
|
|
2437
|
+
|
|
2438
|
+
VALUE r2tao_IStream_read_ushort (VALUE self)
|
|
2439
|
+
{
|
|
2440
|
+
VALUE ret = Qnil;
|
|
2441
|
+
TAO_InputCDR &strm = *r2tao_InputStream_r2t(self);
|
|
2442
|
+
R2TAO_TRY {
|
|
2443
|
+
CORBA::UShort val = 0;
|
|
2444
|
+
strm >> val;
|
|
2445
|
+
ret = UINT2NUM ((unsigned int)val);
|
|
2446
|
+
} R2TAO_CATCH;
|
|
2447
|
+
return ret;
|
|
2448
|
+
}
|
|
2449
|
+
|
|
2450
|
+
VALUE r2tao_IStream_read_long (VALUE self)
|
|
2451
|
+
{
|
|
2452
|
+
VALUE ret = Qnil;
|
|
2453
|
+
TAO_InputCDR &strm = *r2tao_InputStream_r2t(self);
|
|
2454
|
+
R2TAO_TRY {
|
|
2455
|
+
CORBA::Long val = 0;
|
|
2456
|
+
strm >> val;
|
|
2457
|
+
ret = LONG2FIX (val);
|
|
2458
|
+
} R2TAO_CATCH;
|
|
2459
|
+
return ret;
|
|
2460
|
+
}
|
|
2461
|
+
|
|
2462
|
+
VALUE r2tao_IStream_read_ulong (VALUE self)
|
|
2463
|
+
{
|
|
2464
|
+
VALUE ret = Qnil;
|
|
2465
|
+
TAO_InputCDR &strm = *r2tao_InputStream_r2t(self);
|
|
2466
|
+
R2TAO_TRY {
|
|
2467
|
+
CORBA::ULong val = 0;
|
|
2468
|
+
strm >> val;
|
|
2469
|
+
ret = ULONG2NUM (val);
|
|
2470
|
+
} R2TAO_CATCH;
|
|
2471
|
+
return ret;
|
|
2472
|
+
}
|
|
2473
|
+
|
|
2474
|
+
VALUE r2tao_IStream_read_longlong (VALUE self)
|
|
2475
|
+
{
|
|
2476
|
+
VALUE ret = Qnil;
|
|
2477
|
+
TAO_InputCDR &strm = *r2tao_InputStream_r2t(self);
|
|
2478
|
+
R2TAO_TRY {
|
|
2479
|
+
CORBA::LongLong val = 0;
|
|
2480
|
+
strm >> val;
|
|
2481
|
+
ret = LL2NUM (val);
|
|
2482
|
+
} R2TAO_CATCH;
|
|
2483
|
+
return ret;
|
|
2484
|
+
}
|
|
2485
|
+
|
|
2486
|
+
VALUE r2tao_IStream_read_ulonglong (VALUE self)
|
|
2487
|
+
{
|
|
2488
|
+
VALUE ret = Qnil;
|
|
2489
|
+
TAO_InputCDR &strm = *r2tao_InputStream_r2t(self);
|
|
2490
|
+
R2TAO_TRY {
|
|
2491
|
+
CORBA::ULongLong val = 0;
|
|
2492
|
+
strm >> val;
|
|
2493
|
+
ret = ULL2NUM (val);
|
|
2494
|
+
} R2TAO_CATCH;
|
|
2495
|
+
return ret;
|
|
2496
|
+
}
|
|
2497
|
+
|
|
2498
|
+
VALUE r2tao_IStream_read_float (VALUE self)
|
|
2499
|
+
{
|
|
2500
|
+
VALUE ret = Qnil;
|
|
2501
|
+
TAO_InputCDR &strm = *r2tao_InputStream_r2t(self);
|
|
2502
|
+
R2TAO_TRY {
|
|
2503
|
+
CORBA::Float val = 0;
|
|
2504
|
+
strm >> val;
|
|
2505
|
+
ret = rb_float_new ((double)val);
|
|
2506
|
+
} R2TAO_CATCH;
|
|
2507
|
+
return ret;
|
|
2508
|
+
}
|
|
2509
|
+
|
|
2510
|
+
VALUE r2tao_IStream_read_double (VALUE self)
|
|
2511
|
+
{
|
|
2512
|
+
VALUE ret = Qnil;
|
|
2513
|
+
TAO_InputCDR &strm = *r2tao_InputStream_r2t(self);
|
|
2514
|
+
R2TAO_TRY {
|
|
2515
|
+
CORBA::Double val = 0;
|
|
2516
|
+
strm >> val;
|
|
2517
|
+
ret = rb_float_new ((double)val);
|
|
2518
|
+
} R2TAO_CATCH;
|
|
2519
|
+
return ret;
|
|
2520
|
+
}
|
|
2521
|
+
|
|
2522
|
+
VALUE r2tao_IStream_read_longdouble (VALUE self)
|
|
2523
|
+
{
|
|
2524
|
+
VALUE ret = Qnil;
|
|
2525
|
+
TAO_InputCDR &strm = *r2tao_InputStream_r2t(self);
|
|
2526
|
+
R2TAO_TRY {
|
|
2527
|
+
CORBA::LongDouble val;
|
|
2528
|
+
strm >> val;
|
|
2529
|
+
ret = CLD2RLD (val);
|
|
2530
|
+
} R2TAO_CATCH;
|
|
2531
|
+
return ret;
|
|
2532
|
+
}
|
|
2533
|
+
|
|
2534
|
+
VALUE r2tao_IStream_read_Object (VALUE self)
|
|
2535
|
+
{
|
|
2536
|
+
VALUE ret = Qnil;
|
|
2537
|
+
TAO_InputCDR &strm = *r2tao_InputStream_r2t(self);
|
|
2538
|
+
R2TAO_TRY {
|
|
2539
|
+
CORBA::Object_var val;
|
|
2540
|
+
strm >> val;
|
|
2541
|
+
if (CORBA::is_nil (val.in ()))
|
|
2542
|
+
ret = Qnil;
|
|
2543
|
+
else
|
|
2544
|
+
ret = r2corba_Object_t2r(val.in ());
|
|
2545
|
+
} R2TAO_CATCH;
|
|
2546
|
+
return ret;
|
|
2547
|
+
}
|
|
2548
|
+
|
|
2549
|
+
VALUE r2tao_IStream_read_Abstract (VALUE self)
|
|
2550
|
+
{
|
|
2551
|
+
VALUE ret = Qnil;
|
|
2552
|
+
TAO_InputCDR &strm = *r2tao_InputStream_r2t(self);
|
|
2553
|
+
CORBA::Boolean val = false;
|
|
2554
|
+
R2TAO_TRY {
|
|
2555
|
+
TAO_InputCDR::to_boolean bool_ (val);
|
|
2556
|
+
strm >> bool_;
|
|
2557
|
+
} R2TAO_CATCH;
|
|
2558
|
+
if (val)
|
|
2559
|
+
{
|
|
2560
|
+
// Object
|
|
2561
|
+
ret = r2tao_IStream_read_Object (self);
|
|
2562
|
+
}
|
|
2563
|
+
else
|
|
2564
|
+
{
|
|
2565
|
+
// Value
|
|
2566
|
+
ret = r2tao_IStream_read_Value (self);
|
|
2567
|
+
}
|
|
2568
|
+
return ret;
|
|
2569
|
+
}
|
|
2570
|
+
|
|
2571
|
+
VALUE r2tao_IStream_read_Value (VALUE self)
|
|
2572
|
+
{
|
|
2573
|
+
VALUE ret = Qnil;
|
|
2574
|
+
TAO_InputCDR &strm = *r2tao_InputStream_r2t(self);
|
|
2575
|
+
R2TAO_TRY {
|
|
2576
|
+
R2TAO_Value_var val;
|
|
2577
|
+
strm >> val.out ();
|
|
2578
|
+
if (!CORBA::is_nil (val.in ()))
|
|
2579
|
+
ret = val.in ()->get_ruby_value ();
|
|
2580
|
+
|
|
2581
|
+
//CORBA::ValueBase_var val;
|
|
2582
|
+
//strm >> val.out ();
|
|
2583
|
+
//if (!CORBA::is_nil (val.in ()))
|
|
2584
|
+
// ret = R2TAO_Value::_downcast (val.in ())->get_ruby_value ();
|
|
2585
|
+
} R2TAO_CATCH;
|
|
2586
|
+
return ret;
|
|
2587
|
+
}
|
|
2588
|
+
|
|
2589
|
+
VALUE r2tao_IStream_read_TypeCode (VALUE self)
|
|
2590
|
+
{
|
|
2591
|
+
VALUE ret = Qnil;
|
|
2592
|
+
TAO_InputCDR &strm = *r2tao_InputStream_r2t(self);
|
|
2593
|
+
R2TAO_TRY {
|
|
2594
|
+
CORBA::TypeCode_var val;
|
|
2595
|
+
strm >> val.out ();
|
|
2596
|
+
if (CORBA::is_nil (val.in ()))
|
|
2597
|
+
ret = Qnil;
|
|
2598
|
+
else
|
|
2599
|
+
ret = r2corba_TypeCode_t2r(val.in ());
|
|
2600
|
+
} R2TAO_CATCH;
|
|
2601
|
+
return ret;
|
|
2602
|
+
}
|
|
2603
|
+
|
|
2604
|
+
VALUE r2tao_IStream_read_fixed (VALUE)
|
|
2605
|
+
{
|
|
2606
|
+
X_CORBA (NO_IMPLEMENT);
|
|
2607
|
+
}
|
|
2608
|
+
|
|
2609
|
+
VALUE r2tao_IStream_read_string (VALUE self)
|
|
2610
|
+
{
|
|
2611
|
+
VALUE ret = Qnil;
|
|
2612
|
+
TAO_InputCDR &strm = *r2tao_InputStream_r2t(self);
|
|
2613
|
+
CORBA::Char* val = 0;
|
|
2614
|
+
R2TAO_TRY {
|
|
2615
|
+
strm >> val;
|
|
2616
|
+
} R2TAO_CATCH;
|
|
2617
|
+
ret = val ? rb_str_new2 (val) : Qnil;
|
|
2618
|
+
return ret;
|
|
2619
|
+
}
|
|
2620
|
+
|
|
2621
|
+
VALUE r2tao_IStream_read_wstring (VALUE self)
|
|
2622
|
+
{
|
|
2623
|
+
VALUE ret = Qnil;
|
|
2624
|
+
TAO_InputCDR &strm = *r2tao_InputStream_r2t(self);
|
|
2625
|
+
CORBA::WChar* val = 0;
|
|
2626
|
+
R2TAO_TRY {
|
|
2627
|
+
strm >> val;
|
|
2628
|
+
} R2TAO_CATCH;
|
|
2629
|
+
if (val == 0)
|
|
2630
|
+
return Qnil;
|
|
2631
|
+
else
|
|
2632
|
+
{
|
|
2633
|
+
ret = rb_class_new_instance (0, 0, rb_cArray);
|
|
2634
|
+
for (CORBA::ULong l=0; val[l] != CORBA::WChar(0) ;++l)
|
|
2635
|
+
rb_ary_push (ret, INT2FIX (val[l]));
|
|
2636
|
+
}
|
|
2637
|
+
return ret;
|
|
2638
|
+
}
|
|
2639
|
+
|
|
2640
|
+
VALUE r2tao_IStream_read_any_array (VALUE self, VALUE rval, VALUE offset, VALUE length)
|
|
2641
|
+
{
|
|
2642
|
+
TAO_InputCDR &strm = *r2tao_InputStream_r2t(self);
|
|
2643
|
+
R2TAO_TRY {
|
|
2644
|
+
CHECK_RTYPE(rval, T_ARRAY);
|
|
2645
|
+
CORBA::ULong offs = NUM2ULONG (offset);
|
|
2646
|
+
CORBA::ULong alen = NUM2ULONG (length);
|
|
2647
|
+
for (CORBA::ULong l=0; l<alen ;++l)
|
|
2648
|
+
{
|
|
2649
|
+
CORBA::Any any;
|
|
2650
|
+
strm >> any;
|
|
2651
|
+
VALUE rv = r2tao_Any_to_Ruby (any);
|
|
2652
|
+
rb_ary_store (rval, (long)offs+l, rv);
|
|
2653
|
+
}
|
|
2654
|
+
} R2TAO_CATCH;
|
|
2655
|
+
return rval;
|
|
2656
|
+
}
|
|
2657
|
+
|
|
2658
|
+
VALUE r2tao_IStream_read_boolean_array (VALUE self, VALUE rval, VALUE offset, VALUE length)
|
|
2659
|
+
{
|
|
2660
|
+
TAO_InputCDR &strm = *r2tao_InputStream_r2t(self);
|
|
2661
|
+
R2TAO_TRY {
|
|
2662
|
+
CHECK_RTYPE(rval, T_ARRAY);
|
|
2663
|
+
CORBA::ULong offs = NUM2ULONG (offset);
|
|
2664
|
+
CORBA::ULong alen = NUM2ULONG (length);
|
|
2665
|
+
for (CORBA::ULong l=0; l<alen ;++l)
|
|
2666
|
+
{
|
|
2667
|
+
CORBA::Boolean val = false;
|
|
2668
|
+
TAO_InputCDR::to_boolean bool_ (val);
|
|
2669
|
+
strm >> bool_;
|
|
2670
|
+
VALUE rv = val ? Qtrue : Qfalse;
|
|
2671
|
+
rb_ary_store (rval, (long)offs+l, rv);
|
|
2672
|
+
}
|
|
2673
|
+
} R2TAO_CATCH;
|
|
2674
|
+
return rval;
|
|
2675
|
+
}
|
|
2676
|
+
|
|
2677
|
+
VALUE r2tao_IStream_read_char_array (VALUE self, VALUE rval, VALUE offset, VALUE length)
|
|
2678
|
+
{
|
|
2679
|
+
TAO_InputCDR &strm = *r2tao_InputStream_r2t(self);
|
|
2680
|
+
R2TAO_TRY {
|
|
2681
|
+
CHECK_RTYPE(rval, T_STRING);
|
|
2682
|
+
CORBA::ULong slen = static_cast<CORBA::ULong> (RSTRING_LEN (rval));
|
|
2683
|
+
CORBA::ULong offs = NUM2ULONG (offset);
|
|
2684
|
+
CORBA::ULong alen = NUM2ULONG (length);
|
|
2685
|
+
CORBA::ULong rlen = slen < (offs + alen) ? (offs + alen) : slen;
|
|
2686
|
+
CORBA::String_var str = CORBA::string_alloc (rlen + 1);
|
|
2687
|
+
ACE_OS::strncpy (str, RSTRING_PTR (rval), slen < offs ? slen : offs);
|
|
2688
|
+
for (CORBA::ULong l=0; l<alen ;++l)
|
|
2689
|
+
{
|
|
2690
|
+
CORBA::Char val = 0;
|
|
2691
|
+
TAO_InputCDR::to_char ch_ (val);
|
|
2692
|
+
strm >> ch_;
|
|
2693
|
+
str[offs+l] = val;
|
|
2694
|
+
}
|
|
2695
|
+
if (slen > (offs + alen))
|
|
2696
|
+
{
|
|
2697
|
+
ACE_OS::strncpy (&(str[offs+alen]), RSTRING_PTR (rval) + (offs+alen), slen - (offs + alen));
|
|
2698
|
+
}
|
|
2699
|
+
rb_str_resize (rval, 0);
|
|
2700
|
+
rb_str_cat (rval, str.in (), (long)rlen);
|
|
2701
|
+
} R2TAO_CATCH;
|
|
2702
|
+
return rval;
|
|
2703
|
+
}
|
|
2704
|
+
|
|
2705
|
+
VALUE r2tao_IStream_read_wchar_array (VALUE self, VALUE rval, VALUE offset, VALUE length)
|
|
2706
|
+
{
|
|
2707
|
+
TAO_InputCDR &strm = *r2tao_InputStream_r2t(self);
|
|
2708
|
+
R2TAO_TRY {
|
|
2709
|
+
CHECK_RTYPE(rval, T_ARRAY);
|
|
2710
|
+
CORBA::ULong offs = NUM2ULONG (offset);
|
|
2711
|
+
CORBA::ULong alen = NUM2ULONG (length);
|
|
2712
|
+
for (CORBA::ULong l=0; l<alen ;++l)
|
|
2713
|
+
{
|
|
2714
|
+
CORBA::WChar val = 0;
|
|
2715
|
+
TAO_InputCDR::to_wchar wch_ (val);
|
|
2716
|
+
strm >> wch_;
|
|
2717
|
+
VALUE rv = INT2FIX ((int)val);
|
|
2718
|
+
rb_ary_store (rval, (long)offs+l, rv);
|
|
2719
|
+
}
|
|
2720
|
+
} R2TAO_CATCH;
|
|
2721
|
+
return rval;
|
|
2722
|
+
}
|
|
2723
|
+
|
|
2724
|
+
VALUE r2tao_IStream_read_octet_array (VALUE self, VALUE rval, VALUE offset, VALUE length)
|
|
2725
|
+
{
|
|
2726
|
+
TAO_InputCDR &strm = *r2tao_InputStream_r2t(self);
|
|
2727
|
+
R2TAO_TRY {
|
|
2728
|
+
CHECK_RTYPE(rval, T_STRING);
|
|
2729
|
+
CORBA::ULong slen = static_cast<CORBA::ULong> (RSTRING_LEN (rval));
|
|
2730
|
+
CORBA::ULong offs = NUM2ULONG (offset);
|
|
2731
|
+
CORBA::ULong alen = NUM2ULONG (length);
|
|
2732
|
+
CORBA::ULong rlen = slen < (offs + alen) ? (offs + alen) : slen;
|
|
2733
|
+
CORBA::String_var str = CORBA::string_alloc (rlen + 1);
|
|
2734
|
+
ACE_OS::strncpy (str.out (), RSTRING_PTR (rval), slen < offs ? slen : offs);
|
|
2735
|
+
for (CORBA::ULong l=0; l<alen ;++l)
|
|
2736
|
+
{
|
|
2737
|
+
CORBA::Char val = 0;
|
|
2738
|
+
TAO_InputCDR::to_octet byte_ ((CORBA::Octet&)val);
|
|
2739
|
+
strm >> byte_;
|
|
2740
|
+
str[offs+l] = val;
|
|
2741
|
+
}
|
|
2742
|
+
if (slen > (offs + alen))
|
|
2743
|
+
{
|
|
2744
|
+
ACE_OS::strncpy (&(str[offs+alen]), RSTRING_PTR (rval) + (offs+alen), slen - (offs + alen));
|
|
2745
|
+
}
|
|
2746
|
+
rb_str_resize (rval, 0);
|
|
2747
|
+
rb_str_cat (rval, str.in (), (long)rlen);
|
|
2748
|
+
} R2TAO_CATCH;
|
|
2749
|
+
return rval;
|
|
2750
|
+
}
|
|
2751
|
+
|
|
2752
|
+
VALUE r2tao_IStream_read_short_array (VALUE self, VALUE rval, VALUE offset, VALUE length)
|
|
2753
|
+
{
|
|
2754
|
+
TAO_InputCDR &strm = *r2tao_InputStream_r2t(self);
|
|
2755
|
+
R2TAO_TRY {
|
|
2756
|
+
CHECK_RTYPE(rval, T_ARRAY);
|
|
2757
|
+
CORBA::ULong offs = NUM2ULONG (offset);
|
|
2758
|
+
CORBA::ULong alen = NUM2ULONG (length);
|
|
2759
|
+
for (CORBA::ULong l=0; l<alen ;++l)
|
|
2760
|
+
{
|
|
2761
|
+
CORBA::Short val = 0;
|
|
2762
|
+
strm >> val;
|
|
2763
|
+
VALUE rv = INT2FIX (val);
|
|
2764
|
+
rb_ary_store (rval, (long)offs+l, rv);
|
|
2765
|
+
}
|
|
2766
|
+
} R2TAO_CATCH;
|
|
2767
|
+
return rval;
|
|
2768
|
+
}
|
|
2769
|
+
|
|
2770
|
+
VALUE r2tao_IStream_read_ushort_array (VALUE self, VALUE rval, VALUE offset, VALUE length)
|
|
2771
|
+
{
|
|
2772
|
+
TAO_InputCDR &strm = *r2tao_InputStream_r2t(self);
|
|
2773
|
+
R2TAO_TRY {
|
|
2774
|
+
CHECK_RTYPE(rval, T_ARRAY);
|
|
2775
|
+
CORBA::ULong offs = NUM2ULONG (offset);
|
|
2776
|
+
CORBA::ULong alen = NUM2ULONG (length);
|
|
2777
|
+
for (CORBA::ULong l=0; l<alen ;++l)
|
|
2778
|
+
{
|
|
2779
|
+
CORBA::UShort val = 0;
|
|
2780
|
+
strm >> val;
|
|
2781
|
+
VALUE rv = UINT2NUM (val);
|
|
2782
|
+
rb_ary_store (rval, (long)offs+l, rv);
|
|
2783
|
+
}
|
|
2784
|
+
} R2TAO_CATCH;
|
|
2785
|
+
return rval;
|
|
2786
|
+
}
|
|
2787
|
+
|
|
2788
|
+
VALUE r2tao_IStream_read_long_array (VALUE self, VALUE rval, VALUE offset, VALUE length)
|
|
2789
|
+
{
|
|
2790
|
+
TAO_InputCDR &strm = *r2tao_InputStream_r2t(self);
|
|
2791
|
+
R2TAO_TRY {
|
|
2792
|
+
CHECK_RTYPE(rval, T_ARRAY);
|
|
2793
|
+
CORBA::ULong offs = NUM2ULONG (offset);
|
|
2794
|
+
CORBA::ULong alen = NUM2ULONG (length);
|
|
2795
|
+
for (CORBA::ULong l=0; l<alen ;++l)
|
|
2796
|
+
{
|
|
2797
|
+
CORBA::Long val = 0;
|
|
2798
|
+
strm >> val;
|
|
2799
|
+
VALUE rv = LONG2FIX (val);
|
|
2800
|
+
rb_ary_store (rval, (long)offs+l, rv);
|
|
2801
|
+
}
|
|
2802
|
+
} R2TAO_CATCH;
|
|
2803
|
+
return rval;
|
|
2804
|
+
}
|
|
2805
|
+
|
|
2806
|
+
VALUE r2tao_IStream_read_ulong_array (VALUE self, VALUE rval, VALUE offset, VALUE length)
|
|
2807
|
+
{
|
|
2808
|
+
TAO_InputCDR &strm = *r2tao_InputStream_r2t(self);
|
|
2809
|
+
R2TAO_TRY {
|
|
2810
|
+
CHECK_RTYPE(rval, T_ARRAY);
|
|
2811
|
+
CORBA::ULong offs = NUM2ULONG (offset);
|
|
2812
|
+
CORBA::ULong alen = NUM2ULONG (length);
|
|
2813
|
+
for (CORBA::ULong l=0; l<alen ;++l)
|
|
2814
|
+
{
|
|
2815
|
+
CORBA::ULong val = 0;
|
|
2816
|
+
strm >> val;
|
|
2817
|
+
VALUE rv = ULONG2NUM (val);
|
|
2818
|
+
rb_ary_store (rval, (long)offs+l, rv);
|
|
2819
|
+
}
|
|
2820
|
+
} R2TAO_CATCH;
|
|
2821
|
+
return rval;
|
|
2822
|
+
}
|
|
2823
|
+
|
|
2824
|
+
VALUE r2tao_IStream_read_longlong_array (VALUE self, VALUE rval, VALUE offset, VALUE length)
|
|
2825
|
+
{
|
|
2826
|
+
TAO_InputCDR &strm = *r2tao_InputStream_r2t(self);
|
|
2827
|
+
R2TAO_TRY {
|
|
2828
|
+
CHECK_RTYPE(rval, T_ARRAY);
|
|
2829
|
+
CORBA::ULong offs = NUM2ULONG (offset);
|
|
2830
|
+
CORBA::ULong alen = NUM2ULONG (length);
|
|
2831
|
+
for (CORBA::ULong l=0; l<alen ;++l)
|
|
2832
|
+
{
|
|
2833
|
+
CORBA::LongLong val = 0;
|
|
2834
|
+
strm >> val;
|
|
2835
|
+
VALUE rv = LL2NUM (val);
|
|
2836
|
+
rb_ary_store (rval, (long)offs+l, rv);
|
|
2837
|
+
}
|
|
2838
|
+
} R2TAO_CATCH;
|
|
2839
|
+
return rval;
|
|
2840
|
+
}
|
|
2841
|
+
|
|
2842
|
+
VALUE r2tao_IStream_read_ulonglong_array (VALUE self, VALUE rval, VALUE offset, VALUE length)
|
|
2843
|
+
{
|
|
2844
|
+
TAO_InputCDR &strm = *r2tao_InputStream_r2t(self);
|
|
2845
|
+
R2TAO_TRY {
|
|
2846
|
+
CHECK_RTYPE(rval, T_ARRAY);
|
|
2847
|
+
CORBA::ULong offs = NUM2ULONG (offset);
|
|
2848
|
+
CORBA::ULong alen = NUM2ULONG (length);
|
|
2849
|
+
for (CORBA::ULong l=0; l<alen ;++l)
|
|
2850
|
+
{
|
|
2851
|
+
CORBA::ULongLong val = 0;
|
|
2852
|
+
strm >> val;
|
|
2853
|
+
VALUE rv = ULL2NUM (val);
|
|
2854
|
+
rb_ary_store (rval, (long)offs+l, rv);
|
|
2855
|
+
}
|
|
2856
|
+
} R2TAO_CATCH;
|
|
2857
|
+
return rval;
|
|
2858
|
+
}
|
|
2859
|
+
|
|
2860
|
+
VALUE r2tao_IStream_read_float_array (VALUE self, VALUE rval, VALUE offset, VALUE length)
|
|
2861
|
+
{
|
|
2862
|
+
TAO_InputCDR &strm = *r2tao_InputStream_r2t(self);
|
|
2863
|
+
R2TAO_TRY {
|
|
2864
|
+
CHECK_RTYPE(rval, T_ARRAY);
|
|
2865
|
+
CORBA::ULong offs = NUM2ULONG (offset);
|
|
2866
|
+
CORBA::ULong alen = NUM2ULONG (length);
|
|
2867
|
+
for (CORBA::ULong l=0; l<alen ;++l)
|
|
2868
|
+
{
|
|
2869
|
+
CORBA::Float val = 0;
|
|
2870
|
+
strm >> val;
|
|
2871
|
+
VALUE rv = rb_float_new ((double)val);
|
|
2872
|
+
rb_ary_store (rval, (long)offs+l, rv);
|
|
2873
|
+
}
|
|
2874
|
+
} R2TAO_CATCH;
|
|
2875
|
+
return rval;
|
|
2876
|
+
}
|
|
2877
|
+
|
|
2878
|
+
VALUE r2tao_IStream_read_double_array (VALUE self, VALUE rval, VALUE offset, VALUE length)
|
|
2879
|
+
{
|
|
2880
|
+
TAO_InputCDR &strm = *r2tao_InputStream_r2t(self);
|
|
2881
|
+
R2TAO_TRY {
|
|
2882
|
+
CHECK_RTYPE(rval, T_ARRAY);
|
|
2883
|
+
CORBA::ULong offs = NUM2ULONG (offset);
|
|
2884
|
+
CORBA::ULong alen = NUM2ULONG (length);
|
|
2885
|
+
for (CORBA::ULong l=0; l<alen ;++l)
|
|
2886
|
+
{
|
|
2887
|
+
CORBA::Double val = 0;
|
|
2888
|
+
strm >> val;
|
|
2889
|
+
VALUE rv = rb_float_new ((double)val);
|
|
2890
|
+
rb_ary_store (rval, (long)offs+l, rv);
|
|
2891
|
+
}
|
|
2892
|
+
} R2TAO_CATCH;
|
|
2893
|
+
return rval;
|
|
2894
|
+
}
|
|
2895
|
+
|
|
2896
|
+
VALUE r2tao_IStream_read_longdouble_array (VALUE self, VALUE rval, VALUE offset, VALUE length)
|
|
2897
|
+
{
|
|
2898
|
+
TAO_InputCDR &strm = *r2tao_InputStream_r2t(self);
|
|
2899
|
+
R2TAO_TRY {
|
|
2900
|
+
CHECK_RTYPE(rval, T_ARRAY);
|
|
2901
|
+
CORBA::ULong offs = NUM2ULONG (offset);
|
|
2902
|
+
CORBA::ULong alen = NUM2ULONG (length);
|
|
2903
|
+
for (CORBA::ULong l=0; l<alen ;++l)
|
|
2904
|
+
{
|
|
2905
|
+
CORBA::LongDouble val;
|
|
2906
|
+
strm >> val;
|
|
2907
|
+
VALUE rv = CLD2RLD (val);
|
|
2908
|
+
rb_ary_store (rval, (long)offs+l, rv);
|
|
2909
|
+
}
|
|
2910
|
+
} R2TAO_CATCH;
|
|
2911
|
+
return rval;
|
|
2912
|
+
}
|
|
2913
|
+
|
|
2914
|
+
VALUE r2tao_IStream_read_fixed_array (VALUE, VALUE, VALUE, VALUE)
|
|
2915
|
+
{
|
|
2916
|
+
X_CORBA (NO_IMPLEMENT);
|
|
2917
|
+
}
|
|
2918
|
+
|
|
2919
|
+
VALUE r2tao_IStream_read_construct (VALUE self, VALUE rtc)
|
|
2920
|
+
{
|
|
2921
|
+
VALUE ret = Qnil;
|
|
2922
|
+
TAO_InputCDR &strm = *r2tao_InputStream_r2t(self);
|
|
2923
|
+
R2TAO_TRY {
|
|
2924
|
+
CORBA::TypeCode_ptr tc_ = r2corba_TypeCode_r2t (rtc);
|
|
2925
|
+
|
|
2926
|
+
CORBA::Any any_;
|
|
2927
|
+
TAO::Unknown_IDL_Type *impl = 0;
|
|
2928
|
+
ACE_NEW_RETURN (impl,
|
|
2929
|
+
TAO::Unknown_IDL_Type (tc_),
|
|
2930
|
+
false);
|
|
2931
|
+
|
|
2932
|
+
any_.replace (impl);
|
|
2933
|
+
impl->_tao_decode (strm);
|
|
2934
|
+
|
|
2935
|
+
ret = r2tao_Any2Ruby (any_, tc_, rtc, rtc);
|
|
2936
|
+
} R2TAO_CATCH;
|
|
2937
|
+
return ret;
|
|
2938
|
+
}
|