summaryrefslogtreecommitdiff
path: root/stoc/source/registry_tdprovider/base.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'stoc/source/registry_tdprovider/base.hxx')
-rw-r--r--stoc/source/registry_tdprovider/base.hxx647
1 files changed, 647 insertions, 0 deletions
diff --git a/stoc/source/registry_tdprovider/base.hxx b/stoc/source/registry_tdprovider/base.hxx
new file mode 100644
index 000000000000..0e2deed76919
--- /dev/null
+++ b/stoc/source/registry_tdprovider/base.hxx
@@ -0,0 +1,647 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _STOC_RDBTDP_BASE_HXX
+#define _STOC_RDBTDP_BASE_HXX
+
+#include <osl/diagnose.h>
+#include <osl/mutex.hxx>
+#include <cppuhelper/weak.hxx>
+#include <cppuhelper/implbase1.hxx>
+#include <cppuhelper/implbase2.hxx>
+#ifndef _CPPUHELPER_IMPLEMENTATIONENTRY_HXX_
+#include <cppuhelper/implementationentry.hxx>
+#endif
+
+#include "registry/refltype.hxx"
+
+#include <list>
+#include <memory>
+#include <vector>
+
+#include <com/sun/star/reflection/XTypeDescription.hpp>
+#include <com/sun/star/reflection/XTypeDescriptionEnumerationAccess.hpp>
+#include <com/sun/star/reflection/XInterfaceTypeDescription.hpp>
+#include <com/sun/star/reflection/XInterfaceTypeDescription2.hpp>
+#include <com/sun/star/reflection/XCompoundTypeDescription.hpp>
+#include <com/sun/star/reflection/XConstantTypeDescription.hpp>
+#include <com/sun/star/reflection/XConstantsTypeDescription.hpp>
+#include <com/sun/star/reflection/XEnumTypeDescription.hpp>
+#include <com/sun/star/reflection/XIndirectTypeDescription.hpp>
+#include <com/sun/star/reflection/XServiceConstructorDescription.hpp>
+#include <com/sun/star/reflection/XServiceTypeDescription.hpp>
+#include <com/sun/star/reflection/XServiceTypeDescription2.hpp>
+#include <com/sun/star/reflection/XSingletonTypeDescription2.hpp>
+#include <com/sun/star/reflection/XModuleTypeDescription.hpp>
+#include <com/sun/star/reflection/XPublished.hpp>
+#include <com/sun/star/container/XHierarchicalNameAccess.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/registry/XRegistryKey.hpp>
+
+using namespace std;
+using namespace rtl;
+using namespace osl;
+using namespace cppu;
+using namespace com::sun::star::uno;
+using namespace com::sun::star::lang;
+using namespace com::sun::star::container;
+using namespace com::sun::star::reflection;
+
+//--------------------------------------------------------------------------------------------------
+
+extern rtl_StandardModuleCount g_moduleCount;
+
+namespace stoc_rdbtdp
+{
+
+com::sun::star::uno::Reference< XTypeDescription > resolveTypedefs(
+ com::sun::star::uno::Reference< XTypeDescription > const & type);
+
+
+::osl::Mutex & getMutex();
+
+//--------------------------------------------------------------------------------------------------
+
+typedef ::std::list< ::com::sun::star::uno::Reference<
+ ::com::sun::star::registry::XRegistryKey > > RegistryKeyList;
+
+//--------------------------------------------------------------------------------------------------
+
+class RegistryKeyCloser
+{
+public:
+ RegistryKeyCloser( const ::com::sun::star::uno::Reference<
+ ::com::sun::star::registry::XRegistryKey > & xKey )
+ : m_xKey( xKey ) {}
+ ~RegistryKeyCloser()
+ { if ( m_xKey.is() ) { try { if ( m_xKey->isValid() ) m_xKey->closeKey(); } catch (...) {} } }
+
+ void reset() { m_xKey.clear(); }
+private:
+ ::com::sun::star::uno::Reference<
+ ::com::sun::star::registry::XRegistryKey > m_xKey;
+};
+
+//--------------------------------------------------------------------------------------------------
+
+// helper to create XTypeDescription instances using typereg::Reader
+// (used from Type Provider and Type Description Enumeration implementation)
+::com::sun::star::uno::Reference<
+ ::com::sun::star::reflection::XTypeDescription >
+createTypeDescription(
+ const ::com::sun::star::uno::Sequence< sal_Int8 > & rData,
+ const ::com::sun::star::uno::Reference<
+ ::com::sun::star::container::XHierarchicalNameAccess > & xNameAccess,
+ bool bReturnEmptyRefForUnknownType );
+
+
+//--------------------------------------------------------------------------------------------------
+inline sal_Int32 getRTValueAsInt32( const RTConstValue & rVal )
+{
+ switch (rVal.m_type)
+ {
+ case RT_TYPE_BYTE:
+ return rVal.m_value.aByte;
+ case RT_TYPE_INT16:
+ return rVal.m_value.aShort;
+ case RT_TYPE_UINT16:
+ return rVal.m_value.aUShort;
+ case RT_TYPE_INT32:
+ return rVal.m_value.aLong;
+ case RT_TYPE_UINT32:
+ return rVal.m_value.aULong;
+ default:
+ OSL_ENSURE( sal_False, "### unexpected value type!" );
+ return 0;
+ }
+}
+//--------------------------------------------------------------------------------------------------
+inline Any getRTValue( const RTConstValue & rVal )
+{
+ switch (rVal.m_type)
+ {
+ case RT_TYPE_BOOL:
+ return Any( &rVal.m_value.aBool, ::getCppuBooleanType() );
+ case RT_TYPE_BYTE:
+ return Any( &rVal.m_value.aByte, ::getCppuType( (const sal_Int8 *)0 ) );
+ case RT_TYPE_INT16:
+ return Any( &rVal.m_value.aShort, ::getCppuType( (const sal_Int16 *)0 ) );
+ case RT_TYPE_UINT16:
+ return Any( &rVal.m_value.aUShort, ::getCppuType( (const sal_uInt16 *)0 ) );
+ case RT_TYPE_INT32:
+ return Any( &rVal.m_value.aLong, ::getCppuType( (const sal_Int32 *)0 ) );
+ case RT_TYPE_UINT32:
+ return Any( &rVal.m_value.aULong, ::getCppuType( (const sal_uInt32 *)0 ) );
+ case RT_TYPE_INT64:
+ return Any( &rVal.m_value.aHyper, ::getCppuType( (const sal_Int64 *)0 ) );
+ case RT_TYPE_UINT64:
+ return Any( &rVal.m_value.aUHyper, ::getCppuType( (const sal_uInt64 *)0 ) );
+ case RT_TYPE_FLOAT:
+ return Any( &rVal.m_value.aFloat, ::getCppuType( (const float *)0 ) );
+ case RT_TYPE_DOUBLE:
+ return Any( &rVal.m_value.aDouble, ::getCppuType( (const double *)0 ) );
+ case RT_TYPE_STRING:
+ {
+ OUString aStr( rVal.m_value.aString );
+ return Any( &aStr, ::getCppuType( (const OUString *)0 ) );
+ }
+ default:
+ OSL_ENSURE( sal_False, "### unexpected RTValue!" );
+ return Any();
+ }
+}
+
+//==================================================================================================
+class TypeDescriptionImpl : public WeakImplHelper1< XTypeDescription >
+{
+ TypeClass _eTypeClass;
+ OUString _aName;
+
+public:
+ TypeDescriptionImpl( TypeClass eTypeClass, const OUString & rName )
+ : _eTypeClass( eTypeClass )
+ , _aName( rName )
+ {
+ g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
+ }
+ virtual ~TypeDescriptionImpl();
+
+ // XTypeDescription
+ virtual TypeClass SAL_CALL getTypeClass() throw(::com::sun::star::uno::RuntimeException);
+ virtual OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException);
+};
+
+//==================================================================================================
+class InterfaceTypeDescriptionImpl:
+ public WeakImplHelper2< XInterfaceTypeDescription2, XPublished >
+{
+ com::sun::star::uno::Reference< XHierarchicalNameAccess > _xTDMgr;
+ Sequence< sal_Int8 > _aBytes;
+
+ OUString _aName;
+
+ Sequence< OUString > _aBaseTypes;
+ Sequence< com::sun::star::uno::Reference< XTypeDescription > > _xBaseTDs;
+ Sequence< OUString > _aOptionalBaseTypes;
+ Sequence< com::sun::star::uno::Reference< XTypeDescription > >
+ _xOptionalBaseTDs;
+
+ sal_Int32 _nBaseOffset;
+ Sequence<
+ com::sun::star::uno::Reference< XInterfaceMemberTypeDescription > >
+ _members;
+ bool _membersInit;
+
+ bool _published;
+
+ void checkInterfaceType(
+ com::sun::star::uno::Reference< XTypeDescription > const & type);
+
+public:
+ InterfaceTypeDescriptionImpl(
+ const com::sun::star::uno::Reference< XHierarchicalNameAccess > &
+ xTDMgr,
+ const OUString & rName, const Sequence< OUString > & rBaseTypes,
+ const Sequence< OUString > & rOptionalBaseTypes,
+ const Sequence< sal_Int8 > & rBytes, bool published );
+ virtual ~InterfaceTypeDescriptionImpl();
+
+ // XTypeDescription
+ virtual TypeClass SAL_CALL getTypeClass() throw(::com::sun::star::uno::RuntimeException);
+ virtual OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException);
+
+ // XInterfaceTypeDescription2
+ virtual Uik SAL_CALL getUik() throw(::com::sun::star::uno::RuntimeException);
+ virtual com::sun::star::uno::Reference< XTypeDescription > SAL_CALL
+ getBaseType() throw(::com::sun::star::uno::RuntimeException);
+ virtual
+ Sequence<
+ com::sun::star::uno::Reference< XInterfaceMemberTypeDescription > >
+ SAL_CALL getMembers() throw(::com::sun::star::uno::RuntimeException);
+
+ virtual Sequence< com::sun::star::uno::Reference< XTypeDescription > >
+ SAL_CALL getBaseTypes() throw (RuntimeException);
+
+ virtual Sequence< com::sun::star::uno::Reference< XTypeDescription > >
+ SAL_CALL getOptionalBaseTypes() throw (RuntimeException);
+
+ virtual sal_Bool SAL_CALL isPublished()
+ throw (::com::sun::star::uno::RuntimeException)
+ { return _published; }
+};
+
+//==================================================================================================
+class CompoundTypeDescriptionImpl:
+ public WeakImplHelper2< XCompoundTypeDescription, XPublished >
+{
+ com::sun::star::uno::Reference< XHierarchicalNameAccess > _xTDMgr;
+ TypeClass _eTypeClass;
+ Sequence< sal_Int8 > _aBytes;
+ OUString _aName;
+
+ OUString _aBaseType;
+ com::sun::star::uno::Reference< XTypeDescription > _xBaseTD;
+
+ Sequence< com::sun::star::uno::Reference< XTypeDescription > > * _pMembers;
+ Sequence< OUString > * _pMemberNames;
+
+ bool _published;
+
+public:
+ CompoundTypeDescriptionImpl(
+ const com::sun::star::uno::Reference< XHierarchicalNameAccess > &
+ xTDMgr,
+ TypeClass eTypeClass,
+ const OUString & rName, const OUString & rBaseName,
+ const Sequence< sal_Int8 > & rBytes,
+ bool published )
+ : _xTDMgr( xTDMgr )
+ , _eTypeClass( eTypeClass )
+ , _aBytes( rBytes )
+ , _aName( rName )
+ , _aBaseType( rBaseName )
+ , _pMembers( 0 )
+ , _pMemberNames( 0 )
+ , _published( published )
+ {
+ g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
+ }
+ virtual ~CompoundTypeDescriptionImpl();
+
+ // XTypeDescription
+ virtual TypeClass SAL_CALL getTypeClass() throw(::com::sun::star::uno::RuntimeException);
+ virtual OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException);
+
+ // XCompoundTypeDescription
+ virtual com::sun::star::uno::Reference< XTypeDescription > SAL_CALL
+ getBaseType() throw(::com::sun::star::uno::RuntimeException);
+ virtual Sequence< com::sun::star::uno::Reference< XTypeDescription > >
+ SAL_CALL getMemberTypes() throw(::com::sun::star::uno::RuntimeException);
+ virtual Sequence< OUString > SAL_CALL getMemberNames() throw(::com::sun::star::uno::RuntimeException);
+
+ virtual sal_Bool SAL_CALL isPublished()
+ throw (::com::sun::star::uno::RuntimeException)
+ { return _published; }
+};
+
+//==================================================================================================
+class EnumTypeDescriptionImpl:
+ public WeakImplHelper2< XEnumTypeDescription, XPublished >
+{
+ com::sun::star::uno::Reference< XHierarchicalNameAccess > _xTDMgr;
+ Sequence< sal_Int8 > _aBytes;
+
+ OUString _aName;
+ sal_Int32 _nDefaultValue;
+
+ Sequence< OUString > * _pEnumNames;
+ Sequence< sal_Int32 > * _pEnumValues;
+
+ bool _published;
+
+public:
+ EnumTypeDescriptionImpl(
+ const com::sun::star::uno::Reference< XHierarchicalNameAccess > &
+ xTDMgr,
+ const OUString & rName, sal_Int32 nDefaultValue,
+ const Sequence< sal_Int8 > & rBytes, bool published )
+ : _xTDMgr( xTDMgr )
+ , _aBytes( rBytes )
+ , _aName( rName )
+ , _nDefaultValue( nDefaultValue )
+ , _pEnumNames( 0 )
+ , _pEnumValues( 0 )
+ , _published( published )
+ {
+ g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
+ }
+ virtual ~EnumTypeDescriptionImpl();
+
+ // XTypeDescription
+ virtual TypeClass SAL_CALL getTypeClass() throw(::com::sun::star::uno::RuntimeException);
+ virtual OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException);
+
+ // XEnumTypeDescription
+ virtual sal_Int32 SAL_CALL getDefaultEnumValue() throw(::com::sun::star::uno::RuntimeException);
+ virtual Sequence< OUString > SAL_CALL getEnumNames() throw(::com::sun::star::uno::RuntimeException);
+ virtual Sequence< sal_Int32 > SAL_CALL getEnumValues() throw(::com::sun::star::uno::RuntimeException);
+
+ virtual sal_Bool SAL_CALL isPublished()
+ throw (::com::sun::star::uno::RuntimeException)
+ { return _published; }
+};
+
+//==================================================================================================
+class TypedefTypeDescriptionImpl:
+ public WeakImplHelper2< XIndirectTypeDescription, XPublished >
+{
+ com::sun::star::uno::Reference< XHierarchicalNameAccess > _xTDMgr;
+ OUString _aName;
+
+ OUString _aRefName;
+ com::sun::star::uno::Reference< XTypeDescription > _xRefTD;
+
+ bool _published;
+
+public:
+ TypedefTypeDescriptionImpl(
+ const com::sun::star::uno::Reference< XHierarchicalNameAccess > &
+ xTDMgr,
+ const OUString & rName, const OUString & rRefName, bool published )
+ : _xTDMgr( xTDMgr )
+ , _aName( rName )
+ , _aRefName( rRefName )
+ , _published( published )
+ {
+ g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
+ }
+ virtual ~TypedefTypeDescriptionImpl();
+
+ // XTypeDescription
+ virtual TypeClass SAL_CALL getTypeClass() throw(::com::sun::star::uno::RuntimeException);
+ virtual OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException);
+
+ // XIndirectTypeDescription
+ virtual com::sun::star::uno::Reference< XTypeDescription > SAL_CALL
+ getReferencedType() throw(::com::sun::star::uno::RuntimeException);
+
+ virtual sal_Bool SAL_CALL isPublished()
+ throw (::com::sun::star::uno::RuntimeException)
+ { return _published; }
+};
+
+//==================================================================================================
+class ServiceTypeDescriptionImpl:
+ public WeakImplHelper2< XServiceTypeDescription2, XPublished >
+{
+ OUString _aName;
+ Sequence< sal_Int8 > _aBytes;
+ com::sun::star::uno::Reference< XHierarchicalNameAccess > _xTDMgr;
+ bool _bInitReferences;
+
+ com::sun::star::uno::Reference< XTypeDescription > _xInterfaceTD;
+ std::auto_ptr<
+ Sequence<
+ com::sun::star::uno::Reference< XServiceConstructorDescription > > >
+ _pCtors;
+ Sequence< com::sun::star::uno::Reference< XServiceTypeDescription > >
+ _aMandatoryServices;
+ Sequence< com::sun::star::uno::Reference< XServiceTypeDescription > >
+ _aOptionalServices;
+ Sequence< com::sun::star::uno::Reference< XInterfaceTypeDescription > >
+ _aMandatoryInterfaces;
+ Sequence< com::sun::star::uno::Reference< XInterfaceTypeDescription > >
+ _aOptionalInterfaces;
+ std::auto_ptr<
+ Sequence< com::sun::star::uno::Reference< XPropertyTypeDescription > > >
+ _pProps;
+
+ bool _published;
+
+public:
+ ServiceTypeDescriptionImpl(
+ const com::sun::star::uno::Reference< XHierarchicalNameAccess > &
+ xTDMgr,
+ const OUString & rName, const Sequence< sal_Int8 > & rBytes,
+ bool published)
+ : _aName( rName ), _aBytes( rBytes ), _xTDMgr( xTDMgr ),
+ _bInitReferences( false ), _published( published )
+ {
+ g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
+ }
+ virtual ~ServiceTypeDescriptionImpl();
+
+ // XTypeDescription
+ virtual TypeClass SAL_CALL
+ getTypeClass()
+ throw(::com::sun::star::uno::RuntimeException);
+ virtual OUString SAL_CALL
+ getName()
+ throw(::com::sun::star::uno::RuntimeException);
+
+ // XServiceTypeDescription
+ virtual ::com::sun::star::uno::Sequence<
+ ::com::sun::star::uno::Reference<
+ ::com::sun::star::reflection::XServiceTypeDescription > > SAL_CALL
+ getMandatoryServices()
+ throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence<
+ ::com::sun::star::uno::Reference<
+ ::com::sun::star::reflection::XServiceTypeDescription > > SAL_CALL
+ getOptionalServices()
+ throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence<
+ ::com::sun::star::uno::Reference<
+ ::com::sun::star::reflection::XInterfaceTypeDescription > > SAL_CALL
+ getMandatoryInterfaces()
+ throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence<
+ ::com::sun::star::uno::Reference<
+ ::com::sun::star::reflection::XInterfaceTypeDescription > > SAL_CALL
+ getOptionalInterfaces()
+ throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence<
+ ::com::sun::star::uno::Reference<
+ ::com::sun::star::reflection::XPropertyTypeDescription > > SAL_CALL
+ getProperties()
+ throw (::com::sun::star::uno::RuntimeException);
+
+ // XServiceTypeDescription2
+ virtual sal_Bool SAL_CALL isSingleInterfaceBased()
+ throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Reference< XTypeDescription > SAL_CALL
+ getInterface() throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence<
+ ::com::sun::star::uno::Reference<
+ ::com::sun::star::reflection::XServiceConstructorDescription > >
+ SAL_CALL getConstructors()
+ throw (::com::sun::star::uno::RuntimeException);
+
+ virtual sal_Bool SAL_CALL isPublished()
+ throw (::com::sun::star::uno::RuntimeException)
+ { return _published; }
+
+private:
+ void getReferences()
+ throw (::com::sun::star::uno::RuntimeException);
+};
+
+//==================================================================================================
+class ModuleTypeDescriptionImpl : public WeakImplHelper1< XModuleTypeDescription >
+{
+ OUString _aName;
+ com::sun::star::uno::Reference< XTypeDescriptionEnumerationAccess > _xTDMgr;
+
+ Sequence< com::sun::star::uno::Reference< XTypeDescription > > * _pMembers;
+
+public:
+ ModuleTypeDescriptionImpl(
+ const com::sun::star::uno::Reference<
+ XTypeDescriptionEnumerationAccess > & xTDMgr,
+ const OUString & rName )
+ : _aName( rName ), _xTDMgr( xTDMgr ), _pMembers( 0 )
+ {
+ g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
+ }
+ virtual ~ModuleTypeDescriptionImpl();
+
+ // XTypeDescription
+ virtual TypeClass SAL_CALL
+ getTypeClass()
+ throw( ::com::sun::star::uno::RuntimeException );
+ virtual OUString SAL_CALL
+ getName()
+ throw( ::com::sun::star::uno::RuntimeException );
+
+ // XModuleTypeDescription
+ virtual ::com::sun::star::uno::Sequence<
+ ::com::sun::star::uno::Reference<
+ ::com::sun::star::reflection::XTypeDescription > > SAL_CALL
+ getMembers()
+ throw ( ::com::sun::star::uno::RuntimeException );
+};
+
+//==================================================================================================
+class ConstantTypeDescriptionImpl : public WeakImplHelper1< XConstantTypeDescription >
+{
+ OUString _aName;
+ Any _aValue;
+
+public:
+ ConstantTypeDescriptionImpl( const OUString & rName,
+ const Any & rValue )
+ : _aName( rName ), _aValue( rValue )
+ {
+ g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
+ }
+ virtual ~ConstantTypeDescriptionImpl();
+
+ // XTypeDescription
+ virtual TypeClass SAL_CALL
+ getTypeClass()
+ throw( ::com::sun::star::uno::RuntimeException );
+ virtual OUString SAL_CALL
+ getName()
+ throw( ::com::sun::star::uno::RuntimeException );
+
+ // XConstantTypeDescription
+ virtual ::com::sun::star::uno::Any SAL_CALL
+ getConstantValue()
+ throw ( ::com::sun::star::uno::RuntimeException );
+};
+
+//==================================================================================================
+class ConstantsTypeDescriptionImpl:
+ public WeakImplHelper2< XConstantsTypeDescription, XPublished >
+{
+ OUString _aName;
+ Sequence< sal_Int8 > _aBytes;
+ Sequence< com::sun::star::uno::Reference< XConstantTypeDescription > > *
+ _pMembers;
+
+ bool _published;
+
+public:
+ ConstantsTypeDescriptionImpl( const OUString & rName,
+ const Sequence< sal_Int8 > & rBytes,
+ bool published )
+ : _aName( rName ), _aBytes( rBytes), _pMembers( 0 ), _published( published )
+ {
+ g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
+ }
+ virtual ~ConstantsTypeDescriptionImpl();
+
+ // XTypeDescription
+ virtual TypeClass SAL_CALL
+ getTypeClass()
+ throw( ::com::sun::star::uno::RuntimeException );
+ virtual OUString SAL_CALL
+ getName()
+ throw( ::com::sun::star::uno::RuntimeException );
+
+ // XConstantsTypeDescription
+ virtual
+ Sequence< com::sun::star::uno::Reference< XConstantTypeDescription > >
+ SAL_CALL getConstants() throw ( RuntimeException );
+
+ virtual sal_Bool SAL_CALL isPublished()
+ throw (::com::sun::star::uno::RuntimeException)
+ { return _published; }
+};
+
+//==================================================================================================
+class SingletonTypeDescriptionImpl:
+ public WeakImplHelper2< XSingletonTypeDescription2, XPublished >
+{
+ OUString _aName;
+ OUString _aBaseName;
+ com::sun::star::uno::Reference< XHierarchicalNameAccess > _xTDMgr;
+ com::sun::star::uno::Reference< XTypeDescription > _xInterfaceTD;
+ com::sun::star::uno::Reference< XServiceTypeDescription > _xServiceTD;
+
+ bool _published;
+
+ void init();
+
+public:
+ SingletonTypeDescriptionImpl(
+ const com::sun::star::uno::Reference< XHierarchicalNameAccess > &
+ xTDMgr,
+ const OUString & rName, const OUString & rBaseName, bool published )
+ : _aName( rName ), _aBaseName( rBaseName), _xTDMgr( xTDMgr ),
+ _published( published )
+ {
+ g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
+ }
+ virtual ~SingletonTypeDescriptionImpl();
+
+ // XTypeDescription
+ virtual TypeClass SAL_CALL
+ getTypeClass()
+ throw( ::com::sun::star::uno::RuntimeException );
+ virtual OUString SAL_CALL
+ getName()
+ throw( ::com::sun::star::uno::RuntimeException );
+
+ // XSingletonTypeDescription
+ virtual com::sun::star::uno::Reference< XServiceTypeDescription > SAL_CALL
+ getService() throw ( ::com::sun::star::uno::RuntimeException );
+
+ // XSingletonTypeDescription2
+ virtual sal_Bool SAL_CALL isInterfaceBased()
+ throw (::com::sun::star::uno::RuntimeException);
+ virtual com::sun::star::uno::Reference< XTypeDescription > SAL_CALL
+ getInterface() throw (::com::sun::star::uno::RuntimeException);
+
+ virtual sal_Bool SAL_CALL isPublished()
+ throw (::com::sun::star::uno::RuntimeException)
+ { return _published; }
+};
+
+}
+
+#endif /* _STOC_RDBTDP_BASE_HXX */