diff options
author | Caolán McNamara <caolanm@redhat.com> | 2012-03-19 11:52:27 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2012-03-20 12:57:33 +0000 |
commit | 260ed4ed0317f4f16a675dde48750bc40923bc96 (patch) | |
tree | cdcb941434367892497d31545a4dc6d8f7c9e12c /xmloff | |
parent | a66ce1981ebb64edea067f8857df377486cafdba (diff) |
map of kind+name -> new-name
Diffstat (limited to 'xmloff')
-rw-r--r-- | xmloff/inc/xmloff/i18nmap.hxx | 53 | ||||
-rw-r--r-- | xmloff/source/core/i18nmap.cxx | 98 |
2 files changed, 44 insertions, 107 deletions
diff --git a/xmloff/inc/xmloff/i18nmap.hxx b/xmloff/inc/xmloff/i18nmap.hxx index 2f56e26bf5f8..2988e762812f 100644 --- a/xmloff/inc/xmloff/i18nmap.hxx +++ b/xmloff/inc/xmloff/i18nmap.hxx @@ -29,43 +29,54 @@ #ifndef _XMLOFF_I18NMAP_HXX #define _XMLOFF_I18NMAP_HXX -#include "sal/config.h" +#include <sal/config.h> #include "xmloff/dllapi.h" -#include "sal/types.h" +#include <rtl/ustring.hxx> #include <tools/solar.h> +#include <map> - -namespace rtl +class SvI18NMapEntry_Key { - class OUString; -} + sal_uInt16 nKind; + rtl::OUString aName; +public: + SvI18NMapEntry_Key( sal_uInt16 nKnd, const rtl::OUString& rName ) : + nKind( nKnd ), + aName( rName ) + { + } + + sal_Bool operator==( const SvI18NMapEntry_Key& r ) const + { + return nKind == r.nKind && + aName == r.aName; + } + + sal_Bool operator<( const SvI18NMapEntry_Key& r ) const + { + return nKind < r.nKind || + ( nKind == r.nKind && + aName < r.aName); + } +}; -class SvI18NMap_Impl; -class SvI18NMapEntry_Impl; +typedef std::map<SvI18NMapEntry_Key, rtl::OUString> SvI18NMap_Impl; class XMLOFF_DLLPUBLIC SvI18NMap { - SvI18NMap_Impl *pImpl; - - SAL_DLLPRIVATE SvI18NMapEntry_Impl *_Find( sal_uInt16 nKind, - const ::rtl::OUString& rName ) const; + SvI18NMap_Impl m_aMap; public: - - SvI18NMap(); - ~SvI18NMap(); - // Add a name mapping - void Add( sal_uInt16 nKind, const ::rtl::OUString& rName, - const ::rtl::OUString& rNewName ); + bool Add( sal_uInt16 nKind, const rtl::OUString& rName, + const rtl::OUString& rNewName ); // Return a mapped name. If the name could not be found, return the // original name. - const ::rtl::OUString& Get( sal_uInt16 nKind, - const ::rtl::OUString& rName ) const; + const rtl::OUString& Get( sal_uInt16 nKind, + const rtl::OUString& rName ) const; }; - #endif // _XMLOFF_I18NMAP_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/xmloff/source/core/i18nmap.cxx b/xmloff/source/core/i18nmap.cxx index 0d5a97022b4d..ea4db31c67f7 100644 --- a/xmloff/source/core/i18nmap.cxx +++ b/xmloff/source/core/i18nmap.cxx @@ -31,96 +31,22 @@ #include <svl/svarray.hxx> #include "xmloff/i18nmap.hxx" -using ::rtl::OUString; - -class SvI18NMapEntry_Impl -{ - sal_uInt16 nKind; - OUString aName; - OUString aNewName; - -public: - - const OUString& GetNewName() const { return aNewName; } - - SvI18NMapEntry_Impl( sal_uInt16 nKnd, const OUString& rName, - const OUString& rNewName ) : - nKind( nKnd ), - aName( rName ), - aNewName( rNewName ) - {} - - SvI18NMapEntry_Impl( sal_uInt16 nKnd, const OUString& rName ) : - nKind( nKnd ), - aName( rName ) - {} - - sal_Bool operator==( const SvI18NMapEntry_Impl& r ) const - { - return nKind == r.nKind && - aName == r.aName; - } - - sal_Bool operator<( const SvI18NMapEntry_Impl& r ) const - { - return nKind < r.nKind || - ( nKind == r.nKind && - aName < r.aName); - } -}; - -typedef SvI18NMapEntry_Impl *SvI18NMapEntry_ImplPtr; -SV_DECL_PTRARR_SORT_DEL( SvI18NMap_Impl, SvI18NMapEntry_ImplPtr, 20 ) -SV_IMPL_OP_PTRARR_SORT( SvI18NMap_Impl, SvI18NMapEntry_ImplPtr ) - -// --------------------------------------------------------------------- - -SvI18NMapEntry_Impl *SvI18NMap::_Find( sal_uInt16 nKind, - const OUString& rName ) const +bool SvI18NMap::Add( sal_uInt16 nKind, const rtl::OUString& rName, + const rtl::OUString& rNewName ) { - SvI18NMapEntry_Impl *pRet = 0; - SvI18NMapEntry_Impl aTst( nKind, rName ); - - sal_uInt16 nPos; - if( pImpl->Seek_Entry( &aTst, &nPos ) ) - { - pRet = (*pImpl)[nPos]; - } - - return pRet; -} - -SvI18NMap::SvI18NMap() : - pImpl( 0 ) -{ - pImpl = new SvI18NMap_Impl; + SvI18NMapEntry_Key aKey(nKind, rName); + bool bIsNewInsertion = m_aMap.insert(SvI18NMap_Impl::value_type(aKey, rNewName)).second; + DBG_ASSERT( bIsNewInsertion, "SvI18NMap::Add: item registered already" ); + return bIsNewInsertion; } -SvI18NMap::~SvI18NMap() +const rtl::OUString& SvI18NMap::Get( sal_uInt16 nKind, const rtl::OUString& rName ) const { - delete pImpl; + SvI18NMapEntry_Key aKey(nKind, rName); + SvI18NMap_Impl::const_iterator aI = m_aMap.find(aKey); + if (aI != m_aMap.end()) + return aI->second; + return rName; } -void SvI18NMap::Add( sal_uInt16 nKind, const OUString& rName, - const OUString& rNewName ) -{ - SvI18NMapEntry_Impl *pEntry = _Find( nKind, rName ); - DBG_ASSERT( !pEntry, "SvI18NMap::Add: item registered already" ); - if( !pEntry ) - { - pEntry = new SvI18NMapEntry_Impl( nKind, rName, rNewName ); - pImpl->Insert( pEntry ); - } -} - -const OUString& SvI18NMap::Get( sal_uInt16 nKind, const OUString& rName ) const -{ - SvI18NMapEntry_Impl *pEntry = _Find( nKind, rName ); - if( pEntry ) - return pEntry->GetNewName(); - else - return rName; -} - - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |