1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2000, 2010 Oracle and/or its affiliates.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * This file is part of OpenOffice.org.
11 * OpenOffice.org is free software: you can redistribute it and/or modify
12 * it under the terms of the GNU Lesser General Public License version 3
13 * only, as published by the Free Software Foundation.
15 * OpenOffice.org is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU Lesser General Public License version 3 for more details
19 * (a copy is included in the LICENSE file that accompanied this code).
21 * You should have received a copy of the GNU Lesser General Public License
22 * version 3 along with OpenOffice.org. If not, see
23 * <http://www.openoffice.org/license.html>
24 * for a copy of the LGPLv3 License.
26 ************************************************************************/
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_sal.hxx"
30 #include "rtl/allocator.hxx"
42 size_t operator()(rtl_uString
* const &rString
) const
43 { return (size_t)rtl_ustr_hashCode_WithLength( rString
->buffer
, rString
->length
); }
48 sal_Bool
operator() ( rtl_uString
* const &pStringA
,
49 rtl_uString
* const &pStringB
) const
51 if (pStringA
== pStringB
)
53 if (pStringA
->length
!= pStringB
->length
)
55 return !rtl_ustr_compare_WithLength( pStringA
->buffer
, pStringA
->length
,
56 pStringB
->buffer
, pStringB
->length
);
60 typedef std::hash_set
< rtl_uString
*, UStringHash
, UStringEqual
,
61 rtl::Allocator
<rtl_uString
*> > StringHashTable
;
66 static StringHashTable
*pInternPool
= NULL
;
67 if (pInternPool
== NULL
) {
68 static StringHashTable
aImpl(1024);
79 rtl_str_hash_intern (rtl_uString
*pString
,
82 StringHashTable
*pHash
= getHashTable();
83 StringHashTable::iterator aIter
;
84 aIter
= pHash
->find(pString
);
85 if (aIter
!= pHash
->end())
87 rtl_uString
*pHashStr
= *aIter
;
88 rtl_uString_acquire (pHashStr
);
93 rtl_uString
*pCopy
= NULL
;
94 rtl_uString_newFromString( &pCopy
, pString
);
100 if (!SAL_STRING_IS_STATIC (pString
))
101 pString
->refCount
|= SAL_STRING_INTERN_FLAG
;
102 pHash
->insert(pString
);
108 rtl_str_hash_remove (rtl_uString
*pString
)
110 getHashTable()->erase(pString
);