update dev300-m58
[ooovba.git] / writerfilter / source / ooxml / RefAndPointer.hxx
blob35ff2d7be26aab3e065bf7c30760e787dc60fdde
1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: RefAndPointer.hxx,v $
10 * $Revision: 1.3 $
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
34 #include <iostream>
35 #include <com/sun/star/lang/XUnoTunnel.hpp>
37 namespace writerfilter {
38 namespace ooxml
40 using namespace ::com::sun::star;
41 using namespace ::std;
43 template <class Interface, class ChildClass>
44 class RefAndPointer
46 mutable ChildClass * mpHandler;
47 mutable uno::Reference<Interface> mRef;
49 public:
50 RefAndPointer()
51 : mpHandler(NULL)
53 #ifdef DEBUG_MEMORY
54 clog << "MEMORY:" << mpHandler->getInstanceNumber() << ":RefAndPointer"
55 << endl;
56 #endif
59 RefAndPointer(ChildClass * pHandler)
60 : mpHandler(pHandler), mRef(pHandler)
62 #ifdef DEBUG_MEMORY
63 clog << "MEMORY:" << mpHandler->getInstanceNumber() << ":RefAndPointer"
64 << endl;
65 #endif
68 RefAndPointer(uno::Reference<Interface> xRef)
69 : mRef(xRef)
71 #if 0
72 uno::Reference<lang::XUnoTunnel> xTunnel( xRef, uno::UNO_QUERY);
74 if (xTunnel.is())
75 mpHandler = reinterpret_cast<ChildClass *>(xTunnel->getSomething(ChildClass::getUnoTunnelId()));
76 #else
77 mpHandler = dynamic_cast<ChildClass *>(xRef.get());
78 #endif
79 if (mpHandler != NULL)
80 clog << "MEMORY:" << mpHandler->getInstanceNumber()
81 << ":RefAndPointer" << endl;
84 virtual ~RefAndPointer()
86 #ifdef DEBUG_MEMORY
87 if (mpHandler != NULL)
88 clog << "MEMORY:" << mpHandler->getInstanceNumber()
89 << ":~RefAndPointer" << endl;
90 #endif
93 void set(ChildClass * pHandler)
95 mpHandler = pHandler;
96 mRef = pHandler;
99 void set(uno::Reference<Interface> xHandler)
101 mpHandler = dynamic_cast<ChildClass*>(xHandler.get());
102 mRef = xHandler;
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());
113 return *this;
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