1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski *
3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file
5*b1cdbd2cSJim Jagielski * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file
7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski *
11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski *
13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the
17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski * under the License.
19*b1cdbd2cSJim Jagielski *
20*b1cdbd2cSJim Jagielski *************************************************************/
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim Jagielski
23*b1cdbd2cSJim Jagielski
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_unotools.hxx"
26*b1cdbd2cSJim Jagielski
27*b1cdbd2cSJim Jagielski
28*b1cdbd2cSJim Jagielski #include "unotools/accessiblestatesethelper.hxx"
29*b1cdbd2cSJim Jagielski #include <rtl/uuid.h>
30*b1cdbd2cSJim Jagielski #include <tools/debug.hxx>
31*b1cdbd2cSJim Jagielski
32*b1cdbd2cSJim Jagielski #if 0
33*b1cdbd2cSJim Jagielski #include <bitset>
34*b1cdbd2cSJim Jagielski #endif
35*b1cdbd2cSJim Jagielski
36*b1cdbd2cSJim Jagielski // defines how many states the bitfield can contain
37*b1cdbd2cSJim Jagielski // it has the size of 64 because I use a uInt64
38*b1cdbd2cSJim Jagielski #define BITFIELDSIZE 64
39*b1cdbd2cSJim Jagielski
40*b1cdbd2cSJim Jagielski using namespace ::utl;
41*b1cdbd2cSJim Jagielski using namespace ::rtl;
42*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
43*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::accessibility;
44*b1cdbd2cSJim Jagielski
45*b1cdbd2cSJim Jagielski class AccessibleStateSetHelperImpl
46*b1cdbd2cSJim Jagielski {
47*b1cdbd2cSJim Jagielski public:
48*b1cdbd2cSJim Jagielski AccessibleStateSetHelperImpl();
49*b1cdbd2cSJim Jagielski AccessibleStateSetHelperImpl(const AccessibleStateSetHelperImpl& rImpl);
50*b1cdbd2cSJim Jagielski ~AccessibleStateSetHelperImpl();
51*b1cdbd2cSJim Jagielski
52*b1cdbd2cSJim Jagielski sal_Bool IsEmpty ()
53*b1cdbd2cSJim Jagielski throw (uno::RuntimeException);
54*b1cdbd2cSJim Jagielski sal_Bool Contains (sal_Int16 aState)
55*b1cdbd2cSJim Jagielski throw (uno::RuntimeException);
56*b1cdbd2cSJim Jagielski uno::Sequence<sal_Int16> GetStates()
57*b1cdbd2cSJim Jagielski throw (uno::RuntimeException);
58*b1cdbd2cSJim Jagielski void AddState(sal_Int16 aState)
59*b1cdbd2cSJim Jagielski throw (uno::RuntimeException);
60*b1cdbd2cSJim Jagielski void RemoveState(sal_Int16 aState)
61*b1cdbd2cSJim Jagielski throw (uno::RuntimeException);
62*b1cdbd2cSJim Jagielski sal_Bool Compare(const AccessibleStateSetHelperImpl* pComparativeValue,
63*b1cdbd2cSJim Jagielski AccessibleStateSetHelperImpl* pOldStates,
64*b1cdbd2cSJim Jagielski AccessibleStateSetHelperImpl* pNewStates)
65*b1cdbd2cSJim Jagielski throw (uno::RuntimeException);
66*b1cdbd2cSJim Jagielski
67*b1cdbd2cSJim Jagielski inline void AddStates( const sal_Int64 _nStates ) SAL_THROW( ( ) );
68*b1cdbd2cSJim Jagielski
69*b1cdbd2cSJim Jagielski private:
70*b1cdbd2cSJim Jagielski #if 0
71*b1cdbd2cSJim Jagielski ::std::bitset<BITFIELDSIZE> maStates; //Bitfield
72*b1cdbd2cSJim Jagielski #endif
73*b1cdbd2cSJim Jagielski sal_uInt64 maStates;
74*b1cdbd2cSJim Jagielski };
75*b1cdbd2cSJim Jagielski
AccessibleStateSetHelperImpl()76*b1cdbd2cSJim Jagielski AccessibleStateSetHelperImpl::AccessibleStateSetHelperImpl()
77*b1cdbd2cSJim Jagielski : maStates(0)
78*b1cdbd2cSJim Jagielski {
79*b1cdbd2cSJim Jagielski }
80*b1cdbd2cSJim Jagielski
AccessibleStateSetHelperImpl(const AccessibleStateSetHelperImpl & rImpl)81*b1cdbd2cSJim Jagielski AccessibleStateSetHelperImpl::AccessibleStateSetHelperImpl(const AccessibleStateSetHelperImpl& rImpl)
82*b1cdbd2cSJim Jagielski : maStates(rImpl.maStates)
83*b1cdbd2cSJim Jagielski {
84*b1cdbd2cSJim Jagielski }
85*b1cdbd2cSJim Jagielski
~AccessibleStateSetHelperImpl()86*b1cdbd2cSJim Jagielski AccessibleStateSetHelperImpl::~AccessibleStateSetHelperImpl()
87*b1cdbd2cSJim Jagielski {
88*b1cdbd2cSJim Jagielski }
89*b1cdbd2cSJim Jagielski
IsEmpty()90*b1cdbd2cSJim Jagielski inline sal_Bool AccessibleStateSetHelperImpl::IsEmpty ()
91*b1cdbd2cSJim Jagielski throw (uno::RuntimeException)
92*b1cdbd2cSJim Jagielski {
93*b1cdbd2cSJim Jagielski #if 0
94*b1cdbd2cSJim Jagielski return maStates.none();
95*b1cdbd2cSJim Jagielski #endif
96*b1cdbd2cSJim Jagielski return maStates == 0;
97*b1cdbd2cSJim Jagielski }
98*b1cdbd2cSJim Jagielski
Contains(sal_Int16 aState)99*b1cdbd2cSJim Jagielski inline sal_Bool AccessibleStateSetHelperImpl::Contains (sal_Int16 aState)
100*b1cdbd2cSJim Jagielski throw (uno::RuntimeException)
101*b1cdbd2cSJim Jagielski {
102*b1cdbd2cSJim Jagielski DBG_ASSERT(aState < BITFIELDSIZE, "the statesset is too small");
103*b1cdbd2cSJim Jagielski #if 0
104*b1cdbd2cSJim Jagielski return maStates.test(aState);
105*b1cdbd2cSJim Jagielski #endif
106*b1cdbd2cSJim Jagielski sal_uInt64 aTempBitSet(1);
107*b1cdbd2cSJim Jagielski aTempBitSet <<= aState;
108*b1cdbd2cSJim Jagielski return ((aTempBitSet & maStates) != 0);
109*b1cdbd2cSJim Jagielski }
110*b1cdbd2cSJim Jagielski
GetStates()111*b1cdbd2cSJim Jagielski inline uno::Sequence<sal_Int16> AccessibleStateSetHelperImpl::GetStates()
112*b1cdbd2cSJim Jagielski throw (uno::RuntimeException)
113*b1cdbd2cSJim Jagielski {
114*b1cdbd2cSJim Jagielski uno::Sequence<sal_Int16> aRet(BITFIELDSIZE);
115*b1cdbd2cSJim Jagielski sal_Int16* pSeq = aRet.getArray();
116*b1cdbd2cSJim Jagielski sal_Int16 nStateCount(0);
117*b1cdbd2cSJim Jagielski for (sal_Int16 i = 0; i < BITFIELDSIZE; ++i)
118*b1cdbd2cSJim Jagielski if (Contains(i))
119*b1cdbd2cSJim Jagielski {
120*b1cdbd2cSJim Jagielski *pSeq = i;
121*b1cdbd2cSJim Jagielski ++pSeq;
122*b1cdbd2cSJim Jagielski ++nStateCount;
123*b1cdbd2cSJim Jagielski }
124*b1cdbd2cSJim Jagielski aRet.realloc(nStateCount);
125*b1cdbd2cSJim Jagielski return aRet;
126*b1cdbd2cSJim Jagielski }
127*b1cdbd2cSJim Jagielski
AddStates(const sal_Int64 _nStates)128*b1cdbd2cSJim Jagielski inline void AccessibleStateSetHelperImpl::AddStates( const sal_Int64 _nStates ) SAL_THROW( ( ) )
129*b1cdbd2cSJim Jagielski {
130*b1cdbd2cSJim Jagielski maStates |= _nStates;
131*b1cdbd2cSJim Jagielski }
132*b1cdbd2cSJim Jagielski
AddState(sal_Int16 aState)133*b1cdbd2cSJim Jagielski inline void AccessibleStateSetHelperImpl::AddState(sal_Int16 aState)
134*b1cdbd2cSJim Jagielski throw (uno::RuntimeException)
135*b1cdbd2cSJim Jagielski {
136*b1cdbd2cSJim Jagielski DBG_ASSERT(aState < BITFIELDSIZE, "the statesset is too small");
137*b1cdbd2cSJim Jagielski #if 0
138*b1cdbd2cSJim Jagielski maStates.set(aState);
139*b1cdbd2cSJim Jagielski #endif
140*b1cdbd2cSJim Jagielski sal_uInt64 aTempBitSet(1);
141*b1cdbd2cSJim Jagielski aTempBitSet <<= aState;
142*b1cdbd2cSJim Jagielski maStates |= aTempBitSet;
143*b1cdbd2cSJim Jagielski }
144*b1cdbd2cSJim Jagielski
RemoveState(sal_Int16 aState)145*b1cdbd2cSJim Jagielski inline void AccessibleStateSetHelperImpl::RemoveState(sal_Int16 aState)
146*b1cdbd2cSJim Jagielski throw (uno::RuntimeException)
147*b1cdbd2cSJim Jagielski {
148*b1cdbd2cSJim Jagielski DBG_ASSERT(aState < BITFIELDSIZE, "the statesset is too small");
149*b1cdbd2cSJim Jagielski #if 0
150*b1cdbd2cSJim Jagielski maStates.set(aState, 0);
151*b1cdbd2cSJim Jagielski #endif
152*b1cdbd2cSJim Jagielski sal_uInt64 aTempBitSet(1);
153*b1cdbd2cSJim Jagielski aTempBitSet <<= aState;
154*b1cdbd2cSJim Jagielski aTempBitSet = ~aTempBitSet;
155*b1cdbd2cSJim Jagielski maStates &= aTempBitSet;
156*b1cdbd2cSJim Jagielski }
157*b1cdbd2cSJim Jagielski
Compare(const AccessibleStateSetHelperImpl * pComparativeValue,AccessibleStateSetHelperImpl * pOldStates,AccessibleStateSetHelperImpl * pNewStates)158*b1cdbd2cSJim Jagielski inline sal_Bool AccessibleStateSetHelperImpl::Compare(
159*b1cdbd2cSJim Jagielski const AccessibleStateSetHelperImpl* pComparativeValue,
160*b1cdbd2cSJim Jagielski AccessibleStateSetHelperImpl* pOldStates,
161*b1cdbd2cSJim Jagielski AccessibleStateSetHelperImpl* pNewStates)
162*b1cdbd2cSJim Jagielski throw (uno::RuntimeException)
163*b1cdbd2cSJim Jagielski {
164*b1cdbd2cSJim Jagielski sal_Bool bResult(sal_False);
165*b1cdbd2cSJim Jagielski if (pComparativeValue && pOldStates && pNewStates)
166*b1cdbd2cSJim Jagielski {
167*b1cdbd2cSJim Jagielski if (maStates == pComparativeValue->maStates)
168*b1cdbd2cSJim Jagielski bResult = sal_True;
169*b1cdbd2cSJim Jagielski else
170*b1cdbd2cSJim Jagielski {
171*b1cdbd2cSJim Jagielski #if 0
172*b1cdbd2cSJim Jagielski std::bitset<BITFIELDSIZE> aTempBitSet(maStates);
173*b1cdbd2cSJim Jagielski #endif
174*b1cdbd2cSJim Jagielski sal_uInt64 aTempBitSet(maStates);
175*b1cdbd2cSJim Jagielski aTempBitSet ^= pComparativeValue->maStates;
176*b1cdbd2cSJim Jagielski pOldStates->maStates = aTempBitSet;
177*b1cdbd2cSJim Jagielski pOldStates->maStates &= maStates;
178*b1cdbd2cSJim Jagielski pNewStates->maStates = aTempBitSet;
179*b1cdbd2cSJim Jagielski pNewStates->maStates &= pComparativeValue->maStates;
180*b1cdbd2cSJim Jagielski }
181*b1cdbd2cSJim Jagielski }
182*b1cdbd2cSJim Jagielski return bResult;
183*b1cdbd2cSJim Jagielski }
184*b1cdbd2cSJim Jagielski
185*b1cdbd2cSJim Jagielski
186*b1cdbd2cSJim Jagielski //===== internal ============================================================
187*b1cdbd2cSJim Jagielski
AccessibleStateSetHelper()188*b1cdbd2cSJim Jagielski AccessibleStateSetHelper::AccessibleStateSetHelper ()
189*b1cdbd2cSJim Jagielski : mpHelperImpl(NULL)
190*b1cdbd2cSJim Jagielski {
191*b1cdbd2cSJim Jagielski mpHelperImpl = new AccessibleStateSetHelperImpl();
192*b1cdbd2cSJim Jagielski }
193*b1cdbd2cSJim Jagielski
AccessibleStateSetHelper(const sal_Int64 _nInitialStates)194*b1cdbd2cSJim Jagielski AccessibleStateSetHelper::AccessibleStateSetHelper ( const sal_Int64 _nInitialStates )
195*b1cdbd2cSJim Jagielski : mpHelperImpl(NULL)
196*b1cdbd2cSJim Jagielski {
197*b1cdbd2cSJim Jagielski mpHelperImpl = new AccessibleStateSetHelperImpl();
198*b1cdbd2cSJim Jagielski mpHelperImpl->AddStates( _nInitialStates );
199*b1cdbd2cSJim Jagielski }
200*b1cdbd2cSJim Jagielski
AccessibleStateSetHelper(const AccessibleStateSetHelper & rHelper)201*b1cdbd2cSJim Jagielski AccessibleStateSetHelper::AccessibleStateSetHelper (const AccessibleStateSetHelper& rHelper)
202*b1cdbd2cSJim Jagielski : cppu::WeakImplHelper1<XAccessibleStateSet>()
203*b1cdbd2cSJim Jagielski , mpHelperImpl(NULL)
204*b1cdbd2cSJim Jagielski {
205*b1cdbd2cSJim Jagielski if (rHelper.mpHelperImpl)
206*b1cdbd2cSJim Jagielski mpHelperImpl = new AccessibleStateSetHelperImpl(*rHelper.mpHelperImpl);
207*b1cdbd2cSJim Jagielski else
208*b1cdbd2cSJim Jagielski mpHelperImpl = new AccessibleStateSetHelperImpl();
209*b1cdbd2cSJim Jagielski }
210*b1cdbd2cSJim Jagielski
~AccessibleStateSetHelper(void)211*b1cdbd2cSJim Jagielski AccessibleStateSetHelper::~AccessibleStateSetHelper(void)
212*b1cdbd2cSJim Jagielski {
213*b1cdbd2cSJim Jagielski delete mpHelperImpl;
214*b1cdbd2cSJim Jagielski }
215*b1cdbd2cSJim Jagielski
216*b1cdbd2cSJim Jagielski //===== XAccessibleStateSet ==============================================
217*b1cdbd2cSJim Jagielski
218*b1cdbd2cSJim Jagielski /** Checks whether the current state set is empty.
219*b1cdbd2cSJim Jagielski
220*b1cdbd2cSJim Jagielski @return
221*b1cdbd2cSJim Jagielski Returns <TRUE/> if there is no state in this state set and
222*b1cdbd2cSJim Jagielski <FALSE/> if there is at least one state set in it.
223*b1cdbd2cSJim Jagielski */
isEmpty()224*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL AccessibleStateSetHelper::isEmpty ()
225*b1cdbd2cSJim Jagielski throw (uno::RuntimeException)
226*b1cdbd2cSJim Jagielski {
227*b1cdbd2cSJim Jagielski ::vos::OGuard aGuard (maMutex);
228*b1cdbd2cSJim Jagielski return mpHelperImpl->IsEmpty();
229*b1cdbd2cSJim Jagielski }
230*b1cdbd2cSJim Jagielski
231*b1cdbd2cSJim Jagielski /** Checks if the given state is a member of the state set of this
232*b1cdbd2cSJim Jagielski object.
233*b1cdbd2cSJim Jagielski
234*b1cdbd2cSJim Jagielski @param aState
235*b1cdbd2cSJim Jagielski The state for which to check membership. This has to be one of
236*b1cdbd2cSJim Jagielski the constants of <type>AccessibleStateType</type>.
237*b1cdbd2cSJim Jagielski
238*b1cdbd2cSJim Jagielski @return
239*b1cdbd2cSJim Jagielski Returns <TRUE/> if the given state is a memeber of this object's
240*b1cdbd2cSJim Jagielski state set and <FALSE/> otherwise.
241*b1cdbd2cSJim Jagielski */
contains(sal_Int16 aState)242*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL AccessibleStateSetHelper::contains (sal_Int16 aState)
243*b1cdbd2cSJim Jagielski throw (uno::RuntimeException)
244*b1cdbd2cSJim Jagielski {
245*b1cdbd2cSJim Jagielski ::vos::OGuard aGuard (maMutex);
246*b1cdbd2cSJim Jagielski return mpHelperImpl->Contains(aState);
247*b1cdbd2cSJim Jagielski }
248*b1cdbd2cSJim Jagielski
249*b1cdbd2cSJim Jagielski /** Checks if all of the given states are in this object's state
250*b1cdbd2cSJim Jagielski set.
251*b1cdbd2cSJim Jagielski
252*b1cdbd2cSJim Jagielski @param aStateSet
253*b1cdbd2cSJim Jagielski This sequence of states is interpreted as set and every of its
254*b1cdbd2cSJim Jagielski members, duplicates are ignored, is checked for membership in
255*b1cdbd2cSJim Jagielski this object's state set. Each state has to be one of the
256*b1cdbd2cSJim Jagielski constants of <type>AccessibleStateType</type>.
257*b1cdbd2cSJim Jagielski
258*b1cdbd2cSJim Jagielski @return
259*b1cdbd2cSJim Jagielski Returns <TRUE/> if all states of the given state set are members
260*b1cdbd2cSJim Jagielski of this object's state set. <FALSE/> is returned if at least
261*b1cdbd2cSJim Jagielski one of the states in the given state is not a member of this
262*b1cdbd2cSJim Jagielski object's state set.
263*b1cdbd2cSJim Jagielski */
containsAll(const uno::Sequence<sal_Int16> & rStateSet)264*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL AccessibleStateSetHelper::containsAll
265*b1cdbd2cSJim Jagielski (const uno::Sequence<sal_Int16>& rStateSet)
266*b1cdbd2cSJim Jagielski throw (uno::RuntimeException)
267*b1cdbd2cSJim Jagielski {
268*b1cdbd2cSJim Jagielski ::vos::OGuard aGuard (maMutex);
269*b1cdbd2cSJim Jagielski sal_Int32 nCount(rStateSet.getLength());
270*b1cdbd2cSJim Jagielski const sal_Int16* pStates = rStateSet.getConstArray();
271*b1cdbd2cSJim Jagielski sal_Int32 i = 0;
272*b1cdbd2cSJim Jagielski sal_Bool bFound(sal_True);
273*b1cdbd2cSJim Jagielski while (i < nCount)
274*b1cdbd2cSJim Jagielski {
275*b1cdbd2cSJim Jagielski bFound = mpHelperImpl->Contains(pStates[i]);
276*b1cdbd2cSJim Jagielski i++;
277*b1cdbd2cSJim Jagielski }
278*b1cdbd2cSJim Jagielski return bFound;
279*b1cdbd2cSJim Jagielski }
280*b1cdbd2cSJim Jagielski
getStates()281*b1cdbd2cSJim Jagielski uno::Sequence<sal_Int16> SAL_CALL AccessibleStateSetHelper::getStates()
282*b1cdbd2cSJim Jagielski throw (uno::RuntimeException)
283*b1cdbd2cSJim Jagielski {
284*b1cdbd2cSJim Jagielski ::vos::OGuard aGuard(maMutex);
285*b1cdbd2cSJim Jagielski return mpHelperImpl->GetStates();
286*b1cdbd2cSJim Jagielski }
287*b1cdbd2cSJim Jagielski
AddState(sal_Int16 aState)288*b1cdbd2cSJim Jagielski void AccessibleStateSetHelper::AddState(sal_Int16 aState)
289*b1cdbd2cSJim Jagielski throw (uno::RuntimeException)
290*b1cdbd2cSJim Jagielski {
291*b1cdbd2cSJim Jagielski ::vos::OGuard aGuard (maMutex);
292*b1cdbd2cSJim Jagielski mpHelperImpl->AddState(aState);
293*b1cdbd2cSJim Jagielski }
294*b1cdbd2cSJim Jagielski
RemoveState(sal_Int16 aState)295*b1cdbd2cSJim Jagielski void AccessibleStateSetHelper::RemoveState(sal_Int16 aState)
296*b1cdbd2cSJim Jagielski throw (uno::RuntimeException)
297*b1cdbd2cSJim Jagielski {
298*b1cdbd2cSJim Jagielski ::vos::OGuard aGuard (maMutex);
299*b1cdbd2cSJim Jagielski mpHelperImpl->RemoveState(aState);
300*b1cdbd2cSJim Jagielski }
301*b1cdbd2cSJim Jagielski
Compare(const AccessibleStateSetHelper & rComparativeValue,AccessibleStateSetHelper & rOldStates,AccessibleStateSetHelper & rNewStates)302*b1cdbd2cSJim Jagielski sal_Bool AccessibleStateSetHelper::Compare(
303*b1cdbd2cSJim Jagielski const AccessibleStateSetHelper& rComparativeValue,
304*b1cdbd2cSJim Jagielski AccessibleStateSetHelper& rOldStates,
305*b1cdbd2cSJim Jagielski AccessibleStateSetHelper& rNewStates)
306*b1cdbd2cSJim Jagielski throw (uno::RuntimeException)
307*b1cdbd2cSJim Jagielski {
308*b1cdbd2cSJim Jagielski ::vos::OGuard aGuard (maMutex);
309*b1cdbd2cSJim Jagielski return mpHelperImpl->Compare(rComparativeValue.mpHelperImpl,
310*b1cdbd2cSJim Jagielski rOldStates.mpHelperImpl, rNewStates.mpHelperImpl);
311*b1cdbd2cSJim Jagielski }
312*b1cdbd2cSJim Jagielski
313*b1cdbd2cSJim Jagielski //===== XTypeProvider =======================================================
314*b1cdbd2cSJim Jagielski
315*b1cdbd2cSJim Jagielski uno::Sequence< ::com::sun::star::uno::Type>
getTypes(void)316*b1cdbd2cSJim Jagielski AccessibleStateSetHelper::getTypes (void)
317*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException)
318*b1cdbd2cSJim Jagielski {
319*b1cdbd2cSJim Jagielski const ::com::sun::star::uno::Type aTypeList[] = {
320*b1cdbd2cSJim Jagielski ::getCppuType((const uno::Reference<
321*b1cdbd2cSJim Jagielski XAccessibleStateSet>*)0),
322*b1cdbd2cSJim Jagielski ::getCppuType((const uno::Reference<
323*b1cdbd2cSJim Jagielski lang::XTypeProvider>*)0)
324*b1cdbd2cSJim Jagielski };
325*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type>
326*b1cdbd2cSJim Jagielski aTypeSequence (aTypeList, 2);
327*b1cdbd2cSJim Jagielski return aTypeSequence;
328*b1cdbd2cSJim Jagielski }
329*b1cdbd2cSJim Jagielski
330*b1cdbd2cSJim Jagielski uno::Sequence<sal_Int8> SAL_CALL
getImplementationId(void)331*b1cdbd2cSJim Jagielski AccessibleStateSetHelper::getImplementationId (void)
332*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException)
333*b1cdbd2cSJim Jagielski {
334*b1cdbd2cSJim Jagielski ::vos::OGuard aGuard (maMutex);
335*b1cdbd2cSJim Jagielski static uno::Sequence<sal_Int8> aId;
336*b1cdbd2cSJim Jagielski if (aId.getLength() == 0)
337*b1cdbd2cSJim Jagielski {
338*b1cdbd2cSJim Jagielski aId.realloc (16);
339*b1cdbd2cSJim Jagielski rtl_createUuid ((sal_uInt8 *)aId.getArray(), 0, sal_True);
340*b1cdbd2cSJim Jagielski }
341*b1cdbd2cSJim Jagielski return aId;
342*b1cdbd2cSJim Jagielski }
343