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 10 #ifndef INCLUDED_SVL_SHAREDSTRINGPOOL_HXX 11 #define INCLUDED_SVL_SHAREDSTRINGPOOL_HXX 12 13 #include <svl/svldllapi.h> 14 #include <rtl/ustring.hxx> 15 #include <memory> 16 17 class CharClass; 18 19 namespace svl 20 { 21 class SharedString; 22 23 /** 24 * Storage for pool of shared strings. It also provides mapping from 25 * original-cased strings to upper-cased strings for case insensitive 26 * operations. 27 */ 28 class SVL_DLLPUBLIC SharedStringPool 29 { 30 struct Impl; 31 std::unique_ptr<Impl> mpImpl; 32 33 SharedStringPool(const SharedStringPool&) = delete; 34 SharedStringPool& operator=(const SharedStringPool&) = delete; 35 36 public: 37 SharedStringPool(const CharClass& rCharClass); 38 ~SharedStringPool(); 39 40 /** 41 * Intern a string object into the shared string pool. 42 * 43 * @param rStr string object to intern. 44 * 45 * @return a pointer to the string object stored inside the pool, or NULL 46 * if the insertion fails. 47 */ 48 SharedString intern(const OUString& rStr); 49 50 /** 51 * Go through all string objects in the pool, and clear those that are no 52 * longer used outside of the pool. 53 */ 54 void purge(); 55 56 size_t getCount() const; 57 58 size_t getCountIgnoreCase() const; 59 }; 60 } 61 62 #endif 63 64 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ 65