1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: RefAndPointer.hxx,v $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 #ifndef INCLUDED_REF_AND_POINTER_HXX
32 #define INCLUDED_REF_AND_POINTER_HXX
35 #include <com/sun/star/lang/XUnoTunnel.hpp>
37 namespace writerfilter
{
40 using namespace ::com::sun::star
;
41 using namespace ::std
;
43 template <class Interface
, class ChildClass
>
46 mutable ChildClass
* mpHandler
;
47 mutable uno::Reference
<Interface
> mRef
;
54 clog
<< "MEMORY:" << mpHandler
->getInstanceNumber() << ":RefAndPointer"
59 RefAndPointer(ChildClass
* pHandler
)
60 : mpHandler(pHandler
), mRef(pHandler
)
63 clog
<< "MEMORY:" << mpHandler
->getInstanceNumber() << ":RefAndPointer"
68 RefAndPointer(uno::Reference
<Interface
> xRef
)
72 uno::Reference
<lang::XUnoTunnel
> xTunnel( xRef
, uno::UNO_QUERY
);
75 mpHandler
= reinterpret_cast<ChildClass
*>(xTunnel
->getSomething(ChildClass::getUnoTunnelId()));
77 mpHandler
= dynamic_cast<ChildClass
*>(xRef
.get());
79 if (mpHandler
!= NULL
)
80 clog
<< "MEMORY:" << mpHandler
->getInstanceNumber()
81 << ":RefAndPointer" << endl
;
84 virtual ~RefAndPointer()
87 if (mpHandler
!= NULL
)
88 clog
<< "MEMORY:" << mpHandler
->getInstanceNumber()
89 << ":~RefAndPointer" << endl
;
93 void set(ChildClass
* pHandler
)
99 void set(uno::Reference
<Interface
> xHandler
)
101 mpHandler
= dynamic_cast<ChildClass
*>(xHandler
.get());
105 ChildClass
* getPointer() const { return mpHandler
; }
106 const uno::Reference
<Interface
> getRef() const { return mRef
; }
108 RefAndPointer
& operator=
109 (const RefAndPointer
& rSrc
)
111 set(rSrc
.getHandler());
116 bool is() { return getRef().is(); }
118 operator ChildClass
* () { return getPointer(); }
119 operator uno::Reference
<Interface
> () { return getRef(); }
122 #endif // INCLUDED_REF_AND_POINTER_HXX