diff options
Diffstat (limited to 'source/sharedstring.cxx')
-rw-r--r-- | source/sharedstring.cxx | 94 |
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); +} + +} |