diff options
author | Noel Grandin <noelgrandin@gmail.com> | 2017-04-29 22:47:58 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2017-04-30 08:55:40 +0200 |
commit | 00052c1c4f7285a58a8854d34a9b6b3fd2d5991a (patch) | |
tree | b5cf1746b09a44551e09c113a600c6ee70d454ef /sfx2 | |
parent | aca48f46895811009ec90665d816ef835f0694be (diff) |
stop torturing std::string in SfxSlotPool
when what you really want is std::vector.
Also drop unnecassary use of std::unique_ptr
and constify a couple of methods.
Change-Id: I676ee3460a015b0c7656167c06a569c30c861f98
Reviewed-on: https://gerrit.libreoffice.org/37106
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'sfx2')
-rw-r--r-- | sfx2/source/control/msgpool.cxx | 104 |
1 files changed, 39 insertions, 65 deletions
diff --git a/sfx2/source/control/msgpool.cxx b/sfx2/source/control/msgpool.cxx index adbb0e6968fc..ed74d2020c3b 100644 --- a/sfx2/source/control/msgpool.cxx +++ b/sfx2/source/control/msgpool.cxx @@ -54,9 +54,7 @@ SfxSlotPool::~SfxSlotPool() void SfxSlotPool::RegisterInterface( SfxInterface& rInterface ) { // add to the list of SfxObjectInterface instances - if(!_pInterfaces) - _pInterfaces.reset(new std::vector<SfxInterface*> ); - _pInterfaces->push_back(&rInterface); + _vInterfaces.push_back(&rInterface); // Stop at a (single) Null-slot (for syntactic reasons the interfaces // always contain at least one slot) @@ -64,27 +62,22 @@ void SfxSlotPool::RegisterInterface( SfxInterface& rInterface ) return; // possibly add Interface-id and group-ids of funcs to the list of groups - if ( !_pGroups ) + if ( _pParentPool ) { - _pGroups.reset(new SfxSlotGroupArr_Impl); - - if ( _pParentPool ) - { - // The Groups in parent Slotpool are also known here - _pGroups->append( *_pParentPool->_pGroups ); - } + // The Groups in parent Slotpool are also known here + _vGroups.insert( _vGroups.end(), _pParentPool->_vGroups.begin(), _pParentPool->_vGroups.end() ); } for ( size_t nFunc = 0; nFunc < rInterface.Count(); ++nFunc ) { SfxSlot &rDef = rInterface.pSlots[nFunc]; if ( rDef.GetGroupId() && /* rDef.GetGroupId() != GID_INTERN && */ - _pGroups->find(rDef.GetGroupId()) == SfxSlotGroupArr_Impl::npos ) + std::find(_vGroups.begin(), _vGroups.end(), rDef.GetGroupId()) == _vGroups.end() ) { if (rDef.GetGroupId() == GID_INTERN) - _pGroups->insert(_pGroups->begin(), rDef.GetGroupId()); + _vGroups.insert(_vGroups.begin(), rDef.GetGroupId()); else - _pGroups->push_back(rDef.GetGroupId()); + _vGroups.push_back(rDef.GetGroupId()); } } } @@ -92,7 +85,7 @@ void SfxSlotPool::RegisterInterface( SfxInterface& rInterface ) const std::type_info* SfxSlotPool::GetSlotType( sal_uInt16 nId ) const { - const SfxSlot* pSlot = (const_cast <SfxSlotPool*> (this))->GetSlot( nId ); + const SfxSlot* pSlot = GetSlot( nId ); return pSlot ? pSlot->GetType()->Type() : nullptr; } @@ -101,26 +94,18 @@ const std::type_info* SfxSlotPool::GetSlotType( sal_uInt16 nId ) const void SfxSlotPool::ReleaseInterface( SfxInterface& rInterface ) { - SAL_WARN_IF(!_pInterfaces, "sfx.control", "releasing SfxInterface, but there are none"); - if (!_pInterfaces) - return ; - // remove from the list of SfxInterface instances - auto i = std::find(_pInterfaces->begin(), _pInterfaces->end(), &rInterface); - if(i != _pInterfaces->end()) - _pInterfaces->erase(i); + auto i = std::find(_vInterfaces.begin(), _vInterfaces.end(), &rInterface); + if(i != _vInterfaces.end()) + _vInterfaces.erase(i); } // get the first SfxMessage for a special Id (e.g. for getting check-mode) -const SfxSlot* SfxSlotPool::GetSlot( sal_uInt16 nId ) +const SfxSlot* SfxSlotPool::GetSlot( sal_uInt16 nId ) const { - SAL_WARN_IF(!_pInterfaces, "sfx.control", "no Interfaces registered"); - if (!_pInterfaces) - return nullptr; - // First, search their own interfaces - for (SfxInterface* _pInterface : *_pInterfaces) + for (SfxInterface* _pInterface : _vInterfaces) { const SfxSlot *pDef = _pInterface->GetSlot(nId); if ( pDef ) @@ -136,17 +121,15 @@ const SfxSlot* SfxSlotPool::GetSlot( sal_uInt16 nId ) OUString SfxSlotPool::SeekGroup( sal_uInt16 nNo ) { - SAL_WARN_IF(!_pInterfaces, "sfx.control", "no Interfaces registered"); - // if the group exists, use it - if ( _pGroups && nNo < _pGroups->size() ) + if ( nNo < _vGroups.size() ) { _nCurGroup = nNo; if ( _pParentPool ) { // In most cases, the order of the IDs agree - sal_uInt16 nParentCount = _pParentPool->_pGroups->size(); - if ( nNo < nParentCount && (*_pGroups)[nNo] == (*_pParentPool->_pGroups)[nNo] ) + sal_uInt16 nParentCount = _pParentPool->_vGroups.size(); + if ( nNo < nParentCount && _vGroups[nNo] == _pParentPool->_vGroups[nNo] ) _pParentPool->_nCurGroup = nNo; else { @@ -154,13 +137,13 @@ OUString SfxSlotPool::SeekGroup( sal_uInt16 nNo ) // pool, _nCurGroup is set outside the valid range sal_uInt16 i; for ( i=1; i<nParentCount; i++ ) - if ( (*_pGroups)[nNo] == (*_pParentPool->_pGroups)[i] ) + if ( _vGroups[nNo] == _pParentPool->_vGroups[i] ) break; _pParentPool->_nCurGroup = i; } } - SfxResId aResId( (*_pGroups)[_nCurGroup] ); + SfxResId aResId( _vGroups[_nCurGroup] ); aResId.SetRT(RSC_STRING); if ( !SfxResId::GetResMgr()->IsAvailable(aResId) ) { @@ -175,9 +158,9 @@ OUString SfxSlotPool::SeekGroup( sal_uInt16 nNo ) } -sal_uInt16 SfxSlotPool::GetGroupCount() +sal_uInt16 SfxSlotPool::GetGroupCount() const { - return _pGroups->size(); + return _vGroups.size(); } @@ -185,16 +168,12 @@ sal_uInt16 SfxSlotPool::GetGroupCount() const SfxSlot* SfxSlotPool::SeekSlot( sal_uInt16 nStartInterface ) { - SAL_WARN_IF(!_pInterfaces, "sfx.control", "no Interfaces registered"); - if (!_pInterfaces) - return nullptr; - // The numbering starts at the interfaces of the parent pool - sal_uInt16 nFirstInterface = _pParentPool ? _pParentPool->_pInterfaces->size() : 0; + sal_uInt16 nFirstInterface = _pParentPool ? _pParentPool->_vInterfaces.size() : 0; // have reached the end of the Parent-Pools? if ( nStartInterface < nFirstInterface && - _pParentPool->_nCurGroup >= _pParentPool->_pGroups->size() ) + _pParentPool->_nCurGroup >= _pParentPool->_vGroups.size() ) nStartInterface = nFirstInterface; // Is the Interface still in the Parent-Pool? @@ -206,18 +185,18 @@ const SfxSlot* SfxSlotPool::SeekSlot( sal_uInt16 nStartInterface ) } // find the first func-def with the current group id - sal_uInt16 nCount = _pInterfaces->size() + nFirstInterface; + sal_uInt16 nCount = _vInterfaces.size() + nFirstInterface; for ( _nCurInterface = nStartInterface; _nCurInterface < nCount; ++_nCurInterface ) { - SfxInterface* pInterface = (*_pInterfaces)[_nCurInterface-nFirstInterface]; + SfxInterface* pInterface = _vInterfaces[_nCurInterface-nFirstInterface]; for ( _nCurMsg = 0; _nCurMsg < pInterface->Count(); ++_nCurMsg ) { const SfxSlot& rMsg = pInterface->pSlots[_nCurMsg]; - if (rMsg.GetGroupId() == _pGroups->at(_nCurGroup)) + if (rMsg.GetGroupId() == _vGroups.at(_nCurGroup)) return &rMsg; } } @@ -230,14 +209,10 @@ const SfxSlot* SfxSlotPool::SeekSlot( sal_uInt16 nStartInterface ) const SfxSlot* SfxSlotPool::NextSlot() { - SAL_WARN_IF(!_pInterfaces, "sfx.control", "no Interfaces registered"); - if (!_pInterfaces) - return nullptr; - // The numbering starts at the interfaces of the parent pool - sal_uInt16 nFirstInterface = _pParentPool ? _pParentPool->_pInterfaces->size() : 0; + sal_uInt16 nFirstInterface = _pParentPool ? _pParentPool->_vInterfaces.size() : 0; - if ( _nCurInterface < nFirstInterface && _nCurGroup >= _pParentPool->_pGroups->size() ) + if ( _nCurInterface < nFirstInterface && _nCurGroup >= _pParentPool->_vGroups.size() ) _nCurInterface = nFirstInterface; if ( _nCurInterface < nFirstInterface ) @@ -254,15 +229,15 @@ const SfxSlot* SfxSlotPool::NextSlot() sal_uInt16 nInterface = _nCurInterface - nFirstInterface; // possibly we are already at the end - if ( nInterface >= _pInterfaces->size() ) + if ( nInterface >= _vInterfaces.size() ) return nullptr; // look for further matching func-defs within the same Interface - SfxInterface* pInterface = (*_pInterfaces)[nInterface]; + SfxInterface* pInterface = _vInterfaces[nInterface]; while ( ++_nCurMsg < pInterface->Count() ) { SfxSlot& rMsg = pInterface->pSlots[_nCurMsg]; - if (rMsg.GetGroupId() == _pGroups->at(_nCurGroup)) + if (rMsg.GetGroupId() == _vGroups.at(_nCurGroup)) return &rMsg; } @@ -276,22 +251,21 @@ const SfxSlot* SfxSlotPool::NextSlot() SfxInterface* SfxSlotPool::FirstInterface() { _nCurInterface = 0; - if ( !_pInterfaces || !_pInterfaces->size() ) + if ( _vInterfaces.empty() ) return nullptr; - return _pParentPool ? _pParentPool->FirstInterface() : (*_pInterfaces)[0]; + return _pParentPool ? _pParentPool->FirstInterface() : _vInterfaces[0]; } -const SfxSlot* SfxSlotPool::GetUnoSlot( const OUString& rName ) +const SfxSlot* SfxSlotPool::GetUnoSlot( const OUString& rName ) const { const SfxSlot *pSlot = nullptr; - if (_pInterfaces) - for (auto const & nInterface: *_pInterfaces) - { - pSlot = nInterface->GetSlot( rName ); - if ( pSlot ) - break; - } + for (auto const & nInterface: _vInterfaces) + { + pSlot = nInterface->GetSlot( rName ); + if ( pSlot ) + break; + } if ( !pSlot && _pParentPool ) pSlot = _pParentPool->GetUnoSlot( rName ); |