update dev300-m58
[ooovba.git] / chart2 / source / inc / DisposeHelper.hxx
blob1211d5c5db9c1168a66717fc495344f8d3e86ce0
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: DisposeHelper.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 ************************************************************************/
30 #ifndef CHART2_DISPOSEHELPER_HXX
31 #define CHART2_DISPOSEHELPER_HXX
33 #include <com/sun/star/uno/Reference.hxx>
34 #include <com/sun/star/lang/XComponent.hpp>
36 #include <functional>
37 #include <algorithm>
38 #include <utility>
40 namespace chart
42 namespace DisposeHelper
45 template< class T >
46 void Dispose( const T & xIntf )
48 ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent > xComp(
49 xIntf, ::com::sun::star::uno::UNO_QUERY );
50 if( xComp.is())
51 xComp->dispose();
54 template< class Intf >
55 void DisposeAndClear( ::com::sun::star::uno::Reference< Intf > & rIntf )
57 Dispose< ::com::sun::star::uno::Reference< Intf > >( rIntf );
58 rIntf.set( 0 );
61 template< class T >
62 struct DisposeFunctor : public ::std::unary_function< T, void >
64 void operator() ( const T & xIntf )
66 Dispose< T >( xIntf );
70 template< typename T >
71 struct DisposeFirstOfPairFunctor : public ::std::unary_function< T, void >
73 void operator() ( const T & rElem )
75 Dispose< typename T::first_type >( rElem.first );
79 template< typename T >
80 struct DisposeSecondOfPairFunctor : public ::std::unary_function< T, void >
82 void operator() ( const T & rElem )
84 Dispose< typename T::second_type >( rElem.second );
88 template< class Container >
89 void DisposeAllElements( Container & rContainer )
91 ::std::for_each( rContainer.begin(), rContainer.end(), DisposeFunctor< typename Container::value_type >());
94 template< class Map >
95 void DisposeAllMapElements( Map & rContainer )
97 ::std::for_each( rContainer.begin(), rContainer.end(), DisposeSecondOfPairFunctor< typename Map::value_type >());
100 } // namespace DisposeHelper
101 } // namespace chart
103 // CHART2_DISPOSEHELPER_HXX
104 #endif