Kaydet (Commit) 5fb7f222 authored tarafından Stephan Bergmann's avatar Stephan Bergmann

Revert "make ClientIteratorBase only know about WriterListener"

This reverts commit 0bf4e6e2,
~SwFmt in sw/source/core/attr/format.cxx contains

  SwClient* pDepend = (SwClient*)GetDepends();
  ...

that is unclear to me how to adapt to this commit's changes.
üst 808e3553
......@@ -98,7 +98,6 @@ class SW_DLLPUBLIC SwClient : ::sw::WriterListener
// avoids making the details of the linked list and the callback method public
friend class SwModify;
friend class sw::ClientIteratorBase;
template<typename E, typename S> friend class SwIterator;
SwModify *pRegisteredIn; ///< event source
......@@ -193,7 +192,7 @@ public:
void Add(SwClient *pDepend);
SwClient* Remove(SwClient *pDepend);
const sw::WriterListener* GetDepends() const { return pRoot; }
const SwClient* GetDepends() const { return static_cast<SwClient*>(pRoot); }
// get information about attribute
virtual bool GetInfo( SfxPoolItem& ) const SAL_OVERRIDE;
......@@ -251,11 +250,11 @@ namespace sw
protected:
const SwModify& m_rRoot;
// the current object in an iteration
WriterListener* m_pCurrent;
SwClient* m_pCurrent;
// in case the current object is already removed, the next object in the list
// is marked down to become the current object in the next step
// this is necessary because iteration requires access to members of the current object
WriterListener* m_pPosition;
SwClient* m_pPosition;
static SW_DLLPUBLIC ClientIteratorBase* our_pClientIters;
ClientIteratorBase( const SwModify& rModify )
......@@ -263,15 +262,15 @@ namespace sw
{
MoveTo(our_pClientIters);
our_pClientIters = this;
m_pCurrent = m_pPosition = const_cast<WriterListener*>(m_rRoot.GetDepends());
m_pCurrent = m_pPosition = const_cast<SwClient*>(m_rRoot.GetDepends());
}
WriterListener* GetLeftOfPos() { return m_pPosition->m_pLeft; }
WriterListener* GetRightOfPos() { return m_pPosition->m_pRight; }
WriterListener* GoStart()
SwClient* GetLeftOfPos() { return static_cast<SwClient*>(m_pPosition->m_pLeft); }
SwClient* GetRightOfPos() { return static_cast<SwClient*>(m_pPosition->m_pRight); }
SwClient* GoStart()
{
if((m_pPosition = const_cast<WriterListener*>(m_rRoot.GetDepends())))
if((m_pPosition = const_cast<SwClient*>(m_rRoot.GetDepends())))
while( m_pPosition->m_pLeft )
m_pPosition = m_pPosition->m_pLeft;
m_pPosition = static_cast<SwClient*>(m_pPosition->m_pLeft);
return m_pCurrent = m_pPosition;
}
~ClientIteratorBase() SAL_OVERRIDE
......@@ -286,7 +285,7 @@ namespace sw
// SwModify::Add() asserts this
bool IsChanged() const { return m_pPosition != m_pCurrent; }
// ensures the iterator to point at a current client
WriterListener* Sync() { return m_pCurrent = m_pPosition; }
SwClient* Sync() { return m_pCurrent = m_pPosition; }
};
}
......@@ -307,29 +306,29 @@ public:
TElementType* Last()
{
if(!m_pPosition)
m_pPosition = const_cast<sw::WriterListener*>(m_rRoot.GetDepends());
m_pPosition = const_cast<SwClient*>(m_rRoot.GetDepends());
if(!m_pPosition)
return PTR_CAST(TElementType,static_cast<SwClient*>(Sync()));
return PTR_CAST(TElementType,Sync());
while(GetRightOfPos())
m_pPosition = GetRightOfPos();
if(static_cast<SwClient*>(m_pPosition)->IsA(TYPE(TElementType)))
return PTR_CAST(TElementType,static_cast<SwClient*>(Sync()));
if(m_pPosition->IsA(TYPE(TElementType)))
return PTR_CAST(TElementType,Sync());
return Previous();
}
TElementType* Next()
{
if(!IsChanged())
m_pPosition = GetRightOfPos();
while(m_pPosition && !static_cast<SwClient*>(m_pPosition)->IsA( TYPE(TElementType) ) )
while(m_pPosition && !m_pPosition->IsA( TYPE(TElementType) ) )
m_pPosition = GetRightOfPos();
return PTR_CAST(TElementType,static_cast<SwClient*>(Sync()));
return PTR_CAST(TElementType,Sync());
}
TElementType* Previous()
{
m_pPosition = GetLeftOfPos();
while(m_pPosition && !static_cast<SwClient*>(m_pPosition)->IsA( TYPE(TElementType) ) )
while(m_pPosition && !m_pPosition->IsA( TYPE(TElementType) ) )
m_pPosition = GetLeftOfPos();
return PTR_CAST(TElementType,static_cast<SwClient*>(Sync()));
return PTR_CAST(TElementType,Sync());
}
using sw::ClientIteratorBase::IsChanged;
};
......@@ -340,27 +339,27 @@ template< typename TSource > class SwIterator<SwClient, TSource> SAL_FINAL : pri
public:
SwIterator( const TSource& rSrc ) : sw::ClientIteratorBase(rSrc) {}
SwClient* First()
{ return static_cast<SwClient*>(GoStart()); }
{ return GoStart(); }
SwClient* Last()
{
if(!m_pPosition)
m_pPosition = const_cast<sw::WriterListener*>(m_rRoot.GetDepends());
m_pPosition = const_cast<SwClient*>(m_rRoot.GetDepends());
if(!m_pPosition)
return m_pCurrent = nullptr;
while(GetRightOfPos())
m_pPosition = GetRightOfPos();
return static_cast<SwClient*>(Sync());
return Sync();
}
SwClient* Next()
{
if(!IsChanged())
m_pPosition = GetRightOfPos();
return static_cast<SwClient*>(Sync());
return Sync();
}
SwClient* Previous()
{
m_pPosition = GetLeftOfPos();
return static_cast<SwClient*>(Sync());
return Sync();
}
using sw::ClientIteratorBase::IsChanged;
};
......
......@@ -528,7 +528,7 @@ sal_uLong SwSetExpFieldType::GetSeqFormat()
if( !GetDepends() )
return SVX_NUM_ARABIC;
const SwField *pFld = SwIterator<SwFmtFld,SwSetExpFieldType>(*this).First()->GetField();
const SwField *pFld = static_cast<const SwFmtFld*>(GetDepends())->GetField();
return pFld->GetFormat();
}
......
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