1*cdf0e10cSrcweir #ifndef __COMPHELPER_UNOINTERFACETOUNIQUEIDENTIFIERMAPPER__ 2*cdf0e10cSrcweir #define __COMPHELPER_UNOINTERFACETOUNIQUEIDENTIFIERMAPPER__ 3*cdf0e10cSrcweir 4*cdf0e10cSrcweir #include <map> 5*cdf0e10cSrcweir #include <rtl/ustring.hxx> 6*cdf0e10cSrcweir #include <com/sun/star/uno/XInterface.hpp> 7*cdf0e10cSrcweir 8*cdf0e10cSrcweir namespace comphelper 9*cdf0e10cSrcweir { 10*cdf0e10cSrcweir 11*cdf0e10cSrcweir typedef ::std::map< rtl::OUString, const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > > IdMap_t; 12*cdf0e10cSrcweir 13*cdf0e10cSrcweir class UnoInterfaceToUniqueIdentifierMapper 14*cdf0e10cSrcweir { 15*cdf0e10cSrcweir public: 16*cdf0e10cSrcweir UnoInterfaceToUniqueIdentifierMapper(); 17*cdf0e10cSrcweir 18*cdf0e10cSrcweir /** returns a unique identifier for the given uno object. IF a uno object is 19*cdf0e10cSrcweir registered more than once, the returned identifier is always the same. 20*cdf0e10cSrcweir */ 21*cdf0e10cSrcweir const rtl::OUString& registerReference( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& rInterface ); 22*cdf0e10cSrcweir 23*cdf0e10cSrcweir /** registers the given uno object with the given identifier. 24*cdf0e10cSrcweir 25*cdf0e10cSrcweir @returns 26*cdf0e10cSrcweir false, if the given identifier already exists and is not associated with the given interface 27*cdf0e10cSrcweir */ 28*cdf0e10cSrcweir bool registerReference( const rtl::OUString& rIdentifier, const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& rInterface ); 29*cdf0e10cSrcweir 30*cdf0e10cSrcweir /** @returns 31*cdf0e10cSrcweir the identifier for the given uno object. If this uno object is not already 32*cdf0e10cSrcweir registered, an empty string is returned 33*cdf0e10cSrcweir */ 34*cdf0e10cSrcweir const rtl::OUString& getIdentifier( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& rInterface ) const; 35*cdf0e10cSrcweir 36*cdf0e10cSrcweir /** @returns 37*cdf0e10cSrcweir the uno object that is registered with the given identifier. If no uno object 38*cdf0e10cSrcweir is registered with the given identifier, an empty reference is returned. 39*cdf0e10cSrcweir */ 40*cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& getReference( const rtl::OUString& rIdentifier ) const; 41*cdf0e10cSrcweir 42*cdf0e10cSrcweir private: 43*cdf0e10cSrcweir bool findReference( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& rInterface, IdMap_t::const_iterator& rIter ) const; 44*cdf0e10cSrcweir bool findIdentifier( const rtl::OUString& rIdentifier, IdMap_t::const_iterator& rIter ) const; 45*cdf0e10cSrcweir 46*cdf0e10cSrcweir IdMap_t maEntries; 47*cdf0e10cSrcweir sal_Int32 mnNextId; 48*cdf0e10cSrcweir }; 49*cdf0e10cSrcweir 50*cdf0e10cSrcweir } 51*cdf0e10cSrcweir 52*cdf0e10cSrcweir #endif 53