diff options
Diffstat (limited to 'inc/sharedstring.hxx')
-rw-r--r-- | inc/sharedstring.hxx | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/inc/sharedstring.hxx b/inc/sharedstring.hxx new file mode 100644 index 0000000..e427613 --- /dev/null +++ b/inc/sharedstring.hxx @@ -0,0 +1,52 @@ +#ifndef __SHAREDSTRING_HXX__ +#define __SHAREDSTRING_HXX__ + +#include <cppuhelper/implementationentry.hxx> + +#include <hash_map> + +namespace dpsource { + +typedef sal_Int32 StrID; + +class SimpleSharedString +{ +public: + static const StrID EMPTY = 0; + + SimpleSharedString(); + SimpleSharedString(const SimpleSharedString& r); + ~SimpleSharedString(); + + const ::rtl::OUString* getString(StrID nId); + StrID getStringId(const ::rtl::OUString& aStr); + StrID insertString(const ::rtl::OUString& aStr); + +private: + + /** internal shared string table implementation */ + class StringTable + { + public: + StrID insertString(const ::rtl::OUString& aStr); + StrID getStringId(const ::rtl::OUString& aStr); + const ::rtl::OUString* getString(StrID nId) const; + + StringTable(); + StringTable(const StringTable& r); + ~StringTable(); + + private: + typedef ::__gnu_cxx::hash_map< ::rtl::OUString, StrID, ::rtl::OUStringHash > SharedStrMap; + + ::std::vector< ::rtl::OUString > maSharedStrings; + SharedStrMap maSharedStringIds; + StrID mnStrCount; + }; + + StringTable maStringTable; +}; + +} + +#endif |