1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
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 .
19 #ifndef _STRINGHASH_HXX
20 #define _STRINGHASH_HXX
22 #include <tools/string.hxx>
26 sal_Bool
operator() ( const String
*r1
,
27 const String
*r2
) const
29 return r1
->Equals(*r2
);
35 sal_Bool
operator() (const String
&r1
, const String
&r2
) const
43 size_t operator() ( const String
*rString
) const
46 h
= nLen
= rString
->Len();
47 const sal_Unicode
*pStr
= rString
->GetBuffer();
51 h
= (h
*37) + *(pStr
++);
55 const sal_Unicode
* pEndStr
= pStr
+nLen
-5;
57 /* only sample some characters */
58 /* the first 3, some characters between, and the last 5 */
59 h
= (h
*39) + *(pStr
++);
60 h
= (h
*39) + *(pStr
++);
61 h
= (h
*39) + *(pStr
++);
63 nSkip
= nLen
/ nLen
< 32 ? 4 : 8;
67 h
= (h
*39) + ( *pStr
);
72 h
= (h
*39) + *(pEndStr
++);
73 h
= (h
*39) + *(pEndStr
++);
74 h
= (h
*39) + *(pEndStr
++);
75 h
= (h
*39) + *(pEndStr
++);
76 h
= (h
*39) + *(pEndStr
++);
81 size_t operator() (const String
& rStr
) const
83 return (*this)(&rStr
);
89 size_t operator () (const String
&rStr
) const
93 return aStrHash(&rStr
);
96 #endif // _STRINGHASH_HXX
98 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */