Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
core
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
LibreOffice
core
Commits
50cf7cae
Kaydet (Commit)
50cf7cae
authored
Tem 28, 2012
tarafından
Caolán McNamara
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
convert SfxListenerArr_Impl from SvPtrarr to std::vector
Change-Id: I7f46731d880da30dc2dda011b31818437c955f2d
üst
df9b0d2e
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
38 additions
and
70 deletions
+38
-70
brdcst.hxx
svl/inc/svl/brdcst.hxx
+15
-10
brdcst.cxx
svl/source/notify/brdcst.cxx
+18
-53
lstner.cxx
svl/source/notify/lstner.cxx
+5
-7
No files found.
svl/inc/svl/brdcst.hxx
Dosyayı görüntüle @
50cf7cae
...
...
@@ -21,25 +21,22 @@
#include "svl/svldllapi.h"
#include <tools/rtti.hxx>
#include <
svl/svarray.hxx
>
#include <
vector
>
class
SfxListener
;
class
SfxHint
;
#ifndef _SFX_BRDCST_CXX
typedef
SvPtrarr
SfxListenerArr_Impl
;
#endif
//-------------------------------------------------------------------------
class
SVL_DLLPUBLIC
SfxBroadcaster
{
friend
class
SfxListener
;
friend
class
SfxListener
;
typedef
std
::
vector
<
SfxListener
*>
SfxListenerArr_Impl
;
SfxListenerArr_Impl
aListeners
;
private
:
sal_Bool
AddListener
(
SfxListener
&
rListener
);
void
AddListener
(
SfxListener
&
rListener
);
void
RemoveListener
(
SfxListener
&
rListener
);
const
SfxBroadcaster
&
operator
=
(
const
SfxBroadcaster
&
);
// verboten
...
...
@@ -55,10 +52,18 @@ public:
virtual
~
SfxBroadcaster
();
void
Broadcast
(
const
SfxHint
&
rHint
);
sal_Bool
HasListeners
()
const
;
sal_uInt16
GetListenerCount
()
const
{
return
aListeners
.
Count
();
}
bool
HasListeners
()
const
{
return
!
aListeners
.
empty
();
}
size_t
GetListenerCount
()
const
{
return
aListeners
.
size
();
}
SfxListener
*
GetListener
(
sal_uInt16
nNo
)
const
{
return
(
SfxListener
*
)
aListeners
[
nNo
];
}
{
return
aListeners
[
nNo
];
}
};
#endif
...
...
svl/source/notify/brdcst.cxx
Dosyayı görüntüle @
50cf7cae
...
...
@@ -25,10 +25,8 @@
#include <svl/smplhint.hxx>
#include <svl/lstner.hxx>
SV_DECL_PTRARR
(
SfxListenerArr_Impl
,
SfxListener
*
,
0
)
#define _SFX_BRDCST_CXX
#include <svl/brdcst.hxx>
#include <algorithm>
//====================================================================
DBG_NAME
(
SfxBroadcaster
)
...
...
@@ -44,16 +42,11 @@ void SfxBroadcaster::Broadcast( const SfxHint &rHint )
{
DBG_CHKTHIS
(
SfxBroadcaster
,
0
);
//
is anybody to notify?
if
(
aListeners
.
Count
()
/*! || aGlobListeners.Count() */
)
//
notify all registered listeners exactly once
for
(
size_t
n
=
0
;
n
<
aListeners
.
size
();
++
n
)
{
// notify all registered listeners exactly once
for
(
sal_uInt16
n
=
0
;
n
<
aListeners
.
Count
();
++
n
)
{
SfxListener
*
pListener
=
aListeners
[
n
];
if
(
pListener
)
pListener
->
Notify
(
*
this
,
rHint
);
}
SfxListener
*
pListener
=
aListeners
[
n
];
pListener
->
Notify
(
*
this
,
rHint
);
}
}
...
...
@@ -66,11 +59,10 @@ SfxBroadcaster::~SfxBroadcaster()
Broadcast
(
SfxSimpleHint
(
SFX_HINT_DYING
)
);
// remove all still registered listeners
for
(
sal_uInt16
nPos
=
0
;
nPos
<
aListeners
.
Count
();
++
nPos
)
for
(
size_t
nPos
=
0
;
nPos
<
aListeners
.
size
();
++
nPos
)
{
SfxListener
*
pListener
=
aListeners
[
nPos
];
if
(
pListener
)
pListener
->
RemoveBroadcaster_Impl
(
*
this
);
pListener
->
RemoveBroadcaster_Impl
(
*
this
);
}
}
...
...
@@ -92,11 +84,10 @@ SfxBroadcaster::SfxBroadcaster( const SfxBroadcaster &rBC )
{
DBG_CTOR
(
SfxBroadcaster
,
0
);
for
(
sal_uInt16
n
=
0
;
n
<
rBC
.
aListeners
.
Count
();
++
n
)
for
(
size_t
n
=
0
;
n
<
rBC
.
aListeners
.
size
();
++
n
)
{
SfxListener
*
pListener
=
rBC
.
aListeners
[
n
];
if
(
pListener
)
pListener
->
StartListening
(
*
this
);
pListener
->
StartListening
(
*
this
);
}
}
...
...
@@ -104,25 +95,11 @@ SfxBroadcaster::SfxBroadcaster( const SfxBroadcaster &rBC )
// add a new SfxListener to the list
sal_Bool
SfxBroadcaster
::
AddListener
(
SfxListener
&
rListener
)
void
SfxBroadcaster
::
AddListener
(
SfxListener
&
rListener
)
{
DBG_CHKTHIS
(
SfxBroadcaster
,
0
);
const
SfxListener
*
pListener
=
&
rListener
;
const
SfxListener
*
pNull
=
0
;
sal_uInt16
nFreePos
=
aListeners
.
GetPos
(
pNull
);
if
(
nFreePos
<
aListeners
.
Count
()
)
aListeners
.
GetData
()[
nFreePos
]
=
pListener
;
else
if
(
aListeners
.
Count
()
<
(
USHRT_MAX
-
1
)
)
aListeners
.
Insert
(
pListener
,
aListeners
.
Count
()
);
else
{
OSL_FAIL
(
"array overflow"
);
return
sal_False
;
}
DBG_ASSERT
(
USHRT_MAX
!=
aListeners
.
GetPos
(
pListener
),
"AddListener failed"
);
return
sal_True
;
aListeners
.
push_back
(
&
rListener
);
}
//--------------------------------------------------------------------
...
...
@@ -140,12 +117,10 @@ void SfxBroadcaster::ListenersGone()
void
SfxBroadcaster
::
Forward
(
SfxBroadcaster
&
rBC
,
const
SfxHint
&
rHint
)
{
const
sal_uInt16
nCount
=
aListeners
.
Count
();
for
(
sal_uInt16
i
=
0
;
i
<
nCount
;
++
i
)
for
(
size_t
i
=
0
;
i
<
aListeners
.
size
();
++
i
)
{
SfxListener
*
pListener
=
aListeners
[
i
];
if
(
pListener
)
pListener
->
Notify
(
rBC
,
rHint
);
pListener
->
Notify
(
rBC
,
rHint
);
}
}
...
...
@@ -157,23 +132,13 @@ void SfxBroadcaster::RemoveListener( SfxListener& rListener )
{
{
DBG_CHKTHIS
(
SfxBroadcaster
,
0
);}
const
SfxListener
*
pListener
=
&
rListener
;
sal_uInt16
nPos
=
aListeners
.
GetPos
(
pListener
);
DBG_ASSERT
(
nPos
!=
USHRT_MAX
,
"RemoveListener: Listener unknown"
);
aListeners
.
GetData
()[
nPos
]
=
0
;
if
(
!
HasListeners
()
)
ListenersGone
();
}
//--------------------------------------------------------------------
SfxListenerArr_Impl
::
iterator
aIter
=
std
::
remove
(
aListeners
.
begin
(),
aListeners
.
end
(),
pListener
);
DBG_ASSERT
(
aIter
!=
aListeners
.
end
(),
"RemoveListener: Listener unknown"
);
aListeners
.
erase
(
aIter
,
aListeners
.
end
());
sal_Bool
SfxBroadcaster
::
HasListeners
()
const
{
for
(
sal_uInt16
n
=
0
;
n
<
aListeners
.
Count
();
++
n
)
if
(
aListeners
.
GetObject
(
n
)
!=
0
)
return
sal_True
;
return
sal_False
;
if
(
!
HasListeners
()
)
ListenersGone
();
}
//--------------------------------------------------------------------
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
svl/source/notify/lstner.cxx
Dosyayı görüntüle @
50cf7cae
...
...
@@ -85,15 +85,13 @@ sal_Bool SfxListener::StartListening( SfxBroadcaster& rBroadcaster, sal_Bool bPr
if
(
!
bPreventDups
||
!
IsListening
(
rBroadcaster
)
)
{
if
(
rBroadcaster
.
AddListener
(
*
this
)
)
{
aBCs
.
push_back
(
&
rBroadcaster
);
DBG_ASSERT
(
IsListening
(
rBroadcaster
),
"StartListening failed"
);
return
sal_True
;
}
rBroadcaster
.
AddListener
(
*
this
);
aBCs
.
push_back
(
&
rBroadcaster
);
DBG_ASSERT
(
IsListening
(
rBroadcaster
),
"StartListening failed"
);
return
sal_True
;
}
return
sal_False
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment