summaryrefslogtreecommitdiff
path: root/stoc/source/registry_tdprovider/tdcomp.cxx
diff options
context:
space:
mode:
authorDaniel Boelzle <dbo@openoffice.org>2001-05-16 07:02:28 +0000
committerDaniel Boelzle <dbo@openoffice.org>2001-05-16 07:02:28 +0000
commit8533e63f44258806655c1a96a3683d52aeb6c5d0 (patch)
treeb8d6bc7d582292aeaa8ac3ed40fec20a7dffcc6b /stoc/source/registry_tdprovider/tdcomp.cxx
parent382407b0b510a8edcc6bb35b42b2d9bdf0ba5ee0 (diff)
optimizations
Diffstat (limited to 'stoc/source/registry_tdprovider/tdcomp.cxx')
-rw-r--r--stoc/source/registry_tdprovider/tdcomp.cxx116
1 files changed, 66 insertions, 50 deletions
diff --git a/stoc/source/registry_tdprovider/tdcomp.cxx b/stoc/source/registry_tdprovider/tdcomp.cxx
index ad4317b64..4dd4270d4 100644
--- a/stoc/source/registry_tdprovider/tdcomp.cxx
+++ b/stoc/source/registry_tdprovider/tdcomp.cxx
@@ -2,9 +2,9 @@
*
* $RCSfile: tdcomp.cxx,v $
*
- * $Revision: 1.3 $
+ * $Revision: 1.4 $
*
- * last change: $Author: jl $ $Date: 2001-03-12 15:36:44 $
+ * last change: $Author: dbo $ $Date: 2001-05-16 08:02:28 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -92,20 +92,24 @@ Reference< XTypeDescription > CompoundTypeDescriptionImpl::getBaseType()
{
if (!_xBaseTD.is() && _aBaseType.getLength())
{
- MutexGuard aGuard( _aBaseTypeMutex );
- if (!_xBaseTD.is() && _aBaseType.getLength())
+ try
{
- try
- {
- if (_xTDMgr->getByHierarchicalName( _aBaseType ) >>= _xBaseTD)
- return _xBaseTD;
- }
- catch (NoSuchElementException &)
+ Reference< XTypeDescription > xBaseTD;
+ if (_xTDMgr->getByHierarchicalName( _aBaseType ) >>= xBaseTD)
{
+ MutexGuard aGuard( _aMutex );
+ if (! _xBaseTD.is())
+ {
+ _xBaseTD = xBaseTD;
+ }
+ return _xBaseTD;
}
- // never try again, if no base td was found
- _aBaseType = OUString();
}
+ catch (NoSuchElementException &)
+ {
+ }
+ // never try again, if no base td was found
+ _aBaseType = OUString();
}
return _xBaseTD;
}
@@ -115,35 +119,41 @@ Sequence< Reference< XTypeDescription > > CompoundTypeDescriptionImpl::getMember
{
if (! _pMembers)
{
- MutexGuard aGuard( _aMembersMutex );
- if (! _pMembers)
+ RegistryTypeReaderLoader aLoader;
+ RegistryTypeReader aReader(
+ aLoader, (const sal_uInt8 *)_aBytes.getConstArray(),
+ _aBytes.getLength(), sal_False );
+
+ sal_uInt16 nFields = (sal_uInt16)aReader.getFieldCount();
+ Sequence< Reference< XTypeDescription > > * pTempMembers =
+ new Sequence< Reference< XTypeDescription > >( nFields );
+ Reference< XTypeDescription > * pMembers = pTempMembers->getArray();
+
+ while (nFields--)
{
- RegistryTypeReaderLoader aLoader;
- RegistryTypeReader aReader( aLoader, (const sal_uInt8 *)_aBytes.getConstArray(),
- _aBytes.getLength(), sal_False );
-
- sal_uInt16 nFields = (sal_uInt16)aReader.getFieldCount();
- Sequence< Reference< XTypeDescription > > * pTempMembers =
- new Sequence< Reference< XTypeDescription > >( nFields );
- Reference< XTypeDescription > * pMembers = pTempMembers->getArray();
-
- while (nFields--)
+ try
{
- try
- {
- _xTDMgr->getByHierarchicalName(
- aReader.getFieldType( nFields ).replace( '/', '.' ) )
- >>= pMembers[nFields];
- }
- catch (NoSuchElementException &)
- {
- }
- OSL_ENSURE( pMembers[nFields].is(), "### compound member unknown!" );
+ _xTDMgr->getByHierarchicalName(
+ aReader.getFieldType( nFields ).replace( '/', '.' ) ) >>= pMembers[nFields];
}
-
+ catch (NoSuchElementException &)
+ {
+ }
+ OSL_ENSURE( pMembers[nFields].is(), "### compound member unknown!" );
+ }
+
+ ClearableMutexGuard aGuard( _aMutex );
+ if (_pMembers)
+ {
+ aGuard.clear();
+ delete pTempMembers;
+ }
+ else
+ {
_pMembers = pTempMembers;
}
}
+
return *_pMembers;
}
//__________________________________________________________________________________________________
@@ -152,22 +162,28 @@ Sequence< OUString > CompoundTypeDescriptionImpl::getMemberNames()
{
if (! _pMemberNames)
{
- MutexGuard aGuard( _aMemberNamesMutex );
- if (! _pMemberNames)
+ RegistryTypeReaderLoader aLoader;
+ RegistryTypeReader aReader(
+ aLoader, (const sal_uInt8 *)_aBytes.getConstArray(),
+ _aBytes.getLength(), sal_False );
+
+ sal_uInt16 nFields = (sal_uInt16)aReader.getFieldCount();
+ Sequence< OUString > * pTempMemberNames = new Sequence< OUString >( nFields );
+ OUString * pMemberNames = pTempMemberNames->getArray();
+
+ while (nFields--)
+ {
+ pMemberNames[nFields] = aReader.getFieldName( nFields );
+ }
+
+ ClearableMutexGuard aGuard( _aMutex );
+ if (_pMemberNames)
+ {
+ aGuard.clear();
+ delete pTempMemberNames;
+ }
+ else
{
- RegistryTypeReaderLoader aLoader;
- RegistryTypeReader aReader( aLoader, (const sal_uInt8 *)_aBytes.getConstArray(),
- _aBytes.getLength(), sal_False );
-
- sal_uInt16 nFields = (sal_uInt16)aReader.getFieldCount();
- Sequence< OUString > * pTempMemberNames = new Sequence< OUString >( nFields );
- OUString * pMemberNames = pTempMemberNames->getArray();
-
- while (nFields--)
- {
- pMemberNames[nFields] = aReader.getFieldName( nFields );
- }
-
_pMemberNames = pTempMemberNames;
}
}