1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 #ifndef CHART2_DISPOSEHELPER_HXX 28 #define CHART2_DISPOSEHELPER_HXX 29 30 #include <com/sun/star/uno/Reference.hxx> 31 #include <com/sun/star/lang/XComponent.hpp> 32 33 #include <functional> 34 #include <algorithm> 35 #include <utility> 36 37 namespace chart 38 { 39 namespace DisposeHelper 40 { 41 42 template< class T > 43 void Dispose( const T & xIntf ) 44 { 45 ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent > xComp( 46 xIntf, ::com::sun::star::uno::UNO_QUERY ); 47 if( xComp.is()) 48 xComp->dispose(); 49 } 50 51 template< class Intf > 52 void DisposeAndClear( ::com::sun::star::uno::Reference< Intf > & rIntf ) 53 { 54 Dispose< ::com::sun::star::uno::Reference< Intf > >( rIntf ); 55 rIntf.set( 0 ); 56 } 57 58 template< class T > 59 struct DisposeFunctor : public ::std::unary_function< T, void > 60 { 61 void operator() ( const T & xIntf ) 62 { 63 Dispose< T >( xIntf ); 64 } 65 }; 66 67 template< typename T > 68 struct DisposeFirstOfPairFunctor : public ::std::unary_function< T, void > 69 { 70 void operator() ( const T & rElem ) 71 { 72 Dispose< typename T::first_type >( rElem.first ); 73 } 74 }; 75 76 template< typename T > 77 struct DisposeSecondOfPairFunctor : public ::std::unary_function< T, void > 78 { 79 void operator() ( const T & rElem ) 80 { 81 Dispose< typename T::second_type >( rElem.second ); 82 } 83 }; 84 85 template< class Container > 86 void DisposeAllElements( Container & rContainer ) 87 { 88 ::std::for_each( rContainer.begin(), rContainer.end(), DisposeFunctor< typename Container::value_type >()); 89 } 90 91 template< class Map > 92 void DisposeAllMapElements( Map & rContainer ) 93 { 94 ::std::for_each( rContainer.begin(), rContainer.end(), DisposeSecondOfPairFunctor< typename Map::value_type >()); 95 } 96 97 } // namespace DisposeHelper 98 } // namespace chart 99 100 // CHART2_DISPOSEHELPER_HXX 101 #endif 102