xref: /AOO42X/main/testtools/source/bridgetest/cppobj.cxx (revision a230972184deb427a995e0eb922a5743673d1d16)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_testtools.hxx"
26 #include <stdio.h>
27 
28 #include "cppu/unotype.hxx"
29 #include <osl/diagnose.h>
30 #include "osl/diagnose.hxx"
31 #include <osl/thread.h>
32 #include <osl/mutex.hxx>
33 #include <osl/time.h>
34 
35 #include <cppuhelper/implbase3.hxx>
36 #include <cppuhelper/factory.hxx>
37 #include "cppuhelper/exc_hlp.hxx"
38 #include "cppuhelper/compbase_ex.hxx"
39 #include <com/sun/star/lang/XServiceInfo.hpp>
40 #include <com/sun/star/lang/XComponent.hpp>
41 #include "com/sun/star/uno/Any.hxx"
42 #include "com/sun/star/uno/RuntimeException.hpp"
43 #include "com/sun/star/uno/Sequence.hxx"
44 
45 #include "test/testtools/bridgetest/Constructors.hpp"
46 #include "test/testtools/bridgetest/Constructors2.hpp"
47 #include "test/testtools/bridgetest/TestPolyStruct.hpp"
48 #include "test/testtools/bridgetest/TestPolyStruct2.hpp"
49 #include "test/testtools/bridgetest/XBridgeTest2.hpp"
50 #include "test/testtools/bridgetest/XMulti.hpp"
51 
52 #include "currentcontextchecker.hxx"
53 #include "multi.hxx"
54 
55 using namespace rtl;
56 using namespace osl;
57 using namespace cppu;
58 using namespace com::sun::star::uno;
59 using namespace com::sun::star::lang;
60 using namespace com::sun::star::registry;
61 using namespace test::testtools::bridgetest;
62 
63 #define SERVICENAME     "com.sun.star.test.bridge.CppTestObject"
64 #define IMPLNAME        "com.sun.star.comp.bridge.CppTestObject"
65 
66 namespace bridge_object
67 {
68 
69 //--------------------------------------------------------------------------------------------------
getSupportedServiceNames()70 inline static Sequence< OUString > getSupportedServiceNames()
71 {
72     OUString aName( RTL_CONSTASCII_USTRINGPARAM(SERVICENAME) );
73     return Sequence< OUString >( &aName, 1 );
74 }
75 
76 //==================================================================================================
assign(TestElement & rData,sal_Bool bBool,sal_Unicode cChar,sal_Int8 nByte,sal_Int16 nShort,sal_uInt16 nUShort,sal_Int32 nLong,sal_uInt32 nULong,sal_Int64 nHyper,sal_uInt64 nUHyper,float fFloat,double fDouble,TestEnum eEnum,const::rtl::OUString & rStr,const::com::sun::star::uno::Reference<::com::sun::star::uno::XInterface> & xTest,const::com::sun::star::uno::Any & rAny)77 static void assign( TestElement & rData,
78                     sal_Bool bBool, sal_Unicode cChar, sal_Int8 nByte,
79                     sal_Int16 nShort, sal_uInt16 nUShort,
80                     sal_Int32 nLong, sal_uInt32 nULong,
81                     sal_Int64 nHyper, sal_uInt64 nUHyper,
82                     float fFloat, double fDouble,
83                     TestEnum eEnum, const ::rtl::OUString& rStr,
84                     const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xTest,
85                     const ::com::sun::star::uno::Any& rAny )
86 {
87     rData.Bool = bBool;
88     rData.Char = cChar;
89     rData.Byte = nByte;
90     rData.Short = nShort;
91     rData.UShort = nUShort;
92     rData.Long = nLong;
93     rData.ULong = nULong;
94     rData.Hyper = nHyper;
95     rData.UHyper = nUHyper;
96     rData.Float = fFloat;
97     rData.Double = fDouble;
98     rData.Enum = eEnum;
99     rData.String = rStr;
100     rData.Interface = xTest;
101     rData.Any = rAny;
102 }
103 //==================================================================================================
assign(TestData & rData,sal_Bool bBool,sal_Unicode cChar,sal_Int8 nByte,sal_Int16 nShort,sal_uInt16 nUShort,sal_Int32 nLong,sal_uInt32 nULong,sal_Int64 nHyper,sal_uInt64 nUHyper,float fFloat,double fDouble,TestEnum eEnum,const::rtl::OUString & rStr,const::com::sun::star::uno::Reference<::com::sun::star::uno::XInterface> & xTest,const::com::sun::star::uno::Any & rAny,const com::sun::star::uno::Sequence<TestElement> & rSequence)104 static void assign( TestData & rData,
105                     sal_Bool bBool, sal_Unicode cChar, sal_Int8 nByte,
106                     sal_Int16 nShort, sal_uInt16 nUShort,
107                     sal_Int32 nLong, sal_uInt32 nULong,
108                     sal_Int64 nHyper, sal_uInt64 nUHyper,
109                     float fFloat, double fDouble,
110                     TestEnum eEnum, const ::rtl::OUString& rStr,
111                     const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xTest,
112                     const ::com::sun::star::uno::Any& rAny,
113                     const com::sun::star::uno::Sequence< TestElement >& rSequence )
114 {
115     assign( (TestElement &)rData,
116             bBool, cChar, nByte, nShort, nUShort, nLong, nULong, nHyper, nUHyper, fFloat, fDouble,
117             eEnum, rStr, xTest, rAny );
118     rData.Sequence = rSequence;
119 }
120 
121 //==================================================================================================
122 class Test_Impl :
123     public osl::DebugBase<Test_Impl>,
124     public WeakImplHelper3< XBridgeTest2, XServiceInfo , XRecursiveCall >
125 {
126     TestData _aData, _aStructData;
127     sal_Int32 m_nLastCallId;
128     sal_Bool m_bFirstCall;
129     sal_Bool m_bSequenceOfCallTestPassed;
130     Mutex m_mutex;
131 
132     Sequence<sal_Bool> _arBool;
133     Sequence<sal_Unicode> _arChar;
134     Sequence<sal_Int8> _arByte;
135     Sequence<sal_Int16> _arShort;
136     Sequence<sal_uInt16> _arUShort;
137     Sequence<sal_Int32> _arLong;
138     Sequence<sal_uInt32> _arULong;
139     Sequence<sal_Int64> _arHyper;
140     Sequence<sal_uInt64> _arUHyper;
141     Sequence<OUString> _arString;
142     Sequence<float> _arFloat;
143     Sequence<double> _arDouble;
144     Sequence<TestEnum> _arEnum;
145     Sequence<Reference<XInterface> > _arObject;
146     Sequence<Sequence<sal_Int32> > _arLong2;
147     Sequence<Sequence<Sequence<sal_Int32> > > _arLong3;
148     Sequence<Any> _arAny;
149     Sequence<TestElement> _arStruct;
150 
151 public:
Test_Impl()152     Test_Impl() : m_nLastCallId( 0 ),
153                   m_bFirstCall( sal_True ),
154                   m_bSequenceOfCallTestPassed( sal_True )
155         {}
~Test_Impl()156     virtual ~Test_Impl()
157         {
158             OSL_TRACE( "> scalar Test_Impl dtor <" );
159         }
160 
acquire()161     void SAL_CALL acquire() throw ()
162     {
163         OWeakObject::acquire();
164     }
release()165     void SAL_CALL release() throw ()
166     {
167         OWeakObject::release();
168     }
169 
170     // XServiceInfo
171     virtual OUString SAL_CALL getImplementationName() throw (RuntimeException);
172     virtual sal_Bool SAL_CALL supportsService( const OUString & rServiceName ) throw (RuntimeException);
173     virtual Sequence< OUString > SAL_CALL getSupportedServiceNames() throw (RuntimeException);
174 
175     // XLBTestBase
176     virtual void SAL_CALL setValues( sal_Bool bBool, sal_Unicode cChar, sal_Int8 nByte,
177                                      sal_Int16 nShort, sal_uInt16 nUShort,
178                                      sal_Int32 nLong, sal_uInt32 nULong,
179                                      sal_Int64 nHyper, sal_uInt64 nUHyper,
180                                      float fFloat, double fDouble,
181                                      TestEnum eEnum, const ::rtl::OUString& rStr,
182                                      const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xTest,
183                                      const ::com::sun::star::uno::Any& rAny,
184                                      const ::com::sun::star::uno::Sequence<TestElement >& rSequence,
185                                      const TestData& rStruct )
186         throw(com::sun::star::uno::RuntimeException);
187 
188     virtual TestData SAL_CALL setValues2( sal_Bool& bBool, sal_Unicode& cChar, sal_Int8& nByte,
189                                                 sal_Int16& nShort, sal_uInt16& nUShort,
190                                                 sal_Int32& nLong, sal_uInt32& nULong,
191                                                 sal_Int64& nHyper, sal_uInt64& nUHyper,
192                                                 float& fFloat, double& fDouble,
193                                                 TestEnum& eEnum, rtl::OUString& rStr,
194                                                 ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xTest,
195                                                 ::com::sun::star::uno::Any& rAny,
196                                                 ::com::sun::star::uno::Sequence<TestElement >& rSequence,
197                                                 TestData& rStruct )
198         throw(com::sun::star::uno::RuntimeException);
199 
200     virtual TestData SAL_CALL getValues( sal_Bool& bBool, sal_Unicode& cChar, sal_Int8& nByte,
201                                                sal_Int16& nShort, sal_uInt16& nUShort,
202                                                sal_Int32& nLong, sal_uInt32& nULong,
203                                                sal_Int64& nHyper, sal_uInt64& nUHyper,
204                                                float& fFloat, double& fDouble,
205                                                TestEnum& eEnum, rtl::OUString& rStr,
206                                                ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xTest,
207                                                ::com::sun::star::uno::Any& rAny,
208                                                ::com::sun::star::uno::Sequence< TestElement >& rSequence,
209                                                TestData& rStruct )
210         throw(com::sun::star::uno::RuntimeException);
211 
echoSmallStruct(const SmallStruct & rStruct)212     virtual SmallStruct SAL_CALL echoSmallStruct(const SmallStruct& rStruct) throw(com::sun::star::uno::RuntimeException)
213         { return rStruct; }
echoMediumStruct(const MediumStruct & rStruct)214     virtual MediumStruct SAL_CALL echoMediumStruct(const MediumStruct& rStruct) throw(com::sun::star::uno::RuntimeException)
215         { return rStruct; }
echoBigStruct(const BigStruct & rStruct)216     virtual BigStruct SAL_CALL echoBigStruct(const BigStruct& rStruct) throw(com::sun::star::uno::RuntimeException)
217         { return rStruct; }
echoAllFloats(const AllFloats & rStruct)218     virtual AllFloats SAL_CALL echoAllFloats(const AllFloats& rStruct) throw(com::sun::star::uno::RuntimeException)
219         { return rStruct; }
echoTwoFloats(const TwoFloats & rStruct)220     virtual TwoFloats SAL_CALL echoTwoFloats(const TwoFloats& rStruct) throw(com::sun::star::uno::RuntimeException)
221         { return rStruct; }
echoThreeDoubles(const ThreeDoubles & rStruct)222     virtual ThreeDoubles SAL_CALL echoThreeDoubles(const ThreeDoubles& rStruct) throw(com::sun::star::uno::RuntimeException)
223         { return rStruct; }
echoMixedFloatLong(const MixedFloatLong & rStruct)224     virtual MixedFloatLong SAL_CALL echoMixedFloatLong(const MixedFloatLong& rStruct) throw(com::sun::star::uno::RuntimeException)
225         { return rStruct; }
echoOneByte(const OneByte & rStruct)226     virtual OneByte SAL_CALL echoOneByte(const OneByte& rStruct) throw(com::sun::star::uno::RuntimeException)
227         { return rStruct; }
echoThreeLongs(const ThreeLongs & rStruct)228     virtual ThreeLongs SAL_CALL echoThreeLongs(const ThreeLongs& rStruct) throw(com::sun::star::uno::RuntimeException)
229         { return rStruct; }
testPPCAlignment(sal_Int64,sal_Int64,sal_Int32,sal_Int64,sal_Int32 i2)230     virtual sal_Int32 SAL_CALL testPPCAlignment( sal_Int64, sal_Int64, sal_Int32, sal_Int64, sal_Int32 i2 ) throw(com::sun::star::uno::RuntimeException)
231         { return i2; }
testPackedStack(sal_Int64,sal_Int64,sal_Int64,sal_Int64,sal_Int64,sal_Int64,sal_Int64,sal_Int8 b,sal_Int8 c,sal_Int16 s,sal_Int32 l,sal_Int8 d,sal_Int64 h)232     virtual sal_Int64 SAL_CALL testPackedStack(
233         sal_Int64, sal_Int64, sal_Int64, sal_Int64, sal_Int64, sal_Int64,
234         sal_Int64, sal_Int8 b, sal_Int8 c, sal_Int16 s, sal_Int32 l,
235         sal_Int8 d, sal_Int64 h) throw(com::sun::star::uno::RuntimeException)
236     {
237         return ((static_cast<sal_Int64>(b) << 56) |
238             (static_cast<sal_uInt64>(static_cast<sal_uInt8>(c)) << 48) |
239             (static_cast<sal_uInt64>(static_cast<sal_uInt16>(s)) << 32) |
240             static_cast<sal_uInt32>(l)) ^
241             (static_cast<sal_Int64>(d) << 24) ^ h;
242     }
testFpStack(double,double,double,double,double,double,double,double,float f8,double d9)243     virtual double SAL_CALL testFpStack(
244         double, double, double, double, double, double, double, double,
245         float f8, double d9) throw(com::sun::star::uno::RuntimeException)
246         { return static_cast<double>(f8) + d9; }
247 
getBool()248     virtual sal_Bool SAL_CALL getBool() throw(com::sun::star::uno::RuntimeException)
249         { return _aData.Bool; }
getByte()250     virtual sal_Int8 SAL_CALL getByte() throw(com::sun::star::uno::RuntimeException)
251         { return _aData.Byte; }
getChar()252     virtual sal_Unicode SAL_CALL getChar() throw(com::sun::star::uno::RuntimeException)
253         { return _aData.Char; }
getShort()254     virtual sal_Int16 SAL_CALL getShort() throw(com::sun::star::uno::RuntimeException)
255         { return _aData.Short; }
getUShort()256     virtual sal_uInt16 SAL_CALL getUShort() throw(com::sun::star::uno::RuntimeException)
257         { return _aData.UShort; }
getLong()258     virtual sal_Int32 SAL_CALL getLong() throw(com::sun::star::uno::RuntimeException)
259         { return _aData.Long; }
getULong()260     virtual sal_uInt32 SAL_CALL getULong() throw(com::sun::star::uno::RuntimeException)
261         { return _aData.ULong; }
getHyper()262     virtual sal_Int64 SAL_CALL getHyper() throw(com::sun::star::uno::RuntimeException)
263         { return _aData.Hyper; }
getUHyper()264     virtual sal_uInt64 SAL_CALL getUHyper() throw(com::sun::star::uno::RuntimeException)
265         { return _aData.UHyper; }
getFloat()266     virtual float SAL_CALL getFloat() throw(com::sun::star::uno::RuntimeException)
267         { return _aData.Float; }
getDouble()268     virtual double SAL_CALL getDouble() throw(com::sun::star::uno::RuntimeException)
269         { return _aData.Double; }
getEnum()270     virtual TestEnum SAL_CALL getEnum() throw(com::sun::star::uno::RuntimeException)
271         { return _aData.Enum; }
getString()272     virtual rtl::OUString SAL_CALL getString() throw(com::sun::star::uno::RuntimeException)
273         { return _aData.String; }
getInterface()274     virtual com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL getInterface(  ) throw(com::sun::star::uno::RuntimeException)
275         { return _aData.Interface; }
getAny()276     virtual com::sun::star::uno::Any SAL_CALL getAny() throw(com::sun::star::uno::RuntimeException)
277         { return _aData.Any; }
getSequence()278     virtual com::sun::star::uno::Sequence< TestElement > SAL_CALL getSequence() throw(com::sun::star::uno::RuntimeException)
279         { return _aData.Sequence; }
getStruct()280     virtual TestData SAL_CALL getStruct() throw(com::sun::star::uno::RuntimeException)
281         { return _aStructData; }
282 
setBool(sal_Bool _bool)283     virtual void SAL_CALL setBool( sal_Bool _bool ) throw(::com::sun::star::uno::RuntimeException)
284         { _aData.Bool = _bool; }
setByte(sal_Int8 _byte)285     virtual void SAL_CALL setByte( sal_Int8 _byte ) throw(::com::sun::star::uno::RuntimeException)
286         { _aData.Byte = _byte; }
setChar(sal_Unicode _char)287     virtual void SAL_CALL setChar( sal_Unicode _char ) throw(::com::sun::star::uno::RuntimeException)
288         { _aData.Char = _char; }
setShort(sal_Int16 _short)289     virtual void SAL_CALL setShort( sal_Int16 _short ) throw(::com::sun::star::uno::RuntimeException)
290         { _aData.Short = _short; }
setUShort(sal_uInt16 _ushort)291     virtual void SAL_CALL setUShort( sal_uInt16 _ushort ) throw(::com::sun::star::uno::RuntimeException)
292         { _aData.UShort = _ushort; }
setLong(sal_Int32 _long)293     virtual void SAL_CALL setLong( sal_Int32 _long ) throw(::com::sun::star::uno::RuntimeException)
294         { _aData.Long = _long; }
setULong(sal_uInt32 _ulong)295     virtual void SAL_CALL setULong( sal_uInt32 _ulong ) throw(::com::sun::star::uno::RuntimeException)
296         { _aData.ULong = _ulong; }
setHyper(sal_Int64 _hyper)297     virtual void SAL_CALL setHyper( sal_Int64 _hyper ) throw(::com::sun::star::uno::RuntimeException)
298         { _aData.Hyper = _hyper; }
setUHyper(sal_uInt64 _uhyper)299     virtual void SAL_CALL setUHyper( sal_uInt64 _uhyper ) throw(::com::sun::star::uno::RuntimeException)
300         { _aData.UHyper = _uhyper; }
setFloat(float _float)301     virtual void SAL_CALL setFloat( float _float ) throw(::com::sun::star::uno::RuntimeException)
302         { _aData.Float = _float; }
setDouble(double _double)303     virtual void SAL_CALL setDouble( double _double ) throw(::com::sun::star::uno::RuntimeException)
304         { _aData.Double = _double; }
setEnum(TestEnum _enum)305     virtual void SAL_CALL setEnum( TestEnum _enum ) throw(::com::sun::star::uno::RuntimeException)
306         { _aData.Enum = _enum; }
setString(const::rtl::OUString & _string)307     virtual void SAL_CALL setString( const ::rtl::OUString& _string ) throw(::com::sun::star::uno::RuntimeException)
308         { _aData.String = _string; }
setInterface(const::com::sun::star::uno::Reference<::com::sun::star::uno::XInterface> & _interface)309     virtual void SAL_CALL setInterface( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _interface ) throw(::com::sun::star::uno::RuntimeException)
310         { _aData.Interface = _interface; }
setAny(const::com::sun::star::uno::Any & _any)311     virtual void SAL_CALL setAny( const ::com::sun::star::uno::Any& _any ) throw(::com::sun::star::uno::RuntimeException)
312         { _aData.Any = _any; }
setSequence(const::com::sun::star::uno::Sequence<TestElement> & _sequence)313     virtual void SAL_CALL setSequence( const ::com::sun::star::uno::Sequence<TestElement >& _sequence ) throw(::com::sun::star::uno::RuntimeException)
314         { _aData.Sequence = _sequence; }
setStruct(const TestData & _struct)315     virtual void SAL_CALL setStruct( const TestData& _struct ) throw(::com::sun::star::uno::RuntimeException)
316         { _aStructData = _struct; }
317 
getRaiseAttr1()318     virtual sal_Int32 SAL_CALL getRaiseAttr1() throw (RuntimeException)
319     { throw RuntimeException(); }
320 
setRaiseAttr1(sal_Int32)321     virtual void SAL_CALL setRaiseAttr1(sal_Int32)
322         throw (IllegalArgumentException, RuntimeException)
323     { throw IllegalArgumentException(); }
324 
getRaiseAttr2()325     virtual sal_Int32 SAL_CALL getRaiseAttr2()
326         throw (IllegalArgumentException, RuntimeException)
327     { throw IllegalArgumentException(); }
328 
transportPolyBoolean(TestPolyStruct<sal_Bool> const & arg)329     virtual TestPolyStruct< sal_Bool > SAL_CALL transportPolyBoolean(
330         TestPolyStruct< sal_Bool > const & arg) throw (RuntimeException)
331     { return arg; }
332 
transportPolyHyper(TestPolyStruct<sal_Int64> &)333     virtual void SAL_CALL transportPolyHyper(TestPolyStruct< sal_Int64 > &)
334         throw (RuntimeException) {}
335 
transportPolySequence(TestPolyStruct<Sequence<Any>> const & arg1,TestPolyStruct<Sequence<Any>> & arg2)336     virtual void SAL_CALL transportPolySequence(
337         TestPolyStruct< Sequence< Any > > const & arg1,
338         TestPolyStruct< Sequence< Any > > & arg2) throw (RuntimeException)
339     { arg2 = arg1; }
340 
getNullPolyLong()341     virtual TestPolyStruct< sal_Int32 > SAL_CALL getNullPolyLong()
342         throw (RuntimeException)
343     { return TestPolyStruct< sal_Int32 >(0); /* work around MS compiler bug */ }
344 
getNullPolyString()345     virtual TestPolyStruct< rtl::OUString > SAL_CALL getNullPolyString()
346         throw (RuntimeException)
347     { return TestPolyStruct< rtl::OUString >(); }
348 
getNullPolyType()349     virtual TestPolyStruct< Type > SAL_CALL getNullPolyType()
350         throw (RuntimeException)
351     { return TestPolyStruct< Type >(); }
352 
getNullPolyAny()353     virtual TestPolyStruct< Any > SAL_CALL getNullPolyAny()
354         throw (RuntimeException)
355     { return TestPolyStruct< Any >(); }
356 
357     virtual TestPolyStruct< Sequence< sal_Bool > > SAL_CALL
getNullPolySequence()358     getNullPolySequence() throw (RuntimeException)
359     { return TestPolyStruct< Sequence< sal_Bool > >(); }
360 
getNullPolyEnum()361     virtual TestPolyStruct< TestEnum > SAL_CALL getNullPolyEnum()
362         throw (RuntimeException)
363     { return TestPolyStruct< TestEnum >(
364         test::testtools::bridgetest::TestEnum_TEST);
365           /* work around MS compiler bug */ }
366 
getNullPolyBadEnum()367     virtual TestPolyStruct< TestBadEnum > SAL_CALL getNullPolyBadEnum()
368         throw (RuntimeException)
369     { return TestPolyStruct< TestBadEnum >(
370         test::testtools::bridgetest::TestBadEnum_M);
371           /* explicitly instantiate with default enumerator */ }
372 
getNullPolyStruct()373     virtual TestPolyStruct< TestStruct > SAL_CALL getNullPolyStruct()
374         throw (RuntimeException)
375     { return TestPolyStruct< TestStruct >(); }
376 
377     virtual TestPolyStruct< Reference< XBridgeTestBase > > SAL_CALL
getNullPolyInterface()378     getNullPolyInterface() throw (RuntimeException)
379     { return TestPolyStruct< Reference< XBridgeTestBase > >(); }
380 
381     virtual ::com::sun::star::uno::Any SAL_CALL transportAny(
382         const ::com::sun::star::uno::Any& value )
383         throw(::com::sun::star::uno::RuntimeException);
384 
385     virtual void SAL_CALL call( sal_Int32 nCallId, sal_Int32 nWaitMUSEC )
386         throw(::com::sun::star::uno::RuntimeException);
387     virtual void SAL_CALL callOneway( sal_Int32 nCallId, sal_Int32 nWaitMUSEC )
388         throw(::com::sun::star::uno::RuntimeException);
389     virtual sal_Bool SAL_CALL sequenceOfCallTestPassed(  )
390         throw(::com::sun::star::uno::RuntimeException);
391     virtual void SAL_CALL startRecursiveCall(
392         const ::com::sun::star::uno::Reference< XRecursiveCall >& xCall, sal_Int32 nToCall )
393         throw(::com::sun::star::uno::RuntimeException);
394 
395     virtual Reference< XMulti > SAL_CALL getMulti() throw (RuntimeException);
396 
397     virtual rtl::OUString SAL_CALL testMulti(Reference< XMulti > const & multi)
398         throw (RuntimeException);
399 
400 public: // XBridgeTest
401     virtual TestData SAL_CALL raiseException( sal_Int16 nArgumentPos, const OUString & rMsg, const Reference< XInterface > & xCOntext )
402         throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
403 
404     virtual void SAL_CALL raiseRuntimeExceptionOneway(
405         const ::rtl::OUString& Message, const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& Context )
406         throw(::com::sun::star::uno::RuntimeException);
407 
408     virtual sal_Int32 SAL_CALL getRuntimeException() throw(::com::sun::star::uno::RuntimeException);
409     virtual void SAL_CALL setRuntimeException( sal_Int32 _runtimeexception ) throw(::com::sun::star::uno::RuntimeException);
410 
411     // XBridgeTest2
412     virtual Sequence< sal_Bool > SAL_CALL setSequenceBool(
413         const Sequence< sal_Bool >& aSeq ) throw (RuntimeException);
414     virtual Sequence< sal_Unicode > SAL_CALL setSequenceChar(
415         const Sequence< sal_Unicode >& aSeq ) throw (RuntimeException);
416     virtual Sequence< sal_Int8 > SAL_CALL setSequenceByte(
417         const Sequence< sal_Int8 >& aSeq ) throw (RuntimeException);
418     virtual Sequence< sal_Int16 > SAL_CALL setSequenceShort(
419         const Sequence< sal_Int16 >& aSeq ) throw (RuntimeException);
420     virtual Sequence< sal_uInt16 > SAL_CALL setSequenceUShort(
421         const Sequence< sal_uInt16 >& aSeq ) throw (RuntimeException);
422     virtual Sequence< sal_Int32 > SAL_CALL setSequenceLong(
423         const Sequence< sal_Int32 >& aSeq ) throw (RuntimeException);
424     virtual Sequence< sal_uInt32 > SAL_CALL setSequenceULong(
425         const Sequence< sal_uInt32 >& aSeq ) throw (RuntimeException);
426     virtual Sequence< sal_Int64 > SAL_CALL setSequenceHyper(
427         const Sequence< sal_Int64 >& aSeq ) throw (RuntimeException);
428     virtual Sequence< sal_uInt64 > SAL_CALL setSequenceUHyper(
429         const Sequence< sal_uInt64 >& aSeq ) throw (RuntimeException);
430     virtual Sequence< float > SAL_CALL setSequenceFloat(
431         const Sequence< float >& aSeq ) throw (RuntimeException);
432     virtual Sequence< double > SAL_CALL setSequenceDouble(
433         const Sequence< double >& aSeq ) throw (RuntimeException);
434     virtual Sequence< TestEnum > SAL_CALL setSequenceEnum(
435         const Sequence< TestEnum >& aSeq ) throw (RuntimeException) ;
436     virtual Sequence< OUString > SAL_CALL setSequenceString(
437         const Sequence< OUString >& aString ) throw (RuntimeException);
438     virtual Sequence< Reference< XInterface > > SAL_CALL setSequenceXInterface(
439         const Sequence< Reference< XInterface > >& aSeq )
440         throw (RuntimeException);
441     virtual Sequence<Any > SAL_CALL setSequenceAny(
442         const Sequence<Any >& aSeq ) throw (RuntimeException);
443     virtual Sequence<TestElement > SAL_CALL setSequenceStruct(
444         const Sequence< TestElement >& aSeq ) throw (RuntimeException);
445     virtual Sequence< Sequence< sal_Int32 > > SAL_CALL setDim2(
446         const Sequence<Sequence< sal_Int32 > >& aSeq ) throw (RuntimeException);
447     virtual Sequence< Sequence< Sequence< sal_Int32 > > > SAL_CALL setDim3(
448         const Sequence< Sequence< Sequence< sal_Int32 > > >& aSeq )
449         throw (RuntimeException);
450     virtual void SAL_CALL setSequencesInOut(Sequence< sal_Bool >& aSeqBoolean,
451                                 Sequence< sal_Unicode >& aSeqChar,
452                                 Sequence< sal_Int8 >& aSeqByte,
453                                 Sequence< sal_Int16 >& aSeqShort,
454                                 Sequence< sal_uInt16 >& aSeqUShort,
455                                 Sequence< sal_Int32 >& aSeqLong,
456                                 Sequence< sal_uInt32 >& aSeqULong,
457                                 Sequence< sal_Int64 >& aSeqHyper,
458                                 Sequence< sal_uInt64 >& aSeqUHyper,
459                                 Sequence< float >& aSeqFloat,
460                                 Sequence< double >& aSeqDouble,
461                                 Sequence< TestEnum >& aSeqTestEnum,
462                                 Sequence< OUString >& aSeqString,
463                                 Sequence<Reference<XInterface > >& aSeqXInterface,
464                                 Sequence< Any >& aSeqAny,
465                                 Sequence< Sequence< sal_Int32 > >& aSeqDim2,
466                                 Sequence< Sequence< Sequence< sal_Int32 > > >& aSeqDim3 )
467         throw (RuntimeException);
468     virtual void SAL_CALL setSequencesOut( Sequence< sal_Bool >& aSeqBoolean,
469                              Sequence< sal_Unicode >& aSeqChar,
470                              Sequence< sal_Int8 >& aSeqByte,
471                              Sequence< sal_Int16 >& aSeqShort,
472                              Sequence< sal_uInt16 >& aSeqUShort,
473                              Sequence< sal_Int32 >& aSeqLong,
474                              Sequence< sal_uInt32 >& aSeqULong,
475                              Sequence< sal_Int64 >& aSeqHyper,
476                              Sequence< sal_uInt64 >& aSeqUHyper,
477                              Sequence< float >& aSeqFloat,
478                              Sequence< double >& aSeqDouble,
479                              Sequence< TestEnum >& aSeqEnum,
480                              Sequence< OUString >& aSeqString,
481                              Sequence< Reference< XInterface > >& aSeqXInterface,
482                              Sequence< Any >& aSeqAny,
483                              Sequence< Sequence< sal_Int32 > >& aSeqDim2,
484                              Sequence< Sequence< Sequence< sal_Int32 > > >& aSeqDim3 )
485         throw (RuntimeException);
486     virtual void SAL_CALL testConstructorsService(
487         Reference< XComponentContext > const & context)
488         throw (RuntimeException);
489     virtual Reference< XCurrentContextChecker > SAL_CALL
490     getCurrentContextChecker()
491         throw (RuntimeException);
492 
493 public:
494     virtual void SAL_CALL callRecursivly( const ::com::sun::star::uno::Reference< XRecursiveCall >& xCall, sal_Int32 nToCall ) throw(::com::sun::star::uno::RuntimeException);
495 };
496 
497 //Dummy class for XComponent implementation
498 class Dummy : public osl::DebugBase<Dummy>,
499               public WeakComponentImplHelperBase
500 {
501 public:
Dummy()502      Dummy(): WeakComponentImplHelperBase(*Mutex::getGlobalMutex()){}
503 
504 };
505 //__________________________________________________________________________________________________
transportAny(const Any & value)506 Any Test_Impl::transportAny( const Any & value ) throw ( ::com::sun::star::uno::RuntimeException)
507 {
508     return value;
509 }
510 
511 //__________________________________________________________________________________________________
call(sal_Int32 nCallId,sal_Int32 nWaitMUSEC)512 void Test_Impl::call( sal_Int32 nCallId , sal_Int32 nWaitMUSEC ) throw(::com::sun::star::uno::RuntimeException)
513 {
514     TimeValue value = { static_cast<unsigned>(nWaitMUSEC / 1000000), static_cast<unsigned>(nWaitMUSEC * 1000) };
515     osl_waitThread( &value );
516     if( m_bFirstCall )
517     {
518         m_bFirstCall = sal_False;
519     }
520     else
521     {
522         m_bSequenceOfCallTestPassed = m_bSequenceOfCallTestPassed && (nCallId > m_nLastCallId);
523     }
524     m_nLastCallId = nCallId;
525 }
526 
527 //__________________________________________________________________________________________________
callOneway(sal_Int32 nCallId,sal_Int32 nWaitMUSEC)528 void Test_Impl::callOneway( sal_Int32 nCallId , sal_Int32 nWaitMUSEC ) throw (::com::sun::star::uno::RuntimeException)
529 {
530     TimeValue value = { static_cast<unsigned>(nWaitMUSEC / 1000000), static_cast<unsigned>(nWaitMUSEC * 1000) };
531     osl_waitThread( &value );
532     m_bSequenceOfCallTestPassed = m_bSequenceOfCallTestPassed && (nCallId > m_nLastCallId);
533     m_nLastCallId = nCallId;
534 }
535 
536 //__________________________________________________________________________________________________
sequenceOfCallTestPassed()537 sal_Bool Test_Impl::sequenceOfCallTestPassed() throw (::com::sun::star::uno::RuntimeException)
538 {
539     return m_bSequenceOfCallTestPassed;
540 }
541 
542 //__________________________________________________________________________________________________
startRecursiveCall(const::com::sun::star::uno::Reference<XRecursiveCall> & xCall,sal_Int32 nToCall)543 void SAL_CALL Test_Impl::startRecursiveCall(
544     const ::com::sun::star::uno::Reference< XRecursiveCall >& xCall, sal_Int32 nToCall )
545     throw(::com::sun::star::uno::RuntimeException)
546 {
547     MutexGuard guard( m_mutex );
548     if( nToCall )
549     {
550         nToCall --;
551         xCall->callRecursivly( this , nToCall );
552     }
553 }
554 
555 
callRecursivly(const::com::sun::star::uno::Reference<XRecursiveCall> & xCall,sal_Int32 nToCall)556 void SAL_CALL Test_Impl::callRecursivly(
557     const ::com::sun::star::uno::Reference< XRecursiveCall >& xCall,
558     sal_Int32 nToCall )
559     throw(::com::sun::star::uno::RuntimeException)
560 {
561     MutexGuard guard( m_mutex );
562     if( nToCall )
563     {
564         nToCall --;
565         xCall->callRecursivly( this , nToCall );
566     }
567 }
568 
getMulti()569 Reference< XMulti > Test_Impl::getMulti() throw (RuntimeException) {
570     return new testtools::bridgetest::Multi;
571 }
572 
testMulti(Reference<XMulti> const & multi)573 rtl::OUString Test_Impl::testMulti(Reference< XMulti > const & multi)
574     throw (RuntimeException)
575 {
576     return testtools::bridgetest::testMulti(multi);
577 }
578 
579 //__________________________________________________________________________________________________
setValues(sal_Bool bBool,sal_Unicode cChar,sal_Int8 nByte,sal_Int16 nShort,sal_uInt16 nUShort,sal_Int32 nLong,sal_uInt32 nULong,sal_Int64 nHyper,sal_uInt64 nUHyper,float fFloat,double fDouble,TestEnum eEnum,const::rtl::OUString & rStr,const::com::sun::star::uno::Reference<::com::sun::star::uno::XInterface> & xTest,const::com::sun::star::uno::Any & rAny,const::com::sun::star::uno::Sequence<TestElement> & rSequence,const TestData & rStruct)580 void Test_Impl::setValues( sal_Bool bBool, sal_Unicode cChar, sal_Int8 nByte,
581                            sal_Int16 nShort, sal_uInt16 nUShort,
582                            sal_Int32 nLong, sal_uInt32 nULong,
583                            sal_Int64 nHyper, sal_uInt64 nUHyper,
584                            float fFloat, double fDouble,
585                            TestEnum eEnum, const ::rtl::OUString& rStr,
586                            const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xTest,
587                            const ::com::sun::star::uno::Any& rAny,
588                            const ::com::sun::star::uno::Sequence<TestElement >& rSequence,
589                            const TestData& rStruct )
590     throw(com::sun::star::uno::RuntimeException)
591 {
592     assign( _aData,
593             bBool, cChar, nByte, nShort, nUShort, nLong, nULong, nHyper, nUHyper, fFloat, fDouble,
594             eEnum, rStr, xTest, rAny, rSequence );
595     _aStructData = rStruct;
596 }
597 //__________________________________________________________________________________________________
setValues2(sal_Bool & bBool,sal_Unicode & cChar,sal_Int8 & nByte,sal_Int16 & nShort,sal_uInt16 & nUShort,sal_Int32 & nLong,sal_uInt32 & nULong,sal_Int64 & nHyper,sal_uInt64 & nUHyper,float & fFloat,double & fDouble,TestEnum & eEnum,rtl::OUString & rStr,::com::sun::star::uno::Reference<::com::sun::star::uno::XInterface> & xTest,::com::sun::star::uno::Any & rAny,::com::sun::star::uno::Sequence<TestElement> & rSequence,TestData & rStruct)598 TestData Test_Impl::setValues2( sal_Bool& bBool, sal_Unicode& cChar, sal_Int8& nByte,
599                                 sal_Int16& nShort, sal_uInt16& nUShort,
600                                 sal_Int32& nLong, sal_uInt32& nULong,
601                                 sal_Int64& nHyper, sal_uInt64& nUHyper,
602                                 float& fFloat, double& fDouble,
603                                 TestEnum& eEnum, rtl::OUString& rStr,
604                                 ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xTest,
605                                 ::com::sun::star::uno::Any& rAny,
606                                 ::com::sun::star::uno::Sequence<TestElement >& rSequence,
607                                 TestData& rStruct )
608     throw(com::sun::star::uno::RuntimeException)
609 {
610     assign( _aData,
611             bBool, cChar, nByte, nShort, nUShort, nLong, nULong, nHyper, nUHyper, fFloat, fDouble,
612             eEnum, rStr, xTest, rAny, rSequence );
613     _aStructData = rStruct;
614 
615     TestElement elem = rSequence[ 0 ];
616     rSequence[ 0 ] = rSequence[ 1 ];
617     rSequence[ 1 ] = elem;
618 
619     return _aStructData;
620 }
621 //__________________________________________________________________________________________________
getValues(sal_Bool & bBool,sal_Unicode & cChar,sal_Int8 & nByte,sal_Int16 & nShort,sal_uInt16 & nUShort,sal_Int32 & nLong,sal_uInt32 & nULong,sal_Int64 & nHyper,sal_uInt64 & nUHyper,float & fFloat,double & fDouble,TestEnum & eEnum,rtl::OUString & rStr,::com::sun::star::uno::Reference<::com::sun::star::uno::XInterface> & xTest,::com::sun::star::uno::Any & rAny,::com::sun::star::uno::Sequence<TestElement> & rSequence,TestData & rStruct)622 TestData Test_Impl::getValues( sal_Bool& bBool, sal_Unicode& cChar, sal_Int8& nByte,
623                                sal_Int16& nShort, sal_uInt16& nUShort,
624                                sal_Int32& nLong, sal_uInt32& nULong,
625                                sal_Int64& nHyper, sal_uInt64& nUHyper,
626                                float& fFloat, double& fDouble,
627                                TestEnum& eEnum, rtl::OUString& rStr,
628                                ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xTest,
629                                ::com::sun::star::uno::Any& rAny,
630                                ::com::sun::star::uno::Sequence<TestElement >& rSequence,
631                                TestData& rStruct )
632     throw(com::sun::star::uno::RuntimeException)
633 {
634     bBool = _aData.Bool;
635     cChar = _aData.Char;
636     nByte = _aData.Byte;
637     nShort = _aData.Short;
638     nUShort = _aData.UShort;
639     nLong = _aData.Long;
640     nULong = _aData.ULong;
641     nHyper = _aData.Hyper;
642     nUHyper = _aData.UHyper;
643     fFloat = _aData.Float;
644     fDouble = _aData.Double;
645     eEnum = _aData.Enum;
646     rStr = _aData.String;
647     xTest = _aData.Interface;
648     rAny = _aData.Any;
649     rSequence = _aData.Sequence;
650     rStruct = _aStructData;
651     return _aStructData;
652 }
653 //__________________________________________________________________________________________________
raiseException(sal_Int16 nArgumentPos,const OUString & rMsg,const Reference<XInterface> & xContext)654 TestData Test_Impl::raiseException( sal_Int16 nArgumentPos, const OUString & rMsg, const Reference< XInterface > & xContext )
655     throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException)
656 {
657     IllegalArgumentException aExc;
658     aExc.ArgumentPosition = nArgumentPos;
659     aExc.Message          = _aData.String = rMsg;
660     aExc.Context          = _aData.Interface = xContext;
661     throw aExc;
662 }
663 
raiseRuntimeExceptionOneway(const OUString & rMsg,const Reference<XInterface> & xContext)664 void Test_Impl::raiseRuntimeExceptionOneway( const OUString & rMsg, const Reference< XInterface > & xContext )
665     throw(::com::sun::star::uno::RuntimeException)
666 {
667     RuntimeException aExc;
668     aExc.Message          = _aData.String = rMsg;
669     aExc.Context          = _aData.Interface = xContext;
670     throw aExc;
671 }
672 
dothrow2(RuntimeException e)673 void dothrow2( RuntimeException e )
674 {
675     throw e;
676 }
dothrow(RuntimeException const & e)677 void dothrow( RuntimeException const & e )
678 {
679 #if defined _MSC_VER
680     // currently only for MSVC:
681     // just to test whether all bridges fall back to a RuntimeException
682     // in case of a thrown non-UNO exception:
683     try
684     {
685         throw ::std::bad_alloc();
686     }
687     catch (...)
688     {
689         try
690         {
691             Any a( getCaughtException() );
692             RuntimeException exc;
693             OSL_VERIFY( a >>= exc );
694             OSL_TRACE(
695                 OUStringToOString(
696                     exc.Message, RTL_TEXTENCODING_UTF8 ).getStr() );
697         }
698         catch (...) // never throws anything
699         {
700             fprintf( stderr, "\ngetCaughtException() failed!\n" );
701             exit( 1 );
702         }
703     }
704 #endif
705     dothrow2( e );
706 }
707 //______________________________________________________________________________
getRuntimeException()708 sal_Int32 Test_Impl::getRuntimeException()
709     throw (RuntimeException)
710 {
711     try
712     {
713         dothrow( RuntimeException( _aData.String, _aData.Interface ) );
714     }
715     catch (Exception &)
716     {
717         Any a( getCaughtException() );
718         throwException( a );
719     }
720     return 0; // for dummy
721 }
722 //__________________________________________________________________________________________________
setRuntimeException(sal_Int32)723 void Test_Impl::setRuntimeException( sal_Int32 ) throw(::com::sun::star::uno::RuntimeException)
724 {
725     RuntimeException aExc;
726     aExc.Message          = _aData.String;
727     aExc.Context          = _aData.Interface;
728     throwException( makeAny( aExc ) );
729 }
730 
731 // XBridgeTest2 -------------------------------------------------------------
setSequenceBool(const Sequence<sal_Bool> & aSeq)732 Sequence< sal_Bool > SAL_CALL Test_Impl::setSequenceBool(
733         const Sequence< sal_Bool >& aSeq ) throw (RuntimeException)
734 {
735     _arBool = aSeq;
736     return aSeq;
737 }
738 
setSequenceChar(const Sequence<sal_Unicode> & aSeq)739 Sequence< sal_Unicode > SAL_CALL Test_Impl::setSequenceChar(
740         const Sequence< sal_Unicode >& aSeq ) throw (RuntimeException)
741 {
742     _arChar = aSeq;
743     return aSeq;
744 }
745 
setSequenceByte(const Sequence<sal_Int8> & aSeq)746 Sequence< sal_Int8 > SAL_CALL Test_Impl::setSequenceByte(
747         const Sequence< sal_Int8 >& aSeq ) throw (RuntimeException)
748 {
749     _arByte = aSeq;
750     return aSeq;
751 }
752 
setSequenceShort(const Sequence<sal_Int16> & aSeq)753 Sequence< sal_Int16 > SAL_CALL Test_Impl::setSequenceShort(
754         const Sequence< sal_Int16 >& aSeq ) throw (RuntimeException)
755 {
756     _arShort = aSeq;
757     return aSeq;
758 }
759 
setSequenceUShort(const Sequence<sal_uInt16> & aSeq)760 Sequence< sal_uInt16 > SAL_CALL Test_Impl::setSequenceUShort(
761         const Sequence< sal_uInt16 >& aSeq ) throw (RuntimeException)
762 {
763     _arUShort = aSeq;
764     return aSeq;
765 }
766 
setSequenceLong(const Sequence<sal_Int32> & aSeq)767 Sequence< sal_Int32 > SAL_CALL Test_Impl::setSequenceLong(
768         const Sequence< sal_Int32 >& aSeq ) throw (RuntimeException)
769 {
770     _arLong = aSeq;
771     return aSeq;
772 }
773 
setSequenceULong(const Sequence<sal_uInt32> & aSeq)774 Sequence< sal_uInt32 > SAL_CALL Test_Impl::setSequenceULong(
775         const Sequence< sal_uInt32 >& aSeq ) throw (RuntimeException)
776 {
777     _arULong = aSeq;
778     return aSeq;
779 }
780 
setSequenceHyper(const Sequence<sal_Int64> & aSeq)781 Sequence< sal_Int64 > SAL_CALL Test_Impl::setSequenceHyper(
782         const Sequence< sal_Int64 >& aSeq ) throw (RuntimeException)
783 {
784     _arHyper = aSeq;
785     return aSeq;
786 }
787 
setSequenceUHyper(const Sequence<sal_uInt64> & aSeq)788 Sequence< sal_uInt64 > SAL_CALL Test_Impl::setSequenceUHyper(
789         const Sequence< sal_uInt64 >& aSeq ) throw (RuntimeException)
790 {
791     _arUHyper = aSeq;
792     return aSeq;
793 }
794 
setSequenceFloat(const Sequence<float> & aSeq)795 Sequence< float > SAL_CALL Test_Impl::setSequenceFloat(
796         const Sequence< float >& aSeq ) throw (RuntimeException)
797 {
798     _arFloat = aSeq;
799     return aSeq;
800 }
801 
setSequenceDouble(const Sequence<double> & aSeq)802 Sequence< double > SAL_CALL Test_Impl::setSequenceDouble(
803     const Sequence< double >& aSeq ) throw (RuntimeException)
804 {
805     _arDouble = aSeq;
806     return aSeq;
807 }
808 
setSequenceEnum(const Sequence<TestEnum> & aSeq)809 Sequence< TestEnum > SAL_CALL Test_Impl::setSequenceEnum(
810     const Sequence< TestEnum >& aSeq ) throw (RuntimeException)
811 {
812     _arEnum = aSeq;
813     return aSeq;
814 }
815 
setSequenceString(const Sequence<OUString> & aSeq)816 Sequence< OUString > SAL_CALL Test_Impl::setSequenceString(
817     const Sequence< OUString >& aSeq ) throw (RuntimeException)
818 {
819     _arString = aSeq;
820     return aSeq;
821 }
822 
setSequenceXInterface(const Sequence<Reference<XInterface>> & aSeq)823 Sequence< Reference< XInterface > > SAL_CALL Test_Impl::setSequenceXInterface(
824         const Sequence< Reference< XInterface > >& aSeq )
825         throw (RuntimeException)
826 {
827     _arObject = aSeq;
828     return aSeq;
829 }
830 
setSequenceAny(const Sequence<Any> & aSeq)831 Sequence<Any > SAL_CALL Test_Impl::setSequenceAny(
832     const Sequence<Any >& aSeq ) throw (RuntimeException)
833 {
834     _arAny = aSeq;
835     return aSeq;
836 }
837 
setSequenceStruct(const Sequence<TestElement> & aSeq)838 Sequence<TestElement > SAL_CALL Test_Impl::setSequenceStruct(
839     const Sequence< TestElement >& aSeq ) throw (RuntimeException)
840 {
841     _arStruct = aSeq;
842     return aSeq;
843 }
844 
setDim2(const Sequence<Sequence<sal_Int32>> & aSeq)845 Sequence< Sequence< sal_Int32 > > SAL_CALL Test_Impl::setDim2(
846         const Sequence<Sequence< sal_Int32 > >& aSeq ) throw (RuntimeException)
847 {
848     _arLong2 = aSeq;
849     return aSeq;
850 }
851 
setDim3(const Sequence<Sequence<Sequence<sal_Int32>>> & aSeq)852 Sequence< Sequence< Sequence< sal_Int32 > > > SAL_CALL Test_Impl::setDim3(
853         const Sequence< Sequence< Sequence< sal_Int32 > > >& aSeq )
854         throw (RuntimeException)
855 {
856     _arLong3 = aSeq;
857     return aSeq;
858 }
859 
setSequencesInOut(Sequence<sal_Bool> & aSeqBoolean,Sequence<sal_Unicode> & aSeqChar,Sequence<sal_Int8> & aSeqByte,Sequence<sal_Int16> & aSeqShort,Sequence<sal_uInt16> & aSeqUShort,Sequence<sal_Int32> & aSeqLong,Sequence<sal_uInt32> & aSeqULong,Sequence<sal_Int64> & aSeqHyper,Sequence<sal_uInt64> & aSeqUHyper,Sequence<float> & aSeqFloat,Sequence<double> & aSeqDouble,Sequence<TestEnum> & aSeqTestEnum,Sequence<OUString> & aSeqString,Sequence<Reference<XInterface>> & aSeqXInterface,Sequence<Any> & aSeqAny,Sequence<Sequence<sal_Int32>> & aSeqDim2,Sequence<Sequence<Sequence<sal_Int32>>> & aSeqDim3)860 void SAL_CALL Test_Impl::setSequencesInOut(Sequence< sal_Bool >& aSeqBoolean,
861                                 Sequence< sal_Unicode >& aSeqChar,
862                                 Sequence< sal_Int8 >& aSeqByte,
863                                 Sequence< sal_Int16 >& aSeqShort,
864                                 Sequence< sal_uInt16 >& aSeqUShort,
865                                 Sequence< sal_Int32 >& aSeqLong,
866                                 Sequence< sal_uInt32 >& aSeqULong,
867                                 Sequence< sal_Int64 >& aSeqHyper,
868                                 Sequence< sal_uInt64 >& aSeqUHyper,
869                                 Sequence< float >& aSeqFloat,
870                                 Sequence< double >& aSeqDouble,
871                                 Sequence< TestEnum >& aSeqTestEnum,
872                                 Sequence< OUString >& aSeqString,
873                                 Sequence<Reference<XInterface > >& aSeqXInterface,
874                                 Sequence< Any >& aSeqAny,
875                                 Sequence< Sequence< sal_Int32 > >& aSeqDim2,
876                                 Sequence< Sequence< Sequence< sal_Int32 > > >& aSeqDim3 )
877         throw (RuntimeException)
878 {
879     _arBool = aSeqBoolean;
880     _arChar = aSeqChar;
881     _arByte = aSeqByte;
882     _arShort = aSeqShort;
883     _arUShort = aSeqUShort;
884     _arLong = aSeqLong;
885     _arULong = aSeqULong;
886     _arHyper  = aSeqHyper;
887     _arUHyper = aSeqUHyper;
888     _arFloat = aSeqFloat;
889     _arDouble = aSeqDouble;
890     _arEnum = aSeqTestEnum;
891     _arString = aSeqString;
892     _arObject = aSeqXInterface;
893     _arAny = aSeqAny;
894     _arLong2 = aSeqDim2;
895     _arLong3 = aSeqDim3;
896 }
897 
setSequencesOut(Sequence<sal_Bool> & aSeqBoolean,Sequence<sal_Unicode> & aSeqChar,Sequence<sal_Int8> & aSeqByte,Sequence<sal_Int16> & aSeqShort,Sequence<sal_uInt16> & aSeqUShort,Sequence<sal_Int32> & aSeqLong,Sequence<sal_uInt32> & aSeqULong,Sequence<sal_Int64> & aSeqHyper,Sequence<sal_uInt64> & aSeqUHyper,Sequence<float> & aSeqFloat,Sequence<double> & aSeqDouble,Sequence<TestEnum> & aSeqEnum,Sequence<OUString> & aSeqString,Sequence<Reference<XInterface>> & aSeqXInterface,Sequence<Any> & aSeqAny,Sequence<Sequence<sal_Int32>> & aSeqDim2,Sequence<Sequence<Sequence<sal_Int32>>> & aSeqDim3)898 void SAL_CALL Test_Impl::setSequencesOut( Sequence< sal_Bool >& aSeqBoolean,
899                              Sequence< sal_Unicode >& aSeqChar,
900                              Sequence< sal_Int8 >& aSeqByte,
901                              Sequence< sal_Int16 >& aSeqShort,
902                              Sequence< sal_uInt16 >& aSeqUShort,
903                              Sequence< sal_Int32 >& aSeqLong,
904                              Sequence< sal_uInt32 >& aSeqULong,
905                              Sequence< sal_Int64 >& aSeqHyper,
906                              Sequence< sal_uInt64 >& aSeqUHyper,
907                              Sequence< float >& aSeqFloat,
908                              Sequence< double >& aSeqDouble,
909                              Sequence< TestEnum >& aSeqEnum,
910                              Sequence< OUString >& aSeqString,
911                              Sequence< Reference< XInterface > >& aSeqXInterface,
912                              Sequence< Any >& aSeqAny,
913                              Sequence< Sequence< sal_Int32 > >& aSeqDim2,
914                              Sequence< Sequence< Sequence< sal_Int32 > > >& aSeqDim3 )
915         throw (RuntimeException)
916 {
917     aSeqBoolean = _arBool;
918     aSeqChar = _arChar;
919     aSeqByte = _arByte;
920     aSeqShort = _arShort;
921     aSeqUShort = _arUShort;
922     aSeqLong = _arLong;
923     aSeqULong = _arULong;
924     aSeqHyper = _arHyper;
925     aSeqUHyper = _arUHyper;
926     aSeqFloat = _arFloat;
927     aSeqDouble = _arDouble;
928     aSeqEnum = _arEnum;
929     aSeqString = _arString;
930     aSeqXInterface = _arObject;
931     aSeqAny = _arAny;
932     aSeqDim2 = _arLong2;
933     aSeqDim3 = _arLong3;
934 }
935 
testConstructorsService(Reference<XComponentContext> const & context)936 void Test_Impl::testConstructorsService(
937     Reference< XComponentContext > const & context) throw (RuntimeException)
938 {
939     Sequence< sal_Bool > arg14(1); arg14[0] = true;
940     Sequence< sal_Int8 > arg15(1); arg15[0] = SAL_MIN_INT8;
941     Sequence< sal_Int16 > arg16(1); arg16[0] = SAL_MIN_INT16;
942     Sequence< sal_uInt16 > arg17(1); arg17[0] = SAL_MAX_UINT16;
943     Sequence< sal_Int32 > arg18(1); arg18[0] = SAL_MIN_INT32;
944     Sequence< sal_uInt32 > arg19(1); arg19[0] = SAL_MAX_UINT32;
945     Sequence< sal_Int64 > arg20(1); arg20[0] = SAL_MIN_INT64;
946     Sequence< sal_uInt64 > arg21(1); arg21[0] = SAL_MAX_UINT64;
947     Sequence< float > arg22(1); arg22[0] = 0.123f;
948     Sequence< double > arg23(1); arg23[0] = 0.456;
949     Sequence< sal_Unicode > arg24(1); arg24[0] = 'X';
950     Sequence< OUString > arg25(1);
951     arg25[0] = OUString(RTL_CONSTASCII_USTRINGPARAM("test"));
952     Sequence< Type > arg26(1); arg26[0] = UnoType< Any >::get();
953     Sequence< Any > arg27(1); arg27[0] <<= true;
954     Sequence< Sequence< sal_Bool > > arg28(1);
955     arg28[0] = Sequence< sal_Bool >(1); arg28[0][0] = true;
956     Sequence< Sequence< Any > > arg29(1); arg29[0] = Sequence< Any >(1);
957     arg29[0][0] <<= true;
958     Sequence< TestEnum > arg30(1); arg30[0] = TestEnum_TWO;
959     Sequence< TestStruct > arg31(1); arg31[0].member = 10;
960     Sequence< TestPolyStruct< sal_Bool > > arg32(1); arg32[0].member = true;
961     Sequence< TestPolyStruct< Any > > arg33(1); arg33[0].member <<= true;
962     Sequence< Reference< XInterface > > arg34(1);
963     Constructors::create1(context,
964         true,
965         SAL_MIN_INT8,
966         SAL_MIN_INT16,
967         SAL_MAX_UINT16,
968         SAL_MIN_INT32,
969         SAL_MAX_UINT32,
970         SAL_MIN_INT64,
971         SAL_MAX_UINT64,
972         0.123f,
973         0.456,
974         'X',
975         OUString(RTL_CONSTASCII_USTRINGPARAM("test")),
976         UnoType< Any >::get(),
977         makeAny(true),
978         arg14,
979         arg15,
980         arg16,
981         arg17,
982         arg18,
983         arg19,
984         arg20,
985         arg21,
986         arg22,
987         arg23,
988         arg24,
989         arg25,
990         arg26,
991         arg27,
992         arg28,
993         arg29,
994         arg30,
995         arg31,
996         arg32,
997         arg33,
998         arg34,
999         TestEnum_TWO,
1000         TestStruct(10),
1001         TestPolyStruct< sal_Bool >(true),
1002         TestPolyStruct< Any >(makeAny(true)),
1003         Reference< XInterface >(0));
1004     Sequence< Any > args(40);
1005     args[0] <<= true;
1006     args[1] <<= SAL_MIN_INT8;
1007     args[2] <<= SAL_MIN_INT16;
1008     args[3] <<= SAL_MAX_UINT16;
1009     args[4] <<= SAL_MIN_INT32;
1010     args[5] <<= SAL_MAX_UINT32;
1011     args[6] <<= SAL_MIN_INT64;
1012     args[7] <<= SAL_MAX_UINT64;
1013     args[8] <<= 0.123f;
1014     args[9] <<= 0.456;
1015     sal_Unicode arg10c = 'X';
1016     args[10].setValue(&arg10c, UnoType< UnoCharType >::get());
1017     args[11] <<= OUString(RTL_CONSTASCII_USTRINGPARAM("test"));
1018     args[12] <<= UnoType< Any >::get();
1019     args[13] <<= true;
1020     args[14] <<= arg14;
1021     args[15] <<= arg15;
1022     args[16] <<= arg16;
1023     args[17] <<= arg17;
1024     args[18] <<= arg18;
1025     args[19] <<= arg19;
1026     args[20] <<= arg20;
1027     args[21] <<= arg21;
1028     args[22] <<= arg22;
1029     args[23] <<= arg23;
1030     args[24].setValue(&arg24, UnoType< UnoSequenceType< UnoCharType > >::get());
1031     args[25] <<= arg25;
1032     args[26] <<= arg26;
1033     args[27] <<= arg27;
1034     args[28] <<= arg28;
1035     args[29] <<= arg29;
1036     args[30] <<= arg30;
1037     args[31] <<= arg31;
1038     args[32] <<= arg32;
1039     args[33] <<= arg33;
1040     args[34] <<= arg34;
1041     args[35] <<= TestEnum_TWO;
1042     args[36] <<= TestStruct(10);
1043     args[37] <<= TestPolyStruct< sal_Bool >(true);
1044     args[38] <<= TestPolyStruct< Any >(makeAny(true));
1045     args[39] <<= Reference< XInterface >(0);
1046     Constructors::create2(context, args);
1047 
1048     Sequence<Type> argSeq1(1); argSeq1[0] = cppu::UnoType<sal_Int32>::get();
1049     Sequence<Reference<XInterface> > argSeq2(1); argSeq2[0] = static_cast<XComponent*>(new Dummy());
1050     Sequence<Reference<XComponent> > argSeq2a(1); argSeq2a[0] = static_cast<XComponent*>(new Dummy());
1051 
1052     Sequence<TestPolyStruct2<sal_Unicode, Sequence<Any> > > argSeq3(1);
1053     argSeq3[0] = TestPolyStruct2<sal_Unicode, Sequence<Any> >('X', arg27);
1054     Sequence<TestPolyStruct2<TestPolyStruct<sal_Unicode>, Sequence<Any> > > argSeq4(1);
1055     argSeq4[0] = TestPolyStruct2<TestPolyStruct<sal_Unicode>, Sequence<Any> >(
1056         TestPolyStruct<sal_Unicode>('X'), arg27);
1057     Sequence<Sequence<sal_Int32> > argSeq5(1);
1058     argSeq5[0] = Sequence<sal_Int32>(1); argSeq5[0][0] = SAL_MIN_INT32;
1059     Sequence<TestPolyStruct<sal_Int32> > argSeq6(1);
1060     argSeq6[0] = TestPolyStruct<sal_Int32>(SAL_MIN_INT32);
1061     Sequence<TestPolyStruct<TestPolyStruct2<sal_Unicode, Any> > > argSeq7(1);
1062     argSeq7[0] = TestPolyStruct<TestPolyStruct2<sal_Unicode, Any> >(
1063         TestPolyStruct2<sal_Unicode, Any>('X', Any(true)));
1064     Sequence<TestPolyStruct<TestPolyStruct2<TestPolyStruct2<sal_Unicode, Any>,OUString> > > argSeq8(1);
1065     argSeq8[0] = TestPolyStruct<TestPolyStruct2<TestPolyStruct2<sal_Unicode, Any>,OUString> > (
1066         TestPolyStruct2<TestPolyStruct2<sal_Unicode, Any>,OUString>(
1067             TestPolyStruct2<sal_Unicode, Any>('X', Any(true)), OUString(RTL_CONSTASCII_USTRINGPARAM("test"))));
1068     Sequence<TestPolyStruct2<OUString, TestPolyStruct2<sal_Unicode, TestPolyStruct<Any> > > > argSeq9(1);
1069     argSeq9[0] = TestPolyStruct2<OUString, TestPolyStruct2<sal_Unicode, TestPolyStruct<Any> > >(
1070         OUString(RTL_CONSTASCII_USTRINGPARAM("test")), TestPolyStruct2<sal_Unicode, TestPolyStruct<Any> >(
1071                      'X', TestPolyStruct<Any>(Any(true))));
1072     Sequence<TestPolyStruct2<TestPolyStruct2<sal_Unicode, Any>, TestPolyStruct<sal_Unicode> > > argSeq10(1);
1073     argSeq10[0] = TestPolyStruct2<TestPolyStruct2<sal_Unicode, Any>, TestPolyStruct<sal_Unicode> >(
1074         TestPolyStruct2<sal_Unicode, Any>('X', Any(true)), TestPolyStruct<sal_Unicode>('X'));
1075     Sequence<Sequence<TestPolyStruct<sal_Unicode > > > argSeq11(1);
1076     argSeq11[0] = Sequence<TestPolyStruct<sal_Unicode > >(1);
1077     argSeq11[0][0] = TestPolyStruct<sal_Unicode>('X');
1078     Sequence<Sequence<TestPolyStruct<TestPolyStruct2<sal_Unicode,Any> > > > argSeq12(1);
1079     argSeq12[0] = Sequence<TestPolyStruct<TestPolyStruct2<sal_Unicode,Any> > >(1);
1080     argSeq12[0][0] = TestPolyStruct<TestPolyStruct2<sal_Unicode,Any> >(
1081         TestPolyStruct2<sal_Unicode,Any>('X', Any(true)));
1082     Sequence<Sequence<TestPolyStruct<TestPolyStruct2<TestPolyStruct2<sal_Unicode,Any>,OUString> > > > argSeq13(1);
1083     argSeq13[0] = Sequence<TestPolyStruct<TestPolyStruct2<TestPolyStruct2<sal_Unicode,Any>,OUString> > >(1);
1084     argSeq13[0][0] = TestPolyStruct<TestPolyStruct2<TestPolyStruct2<sal_Unicode,Any>,OUString> >(
1085         TestPolyStruct2<TestPolyStruct2<sal_Unicode,Any>,OUString>(
1086             TestPolyStruct2<sal_Unicode,Any>('X', Any(true)), OUString(RTL_CONSTASCII_USTRINGPARAM("test"))));
1087     Sequence<Sequence<TestPolyStruct2<OUString, TestPolyStruct2<sal_Unicode, TestPolyStruct<Any> > > > > argSeq14(1);
1088     argSeq14[0] = Sequence<TestPolyStruct2<OUString, TestPolyStruct2<sal_Unicode, TestPolyStruct<Any> > > >(1);
1089     argSeq14[0][0] = TestPolyStruct2<OUString, TestPolyStruct2<sal_Unicode, TestPolyStruct<Any> > >(
1090         OUString(RTL_CONSTASCII_USTRINGPARAM("test")), TestPolyStruct2<sal_Unicode, TestPolyStruct<Any> >(
1091             'X', TestPolyStruct<Any>(Any(true))));
1092     Sequence<Sequence<TestPolyStruct2<TestPolyStruct2<sal_Unicode,Any>, TestPolyStruct<sal_Unicode> > > > argSeq15(1);
1093     argSeq15[0] = Sequence<TestPolyStruct2<TestPolyStruct2<sal_Unicode,Any>, TestPolyStruct<sal_Unicode> > >(1);
1094     argSeq15[0][0] = TestPolyStruct2<TestPolyStruct2<sal_Unicode,Any>, TestPolyStruct<sal_Unicode> >(
1095         TestPolyStruct2<sal_Unicode,Any>('X',Any(true)), TestPolyStruct<sal_Unicode>('X'));
1096 
1097     Constructors2::create1(
1098         context,
1099         TestPolyStruct<Type>(cppu::UnoType<sal_Int32>::get()),
1100         TestPolyStruct<Any>(Any(true)),
1101         TestPolyStruct<sal_Bool>(true),
1102         TestPolyStruct<sal_Int8>(SAL_MIN_INT8),
1103         TestPolyStruct<sal_Int16>(SAL_MIN_INT16),
1104         TestPolyStruct<sal_Int32>(SAL_MIN_INT32),
1105         TestPolyStruct<sal_Int64>(SAL_MIN_INT64),
1106         TestPolyStruct<sal_Unicode>('X'),
1107         TestPolyStruct<OUString>(OUString(RTL_CONSTASCII_USTRINGPARAM("test"))),
1108         TestPolyStruct<float>(0.123f),
1109         TestPolyStruct<double>(0.456),
1110         TestPolyStruct<Reference<XInterface> >(static_cast<XBridgeTest2*>(this)),
1111         TestPolyStruct<Reference<XComponent> >(static_cast<XComponent*>(new Dummy())),
1112         TestPolyStruct<TestEnum>(TestEnum_TWO),
1113         TestPolyStruct<TestPolyStruct2<sal_Unicode, Any> >(
1114             TestPolyStruct2<sal_Unicode, Any>('X', Any(true))),
1115         TestPolyStruct<TestPolyStruct2<TestPolyStruct2<sal_Unicode, Any>,OUString> > (
1116             TestPolyStruct2<TestPolyStruct2<sal_Unicode, Any>,OUString>(
1117                 TestPolyStruct2<sal_Unicode, Any>('X', Any(true)), OUString(RTL_CONSTASCII_USTRINGPARAM("test")))),
1118         TestPolyStruct2<OUString, TestPolyStruct2<sal_Unicode,TestPolyStruct<Any> > >(
1119             OUString(RTL_CONSTASCII_USTRINGPARAM("test")),
1120             TestPolyStruct2<sal_Unicode, TestPolyStruct<Any> >('X', TestPolyStruct<Any>(Any(true)))),
1121         TestPolyStruct2<TestPolyStruct2<sal_Unicode, Any>, TestPolyStruct<sal_Unicode> >(
1122             TestPolyStruct2<sal_Unicode, Any>('X', Any(true)),
1123             TestPolyStruct<sal_Unicode>('X')),
1124         TestPolyStruct<Sequence<Type> >(argSeq1),
1125         TestPolyStruct<Sequence<Any> >(arg27),
1126         TestPolyStruct<Sequence<sal_Bool> >(arg14),
1127         TestPolyStruct<Sequence<sal_Int8> >(arg15),
1128         TestPolyStruct<Sequence<sal_Int16> >(arg16),
1129         TestPolyStruct<Sequence<sal_Int32> >(arg18),
1130         TestPolyStruct<Sequence<sal_Int64> >(arg20),
1131         TestPolyStruct<Sequence<sal_Unicode> >(arg24),
1132         TestPolyStruct<Sequence<OUString> >(arg25),
1133         TestPolyStruct<Sequence<float> >(arg22),
1134         TestPolyStruct<Sequence<double> >(arg23),
1135         TestPolyStruct<Sequence<Reference<XInterface> > >(argSeq2),
1136         TestPolyStruct<Sequence<Reference<XComponent> > >(argSeq2a),
1137         TestPolyStruct<Sequence<TestEnum> >(arg30),
1138         TestPolyStruct<Sequence<TestPolyStruct2<sal_Unicode, Sequence<Any> > > >(argSeq3),
1139         TestPolyStruct<Sequence<TestPolyStruct2<TestPolyStruct<sal_Unicode>, Sequence<Any> > > > (argSeq4),
1140         TestPolyStruct<Sequence<Sequence<sal_Int32> > >(argSeq5),
1141         argSeq6,
1142         argSeq7,
1143         argSeq8,
1144         argSeq9,
1145         argSeq10,
1146         argSeq11,
1147         argSeq12,
1148         argSeq13,
1149         argSeq14,
1150         argSeq15);
1151 }
1152 
getCurrentContextChecker()1153 Reference< XCurrentContextChecker > Test_Impl::getCurrentContextChecker()
1154     throw (RuntimeException)
1155 {
1156     return new testtools::bridgetest::CurrentContextChecker;
1157 }
1158 
1159 // XServiceInfo
1160 //__________________________________________________________________________________________________
getImplementationName()1161 OUString Test_Impl::getImplementationName()
1162     throw (RuntimeException)
1163 {
1164     return OUString( RTL_CONSTASCII_USTRINGPARAM(IMPLNAME) );
1165 }
1166 //__________________________________________________________________________________________________
supportsService(const OUString & rServiceName)1167 sal_Bool Test_Impl::supportsService( const OUString & rServiceName )
1168     throw (RuntimeException)
1169 {
1170     const Sequence< OUString > & rSNL = getSupportedServiceNames();
1171     const OUString * pArray = rSNL.getConstArray();
1172     for ( sal_Int32 nPos = rSNL.getLength(); nPos--; )
1173     {
1174         if (pArray[nPos] == rServiceName)
1175             return sal_True;
1176     }
1177     return sal_False;
1178 }
1179 //__________________________________________________________________________________________________
getSupportedServiceNames()1180 Sequence< OUString > Test_Impl::getSupportedServiceNames()
1181     throw (RuntimeException)
1182 {
1183     return bridge_object::getSupportedServiceNames();
1184 }
1185 
1186 // ...
1187 
1188 //==================================================================================================
Test_Impl_create(const Reference<XMultiServiceFactory> &)1189 static Reference< XInterface > SAL_CALL Test_Impl_create( const Reference< XMultiServiceFactory > & )
1190 {
1191     return Reference< XInterface >( (XBridgeTest *)new Test_Impl() );
1192 }
1193 
1194 }
1195 
1196 extern "C"
1197 {
1198 //==================================================================================================
component_getImplementationEnvironment(const sal_Char ** ppEnvTypeName,uno_Environment **)1199 void SAL_CALL component_getImplementationEnvironment(
1200     const sal_Char ** ppEnvTypeName, uno_Environment ** )
1201 {
1202     *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
1203 }
1204 //==================================================================================================
component_getFactory(const sal_Char * pImplName,void * pServiceManager,void *)1205 void * SAL_CALL component_getFactory(
1206     const sal_Char * pImplName, void * pServiceManager, void * )
1207 {
1208     void * pRet = 0;
1209 
1210     if (pServiceManager && rtl_str_compare( pImplName, IMPLNAME ) == 0)
1211     {
1212         Reference< XSingleServiceFactory > xFactory( createSingleFactory(
1213             reinterpret_cast< XMultiServiceFactory * >( pServiceManager ),
1214             OUString( RTL_CONSTASCII_USTRINGPARAM(IMPLNAME) ),
1215             bridge_object::Test_Impl_create,
1216             bridge_object::getSupportedServiceNames() ) );
1217 
1218         if (xFactory.is())
1219         {
1220             xFactory->acquire();
1221             pRet = xFactory.get();
1222         }
1223     }
1224 
1225     return pRet;
1226 }
1227 }
1228