diff options
author | Kurt Zenker <kz@openoffice.org> | 2009-12-02 17:38:39 +0100 |
---|---|---|
committer | Kurt Zenker <kz@openoffice.org> | 2009-12-02 17:38:39 +0100 |
commit | df19494dfbf2dead24821126211d42115c505a2f (patch) | |
tree | b7224411ab1e6981acc96634582ed1d182b373b8 /comphelper | |
parent | 236080b4f41a6efe38a11255ade248da521576f7 (diff) | |
parent | 8fba7530a9ee5e96b21afa88e3eb177b41cba951 (diff) |
CWS-TOOLING: integrate CWS npower12
Diffstat (limited to 'comphelper')
-rw-r--r-- | comphelper/inc/comphelper/servicedecl.hxx | 60 |
1 files changed, 46 insertions, 14 deletions
diff --git a/comphelper/inc/comphelper/servicedecl.hxx b/comphelper/inc/comphelper/servicedecl.hxx index a11598bdca85..7b77d3ba29e7 100644 --- a/comphelper/inc/comphelper/servicedecl.hxx +++ b/comphelper/inc/comphelper/servicedecl.hxx @@ -169,21 +169,20 @@ template <bool> struct with_args; /// @internal namespace detail { - template <typename ImplT> -class ServiceImpl - : public ::cppu::ImplInheritanceHelper1<ImplT, css::lang::XServiceInfo>, +class OwnServiceImpl + : public ImplT, private ::boost::noncopyable { - typedef ::cppu::ImplInheritanceHelper1<ImplT,css::lang::XServiceInfo> BaseT; + typedef ImplT BaseT; public: - ServiceImpl( + OwnServiceImpl( ServiceDecl const& rServiceDecl, css::uno::Sequence<css::uno::Any> const& args, css::uno::Reference<css::uno::XComponentContext> const& xContext ) - : BaseT(args, xContext), m_rServiceDecl(rServiceDecl) {} - ServiceImpl( + :BaseT(args, xContext), m_rServiceDecl(rServiceDecl) {} + OwnServiceImpl( ServiceDecl const& rServiceDecl, css::uno::Reference<css::uno::XComponentContext> const& xContext ) : BaseT(xContext), m_rServiceDecl(rServiceDecl) {} @@ -206,6 +205,22 @@ private: ServiceDecl const& m_rServiceDecl; }; +template <typename ImplT> +class ServiceImpl : public OwnServiceImpl< ::cppu::ImplInheritanceHelper1<ImplT,css::lang::XServiceInfo> > +{ +typedef OwnServiceImpl< ::cppu::ImplInheritanceHelper1<ImplT,css::lang::XServiceInfo> > ServiceImpl_BASE; +public: + ServiceImpl( + ServiceDecl const& rServiceDecl, + css::uno::Sequence<css::uno::Any> const& args, + css::uno::Reference<css::uno::XComponentContext> const& xContext ) + : ServiceImpl_BASE(rServiceDecl, args, xContext) {} + ServiceImpl( + ServiceDecl const& rServiceDecl, + css::uno::Reference<css::uno::XComponentContext> const& xContext ) + : ServiceImpl_BASE(rServiceDecl, xContext) {} +}; + template <typename ServiceImplT> struct PostProcessDefault { css::uno::Reference<css::uno::XInterface> @@ -230,7 +245,7 @@ struct CreateFunc<ImplT, PostProcessFuncT, with_args<false> > { const& xContext ) const { return m_postProcessFunc( - new ServiceImpl<ImplT>( rServiceDecl, xContext ) ); + new ImplT( rServiceDecl, xContext ) ); } }; @@ -247,7 +262,7 @@ struct CreateFunc<ImplT, PostProcessFuncT, with_args<true> > { const& xContext ) const { return m_postProcessFunc( - new ServiceImpl<ImplT>( rServiceDecl, args, xContext ) ); + new ImplT( rServiceDecl, args, xContext ) ); } }; @@ -261,18 +276,17 @@ struct CreateFunc<ImplT, PostProcessFuncT, with_args<true> > { or just (uno::Reference<uno::XComponentContext>) */ template <typename ImplT_, typename WithArgsT = with_args<false> > -struct class_ { +struct serviceimpl_base { typedef ImplT_ ImplT; - typedef detail::ServiceImpl<ImplT_> ServiceImplT; detail::CreateFuncF const m_createFunc; - typedef detail::PostProcessDefault<ServiceImplT> PostProcessDefaultT; + typedef detail::PostProcessDefault<ImplT> PostProcessDefaultT; /** Default ctor. Implementation class without args, expecting component context as single argument. */ - class_() : m_createFunc( + serviceimpl_base() : m_createFunc( detail::CreateFunc<ImplT, PostProcessDefaultT, WithArgsT>( PostProcessDefaultT() ) ) {} @@ -284,11 +298,29 @@ struct class_ { uno::Reference<uno::XInterface> */ template <typename PostProcessFuncT> - explicit class_( PostProcessFuncT const& postProcessFunc ) + explicit serviceimpl_base( PostProcessFuncT const& postProcessFunc ) : m_createFunc( detail::CreateFunc<ImplT, PostProcessFuncT, WithArgsT>( postProcessFunc ) ) {} }; +template <typename ImplT_, typename WithArgsT = with_args<false> > +struct class_ : public serviceimpl_base< detail::ServiceImpl<ImplT_>, WithArgsT > +{ + typedef serviceimpl_base< detail::ServiceImpl<ImplT_>, WithArgsT > baseT; + /** Default ctor. Implementation class without args, expecting + component context as single argument. + */ + class_() : baseT() {} + template <typename PostProcessFuncT> + /** Ctor to pass a post processing function/functor. + + @tpl PostProcessDefaultT let your compiler deduce this + @param postProcessFunc function/functor that gets the yet unacquired + ImplT_ pointer returning a + uno::Reference<uno::XInterface> + */ + explicit class_( PostProcessFuncT const& postProcessFunc ) : baseT( postProcessFunc ) {} +}; // // component_... helpers with arbitrary service declarations: |