24#include <unordered_set>
30#include <document.hxx>
35struct BroadcasterState;
122typedef std::unordered_set< ScBroadcastAreaEntry, ScBroadcastAreaHash, ScBroadcastAreaEqual >
ScBroadcastAreas;
128 return reinterpret_cast<size_t>(
p);
181 return rIter->mbErasure;
235 void EraseArea( ScBroadcastAreas::iterator& rIter );
238 const ScRange& rRange, std::vector<sc::AreaListener>& rListeners,
275 std::unique_ptr<ScBroadcastAreaSlot*[]>
ppSlots;
283 typedef ::std::vector< ::std::pair< ScBroadcastAreaSlot*, ScBroadcastAreas::iterator > >
AreasToBeErased;
324 SCSIZE& nRowBreak )
const;
362 ScBroadcastAreas::iterator& rIter );
size_t SCSIZE
size_t typedef to be able to find places where code was changed from USHORT to size_t and is used to ...
std::unordered_set< const ScBroadcastArea *, ScBroadcastAreaBulkHash, ScBroadcastAreaBulkEqual > ScBroadcastAreasBulk
std::unordered_set< ScBroadcastAreaEntry, ScBroadcastAreaHash, ScBroadcastAreaEqual > ScBroadcastAreas
Slot offset arrangement of columns and rows, once per sheet.
TableSlots(SCSIZE nBcaSlots)
ScBroadcastAreaSlot ** getSlots() const
std::unique_ptr< ScBroadcastAreaSlot *[]> ppSlots
TableSlots(const TableSlots &)=delete
TableSlots & operator=(const TableSlots &)=delete
BroadcastAreaSlots and their management, once per document.
bool BulkBroadcastGroupAreas(SfxHintId nHintId)
ScBroadcastAreaSlotMachine(ScDocument *pDoc)
void ComputeAreaPoints(const ScRange &rRange, SCSIZE &nStart, SCSIZE &nEnd, SCSIZE &nRowBreak) const
BulkGroupAreasType m_BulkGroupAreas
AreasToBeErased maAreasToBeErased
void FinallyEraseAreas(ScBroadcastAreaSlot *pSlot)
void LeaveBulkBroadcast(SfxHintId nHintId)
ScBroadcastArea * GetEOUpdateChain() const
std::unique_ptr< SvtBroadcaster > pBCAlways
void SetEOUpdateChain(ScBroadcastArea *p)
std::vector< sc::AreaListener > GetAllListeners(const ScRange &rRange, sc::AreaOverlapType eType, sc::ListenerGroupType eGroup=sc::ListenerGroupType::Both)
TableSlotsMap aTableSlotsMap
bool IsInBulkBroadcast() const
ScSlotDistribution maSlotDistribution
void StartListeningArea(const ScRange &rRange, bool bGroupListening, SvtListener *pListener)
ScBroadcastAreasBulk aBulkBroadcastAreas
void UpdateBroadcastAreas(UpdateRefMode eUpdateRefMode, const ScRange &rRange, SCCOL nDx, SCROW nDy, SCTAB nDz)
::std::map< SCTAB, TableSlots > TableSlotsMap
void EndListeningArea(const ScRange &rRange, bool bGroupListening, SvtListener *pListener)
bool InsertBulkArea(const ScBroadcastArea *p)
size_t RemoveBulkArea(const ScBroadcastArea *p)
::std::vector< ScSlotData > ScSlotDistribution
void CollectBroadcasterState(sc::BroadcasterState &rState) const
void DelBroadcastAreasInRange(const ScRange &rRange)
ScBroadcastArea * pEOUpdateChain
ScBroadcastArea * pUpdateChain
std::map< ScBroadcastArea *, sc::ColumnSpanSet > BulkGroupAreasType
bool AreaBroadcast(const ScRange &rRange, SfxHintId nHint)
::std::vector< ::std::pair< ScBroadcastAreaSlot *, ScBroadcastAreas::iterator > > AreasToBeErased
void EnterBulkBroadcast()
sal_uInt32 nInBulkBroadcast
void RemoveBulkGroupArea(ScBroadcastArea *pArea)
void SetUpdateChain(ScBroadcastArea *p)
void PushAreaToBeErased(ScBroadcastAreaSlot *pSlot, ScBroadcastAreas::iterator &rIter)
void InsertBulkGroupArea(ScBroadcastArea *pArea, const ScRange &rRange)
SCSIZE ComputeSlotOffset(const ScAddress &rAddress) const
~ScBroadcastAreaSlotMachine()
Collection of BroadcastAreas.
ScBroadcastAreas::iterator FindBroadcastArea(const ScRange &rRange, bool bGroupListening)
bool IsInBroadcastIteration() const
void CollectBroadcasterState(sc::BroadcasterState &rState) const
void UpdateRemove(UpdateRefMode eUpdateRefMode, const ScRange &rRange, SCCOL nDx, SCROW nDy, SCTAB nDz)
bool mbInBroadcastIteration
ScBroadcastArea aTmpSeekBroadcastArea
ScBroadcastAreas aBroadcastAreaTbl
void FinallyEraseAreas()
Finally erase all areas pushed as to-be-erased.
bool AreaBroadcast(const ScRange &rRange, SfxHintId nHint)
static bool isMarkedErased(const ScBroadcastAreas::const_iterator &rIter)
void UpdateRemoveArea(ScBroadcastArea *pArea)
ScBroadcastAreaSlot(ScDocument *pDoc, ScBroadcastAreaSlotMachine *pBASM)
void DelBroadcastAreasInRange(const ScRange &rRange)
bool StartListeningArea(const ScRange &rRange, bool bGroupListening, SvtListener *pListener, ScBroadcastArea *&rpArea)
Only here new ScBroadcastArea objects are created, prevention of dupes.
void InsertListeningArea(ScBroadcastArea *pArea)
Insert a ScBroadcastArea obtained via StartListeningArea() to subsequent slots.
ScBroadcastAreaSlotMachine * pBASM
void EraseArea(ScBroadcastAreas::iterator &rIter)
Erase an area from set and delete it if last reference, or if mbInBroadcastIteration is set push it t...
ScDocument::HardRecalcState CheckHardRecalcStateCondition() const
More hypothetical (memory would probably be doomed anyway) check whether there would be an overflow w...
void UpdateInsert(ScBroadcastArea *pArea)
bool mbHasErasedArea
If true, the slot has at least one area broadcaster marked for removal.
void EndListeningArea(const ScRange &rRange, bool bGroupListening, SvtListener *pListener, ScBroadcastArea *&rpArea)
void GetAllListeners(const ScRange &rRange, std::vector< sc::AreaListener > &rListeners, sc::AreaOverlapType eType, sc::ListenerGroupType eGroup)
Used in a Unique Associative Container.
ScBroadcastArea * GetUpdateChainNext() const
const ScRange & GetRange() const
bool IsInUpdateChain() const
const SvtBroadcaster & GetBroadcaster() const
const ScBroadcastArea & operator=(const ScBroadcastArea &)=delete
ScBroadcastArea(const ScBroadcastArea &)=delete
void SetGroupListening(bool b)
ScBroadcastArea * pUpdateChainNext
void UpdateRange(const ScRange &rNewRange)
void SetInUpdateChain(bool b)
bool operator==(const ScBroadcastArea &rArea) const
Equalness of this or range.
void SetUpdateChainNext(ScBroadcastArea *p)
SvtBroadcaster aBroadcaster
bool IsGroupListening() const
SvtBroadcaster & GetBroadcaster()
ScBulkBroadcast & operator=(ScBulkBroadcast const &)=delete
ScBulkBroadcast(ScBulkBroadcast &&)=delete
ScBroadcastAreaSlotMachine * pBASM
ScBulkBroadcast(ScBroadcastAreaSlotMachine *p, SfxHintId nHintId)
ScBulkBroadcast(ScBulkBroadcast const &)=delete
~ScBulkBroadcast() COVERITY_NOEXCEPT_FALSE
size_t hashArea() const
Hash 2D area ignoring table number.
CAUTION! The following defines must be in the same namespace as the respective type.
bool operator()(const ScBroadcastArea *p1, const ScBroadcastArea *p2) const
size_t operator()(const ScBroadcastArea *p) const
ScBroadcastAreaEntry(ScBroadcastArea *p)
bool mbErasure
TRUE if marked for erasure in this set.
bool operator()(const ScBroadcastAreaEntry &rEntry1, const ScBroadcastAreaEntry &rEntry2) const
size_t operator()(const ScBroadcastAreaEntry &rEntry) const
ScSlotData(SCROW r1, SCROW r2, SCSIZE sr, SCSIZE cr, SCCOL c1, SCCOL c2, SCSIZE sc, SCSIZE cc)