lok: avoid expensive fetching of a property.
[LibreOffice.git] / include / xmloff / unointerfacetouniqueidentifiermapper.hxx
blob332005e720ac88a93dcdf67199014635b1b0c33e
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #ifndef INCLUDED_XMLOFF_UNOINTERFACETOUNIQUEIDENTIFIERMAPPER_HXX
21 #define INCLUDED_XMLOFF_UNOINTERFACETOUNIQUEIDENTIFIERMAPPER_HXX
23 #include <sal/config.h>
24 #include <xmloff/dllapi.h>
25 #include <sal/types.h>
27 #include <deque>
28 #include <map>
29 #include <rtl/ustring.hxx>
30 #include <com/sun/star/uno/XInterface.hpp>
32 namespace comphelper
35 typedef ::std::map< OUString, css::uno::Reference< css::uno::XInterface > > IdMap_t;
37 class XMLOFF_DLLPUBLIC UnoInterfaceToUniqueIdentifierMapper
39 typedef std::deque< OUString > Reserved_t;
41 public:
42 UnoInterfaceToUniqueIdentifierMapper();
44 /** returns a unique identifier for the given uno object. If a UNO object is
45 registered more than once, the returned identifier is always the same.
47 const OUString& registerReference( const css::uno::Reference< css::uno::XInterface >& rInterface );
49 /** registers the given uno object with the given identifier.
51 @returns
52 false, if the given identifier already exists and is not associated with the given interface
54 bool registerReference( const OUString& rIdentifier, const css::uno::Reference< css::uno::XInterface >& rInterface );
56 /** reserves an identifier for later registration.
58 @returns
59 false, if the identifier already exists
61 bool reserveIdentifier( const OUString& rIdentifier );
63 /** registers the given uno object with reserved identifier.
65 bool registerReservedReference( const OUString& rIdentifier, const css::uno::Reference< css::uno::XInterface >& rInterface );
67 /** @returns
68 the identifier for the given uno object. If this uno object is not already
69 registered, an empty string is returned
71 const OUString& getIdentifier( const css::uno::Reference< css::uno::XInterface >& rInterface ) const;
73 /** @returns
74 the uno object that is registered with the given identifier. If no uno object
75 is registered with the given identifier, an empty reference is returned.
77 const css::uno::Reference< css::uno::XInterface >& getReference( const OUString& rIdentifier ) const;
79 private:
80 bool findReference( const css::uno::Reference< css::uno::XInterface >& rInterface, IdMap_t::const_iterator& rIter ) const;
81 bool findIdentifier( const OUString& rIdentifier, IdMap_t::const_iterator& rIter ) const;
82 bool findReserved( const OUString& rIdentifier ) const;
83 bool findReserved( const OUString& rIdentifier, Reserved_t::const_iterator& rIter ) const;
85 IdMap_t maEntries;
86 sal_uInt32 mnNextId;
87 Reserved_t maReserved;
92 #endif
94 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */