1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  * This file is part of the LibreOffice project.
4  *
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/.
8  *
9  * This file incorporates work covered by the following license notice:
10  *
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 .
18  */
19 
20 
21 // C and C++ includes
22 #include <stdlib.h>
23 
24 // program-sensitive includes
25 #include <hash.hxx>
26 
27 #include <rtl/character.hxx>
28 
Insert(const OString & rElement,sal_uInt32 * pInsertPos)29 SvStringHashEntry * SvStringHashTable::Insert( const OString& rElement, sal_uInt32 * pInsertPos )
30 {
31     auto it = maString2IntMap.find(rElement);
32     if (it != maString2IntMap.end()) {
33         *pInsertPos = it->second;
34         return maInt2EntryMap[*pInsertPos].get();
35     }
36     maString2IntMap[rElement] = mnNextId;
37     maInt2EntryMap[mnNextId] = std::make_unique<SvStringHashEntry>(rElement);
38     *pInsertPos = mnNextId;
39     mnNextId++;
40     return maInt2EntryMap[*pInsertPos].get();
41 }
42 
Test(const OString & rElement,sal_uInt32 * pInsertPos)43 bool SvStringHashTable::Test( const OString& rElement, sal_uInt32 * pInsertPos )
44 {
45     auto it = maString2IntMap.find(rElement);
46     if (it != maString2IntMap.end()) {
47         *pInsertPos = it->second;
48         return true;
49     }
50     return false;
51 }
52 
Get(sal_uInt32 nInsertPos) const53 SvStringHashEntry * SvStringHashTable::Get( sal_uInt32 nInsertPos ) const
54 {
55     auto it = maInt2EntryMap.find(nInsertPos);
56     return it->second.get();
57 }
58 
GetNearString(std::string_view rName) const59 OString SvStringHashTable::GetNearString( std::string_view rName ) const
60 {
61     for( auto const & rPair : maInt2EntryMap )
62     {
63         SvStringHashEntry * pE = rPair.second.get();
64         if( pE->GetName().equalsIgnoreAsciiCase( rName ) && pE->GetName() != rName  )
65             return pE->GetName();
66     }
67     return OString();
68 }
69 
70 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
71