Kaydet (Commit) 3f806959 authored tarafından Kohei Yoshida's avatar Kohei Yoshida

More on eliminating ScStrCollection.

üst cac7f1d4
...@@ -418,27 +418,29 @@ void ScSheetLinksObj::Notify( SfxBroadcaster&, const SfxHint& rHint ) ...@@ -418,27 +418,29 @@ void ScSheetLinksObj::Notify( SfxBroadcaster&, const SfxHint& rHint )
ScSheetLinkObj* ScSheetLinksObj::GetObjectByIndex_Impl(sal_Int32 nIndex) ScSheetLinkObj* ScSheetLinksObj::GetObjectByIndex_Impl(sal_Int32 nIndex)
{ {
if (pDocShell) if (!pDocShell)
{ return NULL;
sal_Int32 nCount = 0;
ScStrCollection aNames; // um doppelte wegzulassen typedef boost::unordered_set<rtl::OUString, rtl::OUStringHash> StrSetType;
StrSetType aNames;
ScDocument* pDoc = pDocShell->GetDocument(); ScDocument* pDoc = pDocShell->GetDocument();
SCTAB nTabCount = pDoc->GetTableCount(); SCTAB nTabCount = pDoc->GetTableCount();
for (SCTAB nTab=0; nTab<nTabCount; nTab++) sal_Int32 nCount = 0;
if (pDoc->IsLinked(nTab)) for (SCTAB nTab = 0; nTab < nTabCount; ++nTab)
{ {
String aLinkDoc = pDoc->GetLinkDoc( nTab ); if (!pDoc->IsLinked(nTab))
StrData* pData = new StrData(aLinkDoc); continue;
if (aNames.Insert(pData))
rtl::OUString aLinkDoc = pDoc->GetLinkDoc(nTab);
if (aNames.insert(aLinkDoc).second)
{ {
if ( nCount == nIndex ) // unique document name.
if (nCount == nIndex)
return new ScSheetLinkObj( pDocShell, aLinkDoc ); return new ScSheetLinkObj( pDocShell, aLinkDoc );
++nCount; ++nCount;
} }
else
delete pData;
}
} }
return NULL; // kein Dokument oder Index zu gross return NULL; // kein Dokument oder Index zu gross
} }
...@@ -478,23 +480,25 @@ uno::Reference<container::XEnumeration> SAL_CALL ScSheetLinksObj::createEnumerat ...@@ -478,23 +480,25 @@ uno::Reference<container::XEnumeration> SAL_CALL ScSheetLinksObj::createEnumerat
sal_Int32 SAL_CALL ScSheetLinksObj::getCount() throw(uno::RuntimeException) sal_Int32 SAL_CALL ScSheetLinksObj::getCount() throw(uno::RuntimeException)
{ {
typedef boost::unordered_set<rtl::OUString, rtl::OUStringHash> StrSetType;
SolarMutexGuard aGuard; SolarMutexGuard aGuard;
if (!pDocShell)
return 0;
sal_Int32 nCount = 0; sal_Int32 nCount = 0;
if (pDocShell)
{ StrSetType aNames;
ScStrCollection aNames; // um doppelte wegzulassen
ScDocument* pDoc = pDocShell->GetDocument(); ScDocument* pDoc = pDocShell->GetDocument();
SCTAB nTabCount = pDoc->GetTableCount(); SCTAB nTabCount = pDoc->GetTableCount();
for (SCTAB nTab=0; nTab<nTabCount; nTab++) for (SCTAB nTab = 0; nTab < nTabCount; ++nTab)
if (pDoc->IsLinked(nTab))
{ {
String aLinkDoc(pDoc->GetLinkDoc( nTab )); if (!pDoc->IsLinked(nTab))
StrData* pData = new StrData(aLinkDoc); continue;
if (aNames.Insert(pData))
rtl::OUString aLinkDoc = pDoc->GetLinkDoc(nTab);
if (aNames.insert(aLinkDoc).second)
++nCount; ++nCount;
else
delete pData;
}
} }
return nCount; return nCount;
} }
...@@ -562,36 +566,33 @@ sal_Bool SAL_CALL ScSheetLinksObj::hasByName( const rtl::OUString& aName ) ...@@ -562,36 +566,33 @@ sal_Bool SAL_CALL ScSheetLinksObj::hasByName( const rtl::OUString& aName )
uno::Sequence<rtl::OUString> SAL_CALL ScSheetLinksObj::getElementNames() throw(uno::RuntimeException) uno::Sequence<rtl::OUString> SAL_CALL ScSheetLinksObj::getElementNames() throw(uno::RuntimeException)
{ {
typedef boost::unordered_set<rtl::OUString, rtl::OUStringHash> StrSetType;
SolarMutexGuard aGuard; SolarMutexGuard aGuard;
// Name ist der Dateiname // Name ist der Dateiname
if (pDocShell) if (!pDocShell)
{ return uno::Sequence<rtl::OUString>();
ScStrCollection aNames; // um doppelte wegzulassen
StrSetType aNames;
ScDocument* pDoc = pDocShell->GetDocument(); ScDocument* pDoc = pDocShell->GetDocument();
SCTAB nTabCount = pDoc->GetTableCount(); SCTAB nTabCount = pDoc->GetTableCount();
String aName;
sal_Int32 nLinkCount = getCount(); sal_Int32 nLinkCount = getCount();
uno::Sequence<rtl::OUString> aSeq(nLinkCount); uno::Sequence<rtl::OUString> aSeq(nLinkCount);
rtl::OUString* pAry = aSeq.getArray(); rtl::OUString* pAry = aSeq.getArray();
sal_uInt16 nPos = 0; sal_uInt16 nPos = 0;
for (SCTAB nTab=0; nTab<nTabCount; nTab++) for (SCTAB nTab = 0; nTab < nTabCount; ++nTab)
{
if (pDoc->IsLinked(nTab))
{ {
String aLinkDoc(pDoc->GetLinkDoc( nTab )); if (!pDoc->IsLinked(nTab))
StrData* pData = new StrData(aLinkDoc); continue;
if (aNames.Insert(pData))
rtl::OUString aLinkDoc = pDoc->GetLinkDoc(nTab);
if (aNames.insert(aLinkDoc).second)
pAry[nPos++] = aLinkDoc; pAry[nPos++] = aLinkDoc;
else
delete pData;
}
} }
OSL_ENSURE( nPos==nLinkCount, "verzaehlt" ); OSL_ENSURE( nPos==nLinkCount, "verzaehlt" );
return aSeq; return aSeq;
}
return uno::Sequence<rtl::OUString>();
} }
//------------------------------------------------------------------------ //------------------------------------------------------------------------
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment