summaryrefslogtreecommitdiff
path: root/inc/sharedstring.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'inc/sharedstring.hxx')
-rw-r--r--inc/sharedstring.hxx52
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