Kaydet (Commit) a51ac4d2 authored tarafından Stephan Bergmann's avatar Stephan Bergmann

Add variadic PartialWeakComponentImplHelper, remove need for implbase_var.hxx

Change-Id: Iad3417822b2ab3afb75da09c311a0bf07af5e2e4
üst cbe60f97
...@@ -92,8 +92,7 @@ bool Plugin::isInUnoIncludeFile(SourceLocation spellingLocation) const { ...@@ -92,8 +92,7 @@ bool Plugin::isInUnoIncludeFile(SourceLocation spellingLocation) const {
|| name.startswith(SRCDIR "/include/systools/") || name.startswith(SRCDIR "/include/systools/")
|| name.startswith(SRCDIR "/include/typelib/") || name.startswith(SRCDIR "/include/typelib/")
|| name.startswith(SRCDIR "/include/uno/") || name.startswith(SRCDIR "/include/uno/")
|| name.startswith(WORKDIR "/") || name.startswith(WORKDIR "/"));
|| name == SRCDIR "/include/comphelper/implbase_var.hxx");
} }
namespace namespace
......
...@@ -55,13 +55,7 @@ ...@@ -55,13 +55,7 @@
#include <com/sun/star/util/XCloseable.hpp> #include <com/sun/star/util/XCloseable.hpp>
#include <com/sun/star/util/XModifiable.hpp> #include <com/sun/star/util/XModifiable.hpp>
#ifndef INCLUDED_COMPHELPER_IMPLBASE_VAR_HXX_17 #include <cppuhelper/compbase.hxx>
#define INCLUDED_COMPHELPER_IMPLBASE_VAR_HXX_17
#define COMPHELPER_IMPLBASE_INTERFACE_NUMBER 17
#include <comphelper/implbase_var.hxx>
#endif
#include <cppuhelper/compbase10.hxx>
#include <cppuhelper/implbase3.hxx> #include <cppuhelper/implbase3.hxx>
#include <rtl/ref.hxx> #include <rtl/ref.hxx>
...@@ -134,7 +128,7 @@ private: ...@@ -134,7 +128,7 @@ private:
}; };
// ODatabaseDocument // ODatabaseDocument
typedef ::comphelper::PartialWeakComponentImplHelper17 < ::com::sun::star::frame::XModel2 typedef cppu::PartialWeakComponentImplHelper< ::com::sun::star::frame::XModel2
, ::com::sun::star::util::XModifiable , ::com::sun::star::util::XModifiable
, ::com::sun::star::frame::XStorable , ::com::sun::star::frame::XStorable
, ::com::sun::star::document::XEventBroadcaster , ::com::sun::star::document::XEventBroadcaster
......
/* -*- 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/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
/** This header generates the following template classes with a variable number
of interfaces:
comphelper::PartialWeakComponentImplHelper<N> <typename Ifc1, ...,
typename Ifc<N> >
as already present in headers cppuhelper/implbase<1-12>.hxx and
cppuhelper/compbase<1-12>.hxx.
<N> denotes the number of interface types passed as template arguments.
Don't use this header for interface numbers up to 12;
always use the existing cppuhelper/(impl|comp)base<1-12>.hxx headers
for this purpose, which eases debugging.
Including this header requires a little discipline, because it has no
include guards. Please use the following external include guard rule
where <N> is the number of interface types:
#ifndef INCLUDED_COMPHELPER_IMPLBASE_VAR_HXX_<N>
#define INCLUDED_COMPHELPER_IMPLBASE_VAR_HXX_<N>
#define COMPHELPER_IMPLBASE_INTERFACE_NUMBER <N>
#include <comphelper/implbase_var.hxx>
#endif
Additionally you can
#define COMPHELPER_IMPLBASE_MAX_CTOR_ARGS <N>
to control the maximum number of templated ctor arguments for the
ImplInheritanceHelper<N> classes.
The default is a maximum of 6 arguments.
*/
#ifndef COMPHELPER_IMPLBASE_INTERFACE_NUMBER
#error "you have to define COMPHELPER_IMPLBASE_INTERFACE_NUMBER prior to including comphelper/implbase_var.hxx!"
#endif // ! defined(COMPHELPER_IMPLBASE_INTERFACE_NUMBER)
#if !defined(COMPHELPER_IMPLBASE_TEST_PHASE) && COMPHELPER_IMPLBASE_INTERFACE_NUMBER <= 12
#error "include proper header file: cppuhelper/implbase<N>.hxx or cppuhelper/compbase<N>.hxx!"
#endif
#ifndef COMPHELPER_IMPLBASE_MAX_CTOR_ARGS
#define COMPHELPER_IMPLBASE_MAX_CTOR_ARGS 6 // default
#endif
#include <cppuhelper/implbase_ex.hxx>
#include <rtl/instance.hxx>
#include <cppuhelper/compbase_ex.hxx>
#include <boost/preprocessor/cat.hpp>
#include <boost/preprocessor/repetition.hpp>
#include <boost/preprocessor/arithmetic/add.hpp>
namespace comphelper {
// Suppress warnings about hidden functions in case any of the IfcN has
// functions named dispose, addEventListener, or removeEventListener:
namespace detail {
struct BOOST_PP_CAT(class_data, COMPHELPER_IMPLBASE_INTERFACE_NUMBER)
{
sal_Int16 m_nTypes;
sal_Bool m_storedTypeRefs;
sal_Bool m_storedId;
sal_Int8 m_id[16];
::cppu::type_entry m_typeEntries[COMPHELPER_IMPLBASE_INTERFACE_NUMBER + 1];
};
/// @internal
template < BOOST_PP_ENUM_PARAMS(COMPHELPER_IMPLBASE_INTERFACE_NUMBER,
typename Ifc), typename Impl >
struct BOOST_PP_CAT(ImplClassData, COMPHELPER_IMPLBASE_INTERFACE_NUMBER)
{
::cppu::class_data * operator()() {
static BOOST_PP_CAT(class_data, COMPHELPER_IMPLBASE_INTERFACE_NUMBER)
s_cd = {
COMPHELPER_IMPLBASE_INTERFACE_NUMBER + 1, sal_False, sal_False,
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{
#define COMPHELPER_IMPLBASE_classdataList(z_, n_, unused_) \
{ { BOOST_PP_CAT(Ifc, n_)::static_type }, \
reinterpret_cast<sal_IntPtr>( static_cast< BOOST_PP_CAT(Ifc, n_) * >( \
reinterpret_cast<Impl *>(16) ) ) - 16 },
BOOST_PP_REPEAT(COMPHELPER_IMPLBASE_INTERFACE_NUMBER,
COMPHELPER_IMPLBASE_classdataList, ~)
#undef COMPHELPER_IMPLBASE_classdataList
{ { ::com::sun::star::lang::XTypeProvider::static_type },
reinterpret_cast<sal_IntPtr>(
static_cast< ::com::sun::star::lang::XTypeProvider * >(
reinterpret_cast<Impl *>(16) ) ) - 16 }
}
};
return reinterpret_cast< ::cppu::class_data * >(&s_cd);
}
};
} // namespace detail
template < BOOST_PP_ENUM_PARAMS(COMPHELPER_IMPLBASE_INTERFACE_NUMBER,
typename Ifc) >
class SAL_NO_VTABLE BOOST_PP_CAT(PartialWeakComponentImplHelper,
COMPHELPER_IMPLBASE_INTERFACE_NUMBER)
: public ::cppu::WeakComponentImplHelperBase,
public ::com::sun::star::lang::XTypeProvider,
BOOST_PP_ENUM_PARAMS(COMPHELPER_IMPLBASE_INTERFACE_NUMBER, public Ifc)
{
/// @internal
struct cd : public ::rtl::StaticAggregate<
::cppu::class_data,
BOOST_PP_CAT(detail::ImplClassData,
COMPHELPER_IMPLBASE_INTERFACE_NUMBER)
<
BOOST_PP_ENUM_PARAMS(COMPHELPER_IMPLBASE_INTERFACE_NUMBER, Ifc),
BOOST_PP_CAT(PartialWeakComponentImplHelper,
COMPHELPER_IMPLBASE_INTERFACE_NUMBER)<
BOOST_PP_ENUM_PARAMS(COMPHELPER_IMPLBASE_INTERFACE_NUMBER, Ifc)>
> > {};
public:
BOOST_PP_CAT(PartialWeakComponentImplHelper, COMPHELPER_IMPLBASE_INTERFACE_NUMBER)(
::osl::Mutex & rMutex ) : WeakComponentImplHelperBase(rMutex) {}
virtual ::com::sun::star::uno::Any
SAL_CALL queryInterface( ::com::sun::star::uno::Type const& rType )
throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE
{
return ::cppu::WeakComponentImplHelper_query(
rType, cd::get(), this,
static_cast< ::cppu::WeakComponentImplHelperBase * >(this) );
}
virtual void SAL_CALL acquire() throw () SAL_OVERRIDE
{ WeakComponentImplHelperBase::acquire(); }
virtual void SAL_CALL release() throw () SAL_OVERRIDE
{ WeakComponentImplHelperBase::release(); }
virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type >
SAL_CALL getTypes() throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE
{ return ::cppu::WeakComponentImplHelper_getTypes( cd::get() ); }
virtual ::com::sun::star::uno::Sequence<sal_Int8>
SAL_CALL getImplementationId()
throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE
{ return ::cppu::ImplHelper_getImplementationId( cd::get() ); }
};
} // namespace comphelper
// undef for multiple use/inclusion of this header:
#undef COMPHELPER_IMPLBASE_MAX_CTOR_ARGS
#undef COMPHELPER_IMPLBASE_INTERFACE_NUMBER
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
...@@ -48,6 +48,11 @@ namespace cppu { ...@@ -48,6 +48,11 @@ namespace cppu {
com::sun::star::uno::XInterface, com::sun::star::lang::XTypeProvider, and com::sun::star::uno::XInterface, com::sun::star::lang::XTypeProvider, and
com::sun::star::lang::XComponent. com::sun::star::lang::XComponent.
Like WeakComponentImplHelper, but does not define
XComponent::add/removeEventListener. Use for classes deriving from multiple
UNO interfaces with competing add/removeEventListener methods, to avoid
warnings about hiding of overloaded virtual functions.
Upon disposing objects of this class, sub-classes receive a disposing() Upon disposing objects of this class, sub-classes receive a disposing()
call. call.
...@@ -56,17 +61,18 @@ namespace cppu { ...@@ -56,17 +61,18 @@ namespace cppu {
instance. instance.
*/ */
template<typename... Ifc> template<typename... Ifc>
class SAL_NO_VTABLE SAL_DLLPUBLIC_TEMPLATE WeakComponentImplHelper: class SAL_NO_VTABLE SAL_DLLPUBLIC_TEMPLATE PartialWeakComponentImplHelper:
public WeakComponentImplHelperBase, public css::lang::XTypeProvider, public WeakComponentImplHelperBase, public css::lang::XTypeProvider,
public Ifc... public Ifc...
{ {
struct cd: struct cd:
rtl::StaticAggregate< rtl::StaticAggregate<
class_data, detail::ImplClassData<WeakComponentImplHelper, Ifc...>> class_data,
detail::ImplClassData<PartialWeakComponentImplHelper, Ifc...>>
{}; {};
public: public:
WeakComponentImplHelper(osl::Mutex & mutex) throw (): PartialWeakComponentImplHelper(osl::Mutex & mutex) throw ():
WeakComponentImplHelperBase(mutex) {} WeakComponentImplHelperBase(mutex) {}
css::uno::Any SAL_CALL queryInterface(css::uno::Type const & aType) css::uno::Any SAL_CALL queryInterface(css::uno::Type const & aType)
...@@ -83,6 +89,34 @@ public: ...@@ -83,6 +89,34 @@ public:
SAL_OVERRIDE SAL_OVERRIDE
{ WeakComponentImplHelperBase::dispose(); } { WeakComponentImplHelperBase::dispose(); }
css::uno::Sequence<css::uno::Type> SAL_CALL getTypes()
throw (css::uno::RuntimeException, std::exception) SAL_OVERRIDE
{ return WeakComponentImplHelper_getTypes(cd::get()); }
css::uno::Sequence<sal_Int8> SAL_CALL getImplementationId()
throw (css::uno::RuntimeException, std::exception) SAL_OVERRIDE
{ return css::uno::Sequence<sal_Int8>(); }
};
/** Implementation helper implementing interfaces
com::sun::star::uno::XInterface, com::sun::star::lang::XTypeProvider, and
com::sun::star::lang::XComponent.
Upon disposing objects of this class, sub-classes receive a disposing()
call.
@attention
The mutex reference passed to the constructor has to outlive the constructed
instance.
*/
template<typename... Ifc>
class SAL_NO_VTABLE SAL_DLLPUBLIC_TEMPLATE WeakComponentImplHelper:
public PartialWeakComponentImplHelper<Ifc...>
{
public:
WeakComponentImplHelper(osl::Mutex & mutex) throw ():
PartialWeakComponentImplHelper<Ifc...>(mutex) {}
void SAL_CALL addEventListener( void SAL_CALL addEventListener(
css::uno::Reference<css::lang::XEventListener> const & xListener) css::uno::Reference<css::lang::XEventListener> const & xListener)
throw (css::uno::RuntimeException, std::exception) SAL_OVERRIDE throw (css::uno::RuntimeException, std::exception) SAL_OVERRIDE
...@@ -92,14 +126,6 @@ public: ...@@ -92,14 +126,6 @@ public:
css::uno::Reference<css::lang::XEventListener> const & aListener) css::uno::Reference<css::lang::XEventListener> const & aListener)
throw (css::uno::RuntimeException, std::exception) SAL_OVERRIDE throw (css::uno::RuntimeException, std::exception) SAL_OVERRIDE
{ WeakComponentImplHelperBase::removeEventListener(aListener); } { WeakComponentImplHelperBase::removeEventListener(aListener); }
css::uno::Sequence<css::uno::Type> SAL_CALL getTypes()
throw (css::uno::RuntimeException, std::exception) SAL_OVERRIDE
{ return WeakComponentImplHelper_getTypes(cd::get()); }
css::uno::Sequence<sal_Int8> SAL_CALL getImplementationId()
throw (css::uno::RuntimeException, std::exception) SAL_OVERRIDE
{ return css::uno::Sequence<sal_Int8>(); }
}; };
} }
......
...@@ -41,15 +41,10 @@ ...@@ -41,15 +41,10 @@
#include <comphelper/embeddedobjectcontainer.hxx> #include <comphelper/embeddedobjectcontainer.hxx>
#include <comphelper/uno3.hxx> #include <comphelper/uno3.hxx>
#include <cppuhelper/basemutex.hxx> #include <cppuhelper/basemutex.hxx>
#include <cppuhelper/compbase.hxx>
#include <cppuhelper/propertysetmixin.hxx> #include <cppuhelper/propertysetmixin.hxx>
#include <svx/unomod.hxx> #include <svx/unomod.hxx>
#ifndef INCLUDED_COMPHELPER_IMPLBASE_VAR_HXX_13
#define INCLUDED_COMPHELPER_IMPLBASE_VAR_HXX_13
#define COMPHELPER_IMPLBASE_INTERFACE_NUMBER 13
#include <comphelper/implbase_var.hxx>
#endif
#include <boost/shared_ptr.hpp> #include <boost/shared_ptr.hpp>
...@@ -64,7 +59,7 @@ namespace utl ...@@ -64,7 +59,7 @@ namespace utl
namespace reportdesign namespace reportdesign
{ {
class OReportComponentProperties; class OReportComponentProperties;
typedef ::comphelper::PartialWeakComponentImplHelper13 < ::com::sun::star::report::XReportDefinition typedef cppu::PartialWeakComponentImplHelper< ::com::sun::star::report::XReportDefinition
, ::com::sun::star::document::XEventBroadcaster , ::com::sun::star::document::XEventBroadcaster
, ::com::sun::star::lang::XServiceInfo , ::com::sun::star::lang::XServiceInfo
, ::com::sun::star::frame::XModule , ::com::sun::star::frame::XModule
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment