1*ecfe53c5SAndrew Rist /************************************************************** 2*ecfe53c5SAndrew Rist * 3*ecfe53c5SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*ecfe53c5SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*ecfe53c5SAndrew Rist * distributed with this work for additional information 6*ecfe53c5SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*ecfe53c5SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*ecfe53c5SAndrew Rist * "License"); you may not use this file except in compliance 9*ecfe53c5SAndrew Rist * with the License. You may obtain a copy of the License at 10*ecfe53c5SAndrew Rist * 11*ecfe53c5SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*ecfe53c5SAndrew Rist * 13*ecfe53c5SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*ecfe53c5SAndrew Rist * software distributed under the License is distributed on an 15*ecfe53c5SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*ecfe53c5SAndrew Rist * KIND, either express or implied. See the License for the 17*ecfe53c5SAndrew Rist * specific language governing permissions and limitations 18*ecfe53c5SAndrew Rist * under the License. 19*ecfe53c5SAndrew Rist * 20*ecfe53c5SAndrew Rist *************************************************************/ 21*ecfe53c5SAndrew Rist 22cdf0e10cSrcweir #ifndef __COMPHELPER_UNOINTERFACETOUNIQUEIDENTIFIERMAPPER__ 23cdf0e10cSrcweir #define __COMPHELPER_UNOINTERFACETOUNIQUEIDENTIFIERMAPPER__ 24cdf0e10cSrcweir 25cdf0e10cSrcweir #include <map> 26cdf0e10cSrcweir #include <rtl/ustring.hxx> 27cdf0e10cSrcweir #include <com/sun/star/uno/XInterface.hpp> 28cdf0e10cSrcweir 29cdf0e10cSrcweir namespace comphelper 30cdf0e10cSrcweir { 31cdf0e10cSrcweir 32cdf0e10cSrcweir typedef ::std::map< rtl::OUString, const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > > IdMap_t; 33cdf0e10cSrcweir 34cdf0e10cSrcweir class UnoInterfaceToUniqueIdentifierMapper 35cdf0e10cSrcweir { 36cdf0e10cSrcweir public: 37cdf0e10cSrcweir UnoInterfaceToUniqueIdentifierMapper(); 38cdf0e10cSrcweir 39cdf0e10cSrcweir /** returns a unique identifier for the given uno object. IF a uno object is 40cdf0e10cSrcweir registered more than once, the returned identifier is always the same. 41cdf0e10cSrcweir */ 42cdf0e10cSrcweir const rtl::OUString& registerReference( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& rInterface ); 43cdf0e10cSrcweir 44cdf0e10cSrcweir /** registers the given uno object with the given identifier. 45cdf0e10cSrcweir 46cdf0e10cSrcweir @returns 47cdf0e10cSrcweir false, if the given identifier already exists and is not associated with the given interface 48cdf0e10cSrcweir */ 49cdf0e10cSrcweir bool registerReference( const rtl::OUString& rIdentifier, const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& rInterface ); 50cdf0e10cSrcweir 51cdf0e10cSrcweir /** @returns 52cdf0e10cSrcweir the identifier for the given uno object. If this uno object is not already 53cdf0e10cSrcweir registered, an empty string is returned 54cdf0e10cSrcweir */ 55cdf0e10cSrcweir const rtl::OUString& getIdentifier( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& rInterface ) const; 56cdf0e10cSrcweir 57cdf0e10cSrcweir /** @returns 58cdf0e10cSrcweir the uno object that is registered with the given identifier. If no uno object 59cdf0e10cSrcweir is registered with the given identifier, an empty reference is returned. 60cdf0e10cSrcweir */ 61cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& getReference( const rtl::OUString& rIdentifier ) const; 62cdf0e10cSrcweir 63cdf0e10cSrcweir private: 64cdf0e10cSrcweir bool findReference( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& rInterface, IdMap_t::const_iterator& rIter ) const; 65cdf0e10cSrcweir bool findIdentifier( const rtl::OUString& rIdentifier, IdMap_t::const_iterator& rIter ) const; 66cdf0e10cSrcweir 67cdf0e10cSrcweir IdMap_t maEntries; 68cdf0e10cSrcweir sal_Int32 mnNextId; 69cdf0e10cSrcweir }; 70cdf0e10cSrcweir 71cdf0e10cSrcweir } 72cdf0e10cSrcweir 73cdf0e10cSrcweir #endif 74