summaryrefslogtreecommitdiff
path: root/source/sharedstring.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'source/sharedstring.cxx')
-rw-r--r--source/sharedstring.cxx94
1 files changed, 94 insertions, 0 deletions
diff --git a/source/sharedstring.cxx b/source/sharedstring.cxx
new file mode 100644
index 0000000..c04fb17
--- /dev/null
+++ b/source/sharedstring.cxx
@@ -0,0 +1,94 @@
+
+#include "sharedstring.hxx"
+
+using ::rtl::OUString;
+
+namespace dpsource {
+
+SimpleSharedString::StringTable::StringTable() :
+ mnStrCount(0)
+{
+ // empty string (ID = 0)
+ maSharedStrings.push_back(OUString());
+ maSharedStringIds.insert( SharedStrMap::value_type(OUString(), mnStrCount++) );
+}
+
+SimpleSharedString::StringTable::StringTable(const SimpleSharedString::StringTable& r) :
+ maSharedStrings(r.maSharedStrings),
+ maSharedStringIds(r.maSharedStringIds),
+ mnStrCount(r.mnStrCount)
+{
+}
+
+SimpleSharedString::StringTable::~StringTable()
+{
+}
+
+StrID SimpleSharedString::StringTable::insertString(const OUString& aStr)
+{
+ SharedStrMap::const_iterator itr = maSharedStringIds.find(aStr),
+ itrEnd = maSharedStringIds.end();
+
+ if (itr == itrEnd)
+ {
+ // new string.
+ maSharedStrings.push_back(aStr);
+ maSharedStringIds.insert( SharedStrMap::value_type(aStr, mnStrCount) );
+ return mnStrCount++;
+ }
+
+ // existing string.
+ return itr->second;
+}
+
+StrID SimpleSharedString::StringTable::getStringId(const OUString& aStr)
+{
+ SharedStrMap::const_iterator itr = maSharedStringIds.find(aStr),
+ itrEnd = maSharedStringIds.end();
+ if (itr == itrEnd)
+ {
+ // string not found.
+ return insertString(aStr);
+ }
+ return itr->second;
+}
+
+const OUString* SimpleSharedString::StringTable::getString(StrID nId) const
+{
+ if (nId >= mnStrCount)
+ return NULL;
+
+ return &maSharedStrings[nId];
+}
+
+// ----------------------------------------------------------------------------
+
+SimpleSharedString::SimpleSharedString()
+{
+}
+
+SimpleSharedString::SimpleSharedString(const SimpleSharedString& r) :
+ maStringTable(r.maStringTable)
+{
+}
+
+SimpleSharedString::~SimpleSharedString()
+{
+}
+
+StrID SimpleSharedString::insertString(const OUString& aStr)
+{
+ return maStringTable.insertString(aStr);
+}
+
+const OUString* SimpleSharedString::getString(StrID nId)
+{
+ return maStringTable.getString(nId);
+}
+
+StrID SimpleSharedString::getStringId(const OUString& aStr)
+{
+ return maStringTable.getStringId(aStr);
+}
+
+}