diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2012-09-14 19:27:00 +0200 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2012-09-14 19:32:30 +0200 |
commit | 2171077c0c3c43a61546ab2c0ae68ba63c5112f7 (patch) | |
tree | 09461b7faec131f25b223b4bcbb2bf5b2a701763 /cppuhelper | |
parent | 3ed834ae87eca0f6c486666699112a95edb74abb (diff) |
Introduce cppu::supportsService helper, adapt some call-sites
...more to follow (easy hack?)
Change-Id: Icb02626495701a3905c124c7368b98c3258e91b2
Diffstat (limited to 'cppuhelper')
-rw-r--r-- | cppuhelper/Library_cppuhelper.mk | 1 | ||||
-rw-r--r-- | cppuhelper/Package_inc.mk | 1 | ||||
-rw-r--r-- | cppuhelper/inc/cppuhelper/supportsservice.hxx | 49 | ||||
-rw-r--r-- | cppuhelper/source/defaultbootstrap.cxx | 17 | ||||
-rw-r--r-- | cppuhelper/source/factory.cxx | 13 | ||||
-rw-r--r-- | cppuhelper/source/gcc3.map | 5 | ||||
-rw-r--r-- | cppuhelper/source/macro_expander.cxx | 10 | ||||
-rw-r--r-- | cppuhelper/source/supportsservice.cxx | 40 | ||||
-rw-r--r-- | cppuhelper/test/cfg_test.cxx | 10 | ||||
-rw-r--r-- | cppuhelper/test/testcmp/TestComponent.cxx | 11 |
10 files changed, 108 insertions, 49 deletions
diff --git a/cppuhelper/Library_cppuhelper.mk b/cppuhelper/Library_cppuhelper.mk index aa8c3fd95708..964135bb9db0 100644 --- a/cppuhelper/Library_cppuhelper.mk +++ b/cppuhelper/Library_cppuhelper.mk @@ -74,6 +74,7 @@ $(eval $(call gb_Library_add_exception_objects,cppuhelper,\ cppuhelper/source/servicefactory \ cppuhelper/source/shlib \ cppuhelper/source/stdidlclass \ + cppuhelper/source/supportsservice \ cppuhelper/source/tdmgr \ cppuhelper/source/typeprovider \ cppuhelper/source/unourl \ diff --git a/cppuhelper/Package_inc.mk b/cppuhelper/Package_inc.mk index 60f93642f42b..d164f3833e0f 100644 --- a/cppuhelper/Package_inc.mk +++ b/cppuhelper/Package_inc.mk @@ -77,6 +77,7 @@ $(eval $(call gb_Package_add_file,cppuhelper_inc,inc/cppuhelper/queryinterface.h $(eval $(call gb_Package_add_file,cppuhelper_inc,inc/cppuhelper/servicefactory.hxx,cppuhelper/servicefactory.hxx)) $(eval $(call gb_Package_add_file,cppuhelper_inc,inc/cppuhelper/shlib.hxx,cppuhelper/shlib.hxx)) $(eval $(call gb_Package_add_file,cppuhelper_inc,inc/cppuhelper/stdidlclass.hxx,cppuhelper/stdidlclass.hxx)) +$(eval $(call gb_Package_add_file,cppuhelper_inc,inc/cppuhelper/supportsservice.hxx,cppuhelper/supportsservice.hxx)) $(eval $(call gb_Package_add_file,cppuhelper_inc,inc/cppuhelper/typeprovider.hxx,cppuhelper/typeprovider.hxx)) $(eval $(call gb_Package_add_file,cppuhelper_inc,inc/cppuhelper/unourl.hxx,cppuhelper/unourl.hxx)) $(eval $(call gb_Package_add_file,cppuhelper_inc,inc/cppuhelper/weakagg.hxx,cppuhelper/weakagg.hxx)) diff --git a/cppuhelper/inc/cppuhelper/supportsservice.hxx b/cppuhelper/inc/cppuhelper/supportsservice.hxx new file mode 100644 index 000000000000..3506e374e338 --- /dev/null +++ b/cppuhelper/inc/cppuhelper/supportsservice.hxx @@ -0,0 +1,49 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef INCLUDED_CPPUHELPER_SUPPORTSSERVICE_HXX +#define INCLUDED_CPPUHELPER_SUPPORTSSERVICE_HXX + +#include "sal/config.h" + +#include "cppuhelper/cppuhelperdllapi.h" + +namespace com { namespace sun { namespace star { namespace lang { + class XServiceInfo; +} } } } +namespace rtl { class OUString; } + +namespace cppu { + +/** A helper for implementations of com.sun.star.lang.XServiceInfo. + + This function is supposed to be called from implementations of + com::sun::star::lang::XServiceInfo::supportsService (and therefore, for + easier coding takes the caller's this pointer by pointer rather than by + com::sun::star::uno::Reference). + + @param implementation points to the service implementation whose + getSupportedServices method is consulted; must be non-null + + @param name the service name to test + + @return true iff the sequence returned by the given implementation's + getSupportedServices method contains the given name + + @since LibreOffice 3.7 +*/ +bool CPPUHELPER_DLLPUBLIC supportsService( + com::sun::star::lang::XServiceInfo * implementation, + rtl::OUString const & name); + +} + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/cppuhelper/source/defaultbootstrap.cxx b/cppuhelper/source/defaultbootstrap.cxx index ba558c0b5909..ccf744769d4b 100644 --- a/cppuhelper/source/defaultbootstrap.cxx +++ b/cppuhelper/source/defaultbootstrap.cxx @@ -62,6 +62,7 @@ #include "cppuhelper/implbase1.hxx" #include "cppuhelper/implbase3.hxx" #include "cppuhelper/shlib.hxx" +#include "cppuhelper/supportsservice.hxx" #include "osl/file.hxx" #include "registry/registry.hxx" #include "rtl/bootstrap.hxx" @@ -920,13 +921,7 @@ rtl::OUString ServiceManager::getImplementationName() sal_Bool ServiceManager::supportsService(rtl::OUString const & ServiceName) throw (css::uno::RuntimeException) { - css::uno::Sequence< rtl::OUString > names(getSupportedServiceNames()); - for (sal_Int32 i = 0; i != names.getLength(); ++i) { - if (ServiceName == names[i]) { - return true; - } - } - return false; + return cppu::supportsService(this, ServiceName); } css::uno::Sequence< rtl::OUString > ServiceManager::getSupportedServiceNames() @@ -1936,13 +1931,7 @@ rtl::OUString FactoryWrapper::getImplementationName() sal_Bool FactoryWrapper::supportsService(rtl::OUString const & ServiceName) throw (css::uno::RuntimeException) { - css::uno::Sequence< rtl::OUString > names(getSupportedServiceNames()); - for (sal_Int32 i = 0; i != names.getLength(); ++i) { - if (ServiceName == names[i]) { - return true; - } - } - return false; + return cppu::supportsService(this, ServiceName); } css::uno::Sequence< rtl::OUString > FactoryWrapper::getSupportedServiceNames() diff --git a/cppuhelper/source/factory.cxx b/cppuhelper/source/factory.cxx index dc46aa8a09f5..6747892e3efc 100644 --- a/cppuhelper/source/factory.cxx +++ b/cppuhelper/source/factory.cxx @@ -34,6 +34,7 @@ #include <cppuhelper/factory.hxx> #include <cppuhelper/implbase3.hxx> #include <cppuhelper/shlib.hxx> +#include <cppuhelper/supportsservice.hxx> #include <cppuhelper/typeprovider.hxx> #include <rtl/instance.hxx> #include <rtl/unload.h> @@ -258,13 +259,7 @@ sal_Bool OSingleFactoryHelper::supportsService( const OUString& ServiceName ) throw(::com::sun::star::uno::RuntimeException) { - Sequence< OUString > seqServices = getSupportedServiceNames(); - const OUString * pServices = seqServices.getConstArray(); - for( sal_Int32 i = 0; i < seqServices.getLength(); i++ ) - if( pServices[i] == ServiceName ) - return sal_True; - - return sal_False; + return cppu::supportsService(this, ServiceName); } // XServiceInfo @@ -1012,9 +1007,7 @@ sal_Bool OFactoryProxyHelper::supportsService(const OUString& ServiceName) throw(::com::sun::star::uno::RuntimeException) { Reference<XServiceInfo > xInfo( xFactory, UNO_QUERY ); - if( xInfo.is() ) - return xInfo->supportsService( ServiceName ); - return sal_False; + return xInfo.is() && xInfo->supportsService( ServiceName ); } // XServiceInfo diff --git a/cppuhelper/source/gcc3.map b/cppuhelper/source/gcc3.map index 4c48f5626eb0..7840b2370f5f 100644 --- a/cppuhelper/source/gcc3.map +++ b/cppuhelper/source/gcc3.map @@ -408,6 +408,11 @@ global: _ZThn*_N4cppu19OPropertySetHelper232enableChangeListenerNotificationEh; } UDK_3.7; +UDK_3.9 { # LibO 3.7 +global: + _ZN4cppu15supportsServiceEPN3com3sun4star4lang12XServiceInfoERKN3rtl8OUStringE; # cppu::supportsService(com::sun::star::lang::XServiceInfo*, rtl::OUString const&) +} UDK_3.8; + # Unique libstdc++ symbols: GLIBCXX_3.4 { global: diff --git a/cppuhelper/source/macro_expander.cxx b/cppuhelper/source/macro_expander.cxx index 7a82dd0ce888..ab2124cda742 100644 --- a/cppuhelper/source/macro_expander.cxx +++ b/cppuhelper/source/macro_expander.cxx @@ -34,6 +34,7 @@ #include <cppuhelper/factory.hxx> #include <cppuhelper/compbase2.hxx> #include <cppuhelper/component_context.hxx> +#include <cppuhelper/supportsservice.hxx> #include <com/sun/star/lang/XServiceInfo.hpp> #include <com/sun/star/util/XMacroExpander.hpp> @@ -169,14 +170,7 @@ OUString Bootstrap_MacroExpander::getImplementationName() sal_Bool Bootstrap_MacroExpander::supportsService( OUString const & serviceName ) throw (RuntimeException) { - Sequence< OUString > const & service_names = s_get_service_names(); - OUString const * p = service_names.getConstArray(); - for ( sal_Int32 nPos = service_names.getLength(); nPos--; ) - { - if (p[ nPos ].equals( serviceName )) - return sal_True; - } - return sal_False; + return cppu::supportsService(this, serviceName); } //__________________________________________________________________________________________________ Sequence< OUString > Bootstrap_MacroExpander::getSupportedServiceNames() diff --git a/cppuhelper/source/supportsservice.cxx b/cppuhelper/source/supportsservice.cxx new file mode 100644 index 000000000000..9a3771384d28 --- /dev/null +++ b/cppuhelper/source/supportsservice.cxx @@ -0,0 +1,40 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include "sal/config.h" + +#include <cassert> + +#include "com/sun/star/lang/XServiceInfo.hpp" +#include "com/sun/star/uno/Sequence.hxx" +#include "cppuhelper/supportsservice.hxx" +#include "rtl/ustring.hxx" +#include "sal/types.h" + +namespace { + +namespace css = com::sun::star; + +} + +bool cppu::supportsService( + css::lang::XServiceInfo * implementation, rtl::OUString const & name) +{ + assert(implementation != 0); + css::uno::Sequence< rtl::OUString > s( + implementation->getSupportedServiceNames()); + for (sal_Int32 i = 0; i != s.getLength(); ++i) { + if (s[i] == name) { + return true; + } + } + return false; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/cppuhelper/test/cfg_test.cxx b/cppuhelper/test/cfg_test.cxx index ac976be57740..1f0830be9915 100644 --- a/cppuhelper/test/cfg_test.cxx +++ b/cppuhelper/test/cfg_test.cxx @@ -40,6 +40,7 @@ #include <cppuhelper/implementationentry.hxx> #include <cppuhelper/bootstrap.hxx> #include <cppuhelper/implbase2.hxx> +#include <cppuhelper/supportsservice.hxx> #include <com/sun/star/lang/XMultiComponentFactory.hpp> #include <com/sun/star/lang/XInitialization.hpp> @@ -154,14 +155,7 @@ Sequence< OUString > ServiceImpl0::getSupportedServiceNames() sal_Bool ServiceImpl0::supportsService( const OUString & rServiceName ) throw(::com::sun::star::uno::RuntimeException) { - const Sequence< OUString > & rSNL = getSupportedServiceNames(); - const OUString * pArray = rSNL.getConstArray(); - for ( sal_Int32 nPos = rSNL.getLength(); nPos--; ) - { - if (pArray[nPos] == rServiceName) - return sal_True; - } - return sal_False; + return cppu::supportsService(this, rServiceName); } //================================================================================================== diff --git a/cppuhelper/test/testcmp/TestComponent.cxx b/cppuhelper/test/testcmp/TestComponent.cxx index a5f74778d3cd..e23069ad047f 100644 --- a/cppuhelper/test/testcmp/TestComponent.cxx +++ b/cppuhelper/test/testcmp/TestComponent.cxx @@ -29,6 +29,7 @@ #include "cppuhelper/implbase1.hxx" #include "cppuhelper/implementationentry.hxx" +#include "cppuhelper/supportsservice.hxx" #include "com/sun/star/lang/XMultiComponentFactory.hpp" #include "com/sun/star/lang/XServiceInfo.hpp" @@ -146,15 +147,7 @@ uno::Any SAL_CALL TestComponent::queryInterface(uno::Type const & rType ) throw sal_Bool SAL_CALL TestComponent::supportsService(rtl::OUString const & ServiceName) throw (uno::RuntimeException) { - uno::Sequence<rtl::OUString> serviceNames = getSupportedServiceNames_Static(); - - for (sal_Int32 n = 0; n < serviceNames.getLength(); ++n) - { - if (serviceNames[n] == ServiceName) - return true; - } - - return false; + return cppu::supportsService(this, ServiceName); } uno::Sequence<rtl::OUString> SAL_CALL TestComponent::getSupportedServiceNames() |