Difference between revisions of "HelperNotHelper"

From Apache OpenOffice Wiki
Jump to: navigation, search
Line 3: Line 3:
 
Here is the C++ code
 
Here is the C++ code
 
<source lang="cpp">
 
<source lang="cpp">
−
class MyCounterImpl
+
class MyCounterImpl : public XCountable, public XServiceInfo
−
: public XCountable
 
−
, public XServiceInfo
 
 
{
 
{
 
sal_Int32 m_nRefCount;
 
sal_Int32 m_nRefCount;
 
sal_Int32 m_nCount;
 
sal_Int32 m_nCount;
 
public:
 
public:
−
MyCounterImpl( const Reference< XMultiServiceFactory > & xServiceManager )
+
MyCounterImpl( const Reference< XMultiServiceFactory > & xServiceManager );
−
: m_xServiceManager( xServiceManager ), m_nRefCount( 0 )
+
~MyCounterImpl();
−
{ printf( "< MyCounterImpl ctor called >\n" ); }
 
−
~MyCounterImpl()
 
−
{ printf( "< MyCounterImpl dtor called >\n" ); }
 
  
 
// XInterface implementation
 
// XInterface implementation
−
virtual void SAL_CALL acquire() throw ()
+
virtual void SAL_CALL acquire() throw ();
−
{ ++m_nRefCount; }
+
virtual void SAL_CALL release() throw ();
−
virtual void SAL_CALL release() throw ()
+
virtual Any SAL_CALL queryInterface( const Type & rType ) throw (RuntimeException);
−
{ if (! --m_nRefCount) delete this; }
+
−
virtual Any SAL_CALL queryInterface( const Type & rType ) throw (RuntimeException)
 
−
{ return cppu::queryInterface(rType, static_cast< XInterface* >
 
−
                                          ( static_cast< XServiceInfo* >( this ) ),
 
−
            static_cast< XCountable* >( this ),
 
−
                                      static_cast< XServiceInfo* >( this ) ); }
 
−
 
 
 
// XServiceInfo implementation
 
// XServiceInfo implementation
 
     virtual OUString SAL_CALL getImplementationName(  ) throw(RuntimeException);
 
     virtual OUString SAL_CALL getImplementationName(  ) throw(RuntimeException);
Line 34: Line 23:
  
 
// XCountable implementation
 
// XCountable implementation
−
virtual sal_Int32 SAL_CALL getCount() throw (RuntimeException)
+
virtual sal_Int32 SAL_CALL getCount() throw (RuntimeException);
−
{ return m_nCount; }
+
virtual void SAL_CALL setCount( sal_Int32 nCount ) throw (RuntimeException);
−
virtual void SAL_CALL setCount( sal_Int32 nCount ) throw (RuntimeException)
+
virtual sal_Int32 SAL_CALL increment() throw (RuntimeException);
−
{ m_nCount = nCount; }
+
virtual sal_Int32 SAL_CALL decrement() throw (RuntimeException);
−
virtual sal_Int32 SAL_CALL increment() throw (RuntimeException)
 
−
{ return (++m_nCount); }
 
−
virtual sal_Int32 SAL_CALL decrement() throw (RuntimeException)
 
−
{ return (--m_nCount); }
 
 
};
 
};
 
</source>
 
</source>

Revision as of 11:53, 17 April 2008

It's important to figure out the difference beween class implementing component when you use or not an helper.

Class without Helper

Here is the C++ code

class MyCounterImpl : public XCountable, public XServiceInfo
{
	sal_Int32 m_nRefCount;
	sal_Int32 m_nCount;	
public:
	MyCounterImpl( const Reference< XMultiServiceFactory > & xServiceManager );
	~MyCounterImpl();

// XInterface implementation
	virtual void SAL_CALL acquire() throw ();
	virtual void SAL_CALL release() throw ();
	virtual Any SAL_CALL queryInterface( const Type & rType ) throw (RuntimeException);
		
// XServiceInfo	implementation
    virtual OUString SAL_CALL getImplementationName(  ) throw(RuntimeException);
    virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) throw(RuntimeException);
    virtual Sequence< OUString > SAL_CALL getSupportedServiceNames(  ) throw(RuntimeException);
    static Sequence< OUString > SAL_CALL getSupportedServiceNames_Static(  );

// XCountable implementation
	virtual sal_Int32 SAL_CALL getCount() throw (RuntimeException);
	virtual void SAL_CALL setCount( sal_Int32 nCount ) throw (RuntimeException);
	virtual sal_Int32 SAL_CALL increment() throw (RuntimeException);
	virtual sal_Int32 SAL_CALL decrement() throw (RuntimeException);
};

Class with an Helper

Here is the code

class MyCounterImpl : public ::cppu::WeakImplHelper2<
      XCountable, XServiceInfo >
{
	// to obtain other services if needed
	Reference< XMultiServiceFactory > m_xServiceManager;
	
	sal_Int32 m_nRefCount;
	sal_Int32 m_nCount;
	
public:
// XServiceInfo	implementation
    virtual OUString SAL_CALL getImplementationName(  ) throw(RuntimeException);
    virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) throw(RuntimeException);
    virtual Sequence< OUString > SAL_CALL getSupportedServiceNames(  ) throw(RuntimeException);
    static Sequence< OUString > SAL_CALL getSupportedServiceNames_Static(  );

// XCountable implementation
	virtual sal_Int32 SAL_CALL getCount() throw (RuntimeException)
		{ return m_nCount; }
	virtual void SAL_CALL setCount( sal_Int32 nCount ) throw (RuntimeException)
		{ m_nCount = nCount; }
	virtual sal_Int32 SAL_CALL increment() throw (RuntimeException)
		{ return (++m_nCount); }
	virtual sal_Int32 SAL_CALL decrement() throw (RuntimeException)
		{ return (--m_nCount); }
};
Personal tools