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
aa3babb4
Kaydet (Commit)
aa3babb4
authored
Agu 14, 2014
tarafından
Kohei Yoshida
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
Use boost::intrusive_ptr in lieu of manual ref-counting.
Change-Id: I0a29a1e490f5aa52a9057be71164573e403affe9
üst
af246f94
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
57 additions
and
69 deletions
+57
-69
outlobj.cxx
editeng/source/outliner/outlobj.cxx
+57
-69
No files found.
editeng/source/outliner/outlobj.cxx
Dosyayı görüntüle @
aa3babb4
...
@@ -32,24 +32,25 @@
...
@@ -32,24 +32,25 @@
#include <vcl/bitmap.hxx>
#include <vcl/bitmap.hxx>
#include <tools/stream.hxx>
#include <tools/stream.hxx>
#include <boost/intrusive_ptr.hpp>
/**
/**
* This is the guts of OutlinerParaObject, refcounted and shared among
* This is the guts of OutlinerParaObject, refcounted and shared among
* multiple instances of OutlinerParaObject.
* multiple instances of OutlinerParaObject.
*/
*/
class
OutlinerParaObjData
struct
OutlinerParaObjData
{
{
public
:
// data members
// data members
EditTextObject
*
mpEditTextObject
;
EditTextObject
*
mpEditTextObject
;
ParagraphDataVector
maParagraphDataVector
;
ParagraphDataVector
maParagraphDataVector
;
bool
mbIsEditDoc
;
bool
mbIsEditDoc
;
// refcounter
// refcounter
sal_uInt32
mnRefCount
;
mutable
size_t
mnRefCount
;
// constuctor
// constuctor
OutlinerParaObjData
(
EditTextObject
*
pEditTextObject
,
const
ParagraphDataVector
&
rParagraphDataVector
,
bool
bIsEditDoc
)
OutlinerParaObjData
(
EditTextObject
*
pEditTextObject
,
const
ParagraphDataVector
&
rParagraphDataVector
,
bool
bIsEditDoc
)
:
:
mpEditTextObject
(
pEditTextObject
),
mpEditTextObject
(
pEditTextObject
),
maParagraphDataVector
(
rParagraphDataVector
),
maParagraphDataVector
(
rParagraphDataVector
),
mbIsEditDoc
(
bIsEditDoc
),
mbIsEditDoc
(
bIsEditDoc
),
mnRefCount
(
0
)
mnRefCount
(
0
)
...
@@ -58,6 +59,11 @@ public:
...
@@ -58,6 +59,11 @@ public:
maParagraphDataVector
.
resize
(
pEditTextObject
->
GetParagraphCount
());
maParagraphDataVector
.
resize
(
pEditTextObject
->
GetParagraphCount
());
}
}
OutlinerParaObjData
(
const
OutlinerParaObjData
&
r
)
:
mpEditTextObject
(
r
.
mpEditTextObject
->
Clone
()),
maParagraphDataVector
(
r
.
maParagraphDataVector
),
mbIsEditDoc
(
r
.
mbIsEditDoc
)
{}
// destructor
// destructor
~
OutlinerParaObjData
()
~
OutlinerParaObjData
()
{
{
...
@@ -78,41 +84,37 @@ public:
...
@@ -78,41 +84,37 @@ public:
}
}
};
};
inline
void
intrusive_ptr_add_ref
(
const
OutlinerParaObjData
*
p
)
{
++
p
->
mnRefCount
;
}
inline
void
intrusive_ptr_release
(
const
OutlinerParaObjData
*
p
)
{
--
p
->
mnRefCount
;
if
(
!
p
->
mnRefCount
)
delete
p
;
}
struct
OutlinerParaObject
::
Impl
struct
OutlinerParaObject
::
Impl
{
{
OutlinerParaObjData
*
mpData
;
typedef
boost
::
intrusive_ptr
<
OutlinerParaObjData
>
DataRef
;
DataRef
mxData
;
Impl
(
const
EditTextObject
&
rTextObj
,
const
ParagraphDataVector
&
rParaData
,
bool
bIsEditDoc
)
:
Impl
(
const
EditTextObject
&
rTextObj
,
const
ParagraphDataVector
&
rParaData
,
bool
bIsEditDoc
)
:
m
p
Data
(
new
OutlinerParaObjData
(
rTextObj
.
Clone
(),
rParaData
,
bIsEditDoc
))
{}
m
x
Data
(
new
OutlinerParaObjData
(
rTextObj
.
Clone
(),
rParaData
,
bIsEditDoc
))
{}
Impl
(
const
EditTextObject
&
rTextObj
)
:
Impl
(
const
EditTextObject
&
rTextObj
)
:
m
p
Data
(
new
OutlinerParaObjData
(
rTextObj
.
Clone
(),
ParagraphDataVector
(),
true
))
{}
m
x
Data
(
new
OutlinerParaObjData
(
rTextObj
.
Clone
(),
ParagraphDataVector
(),
true
))
{}
Impl
(
const
Impl
&
r
)
:
mpData
(
r
.
mpData
)
Impl
(
const
Impl
&
r
)
:
mxData
(
r
.
mxData
)
{}
{
mpData
->
mnRefCount
++
;
}
~
Impl
()
~
Impl
()
{}
{
if
(
mpData
->
mnRefCount
)
mpData
->
mnRefCount
--
;
else
delete
mpData
;
}
};
};
void
OutlinerParaObject
::
ImplMakeUnique
()
void
OutlinerParaObject
::
ImplMakeUnique
()
{
{
if
(
mpImpl
->
mpData
->
mnRefCount
)
mpImpl
->
mxData
.
reset
(
new
OutlinerParaObjData
(
*
mpImpl
->
mxData
));
{
OutlinerParaObjData
*
pNew
=
new
OutlinerParaObjData
(
mpImpl
->
mpData
->
mpEditTextObject
->
Clone
(),
mpImpl
->
mpData
->
maParagraphDataVector
,
mpImpl
->
mpData
->
mbIsEditDoc
);
mpImpl
->
mpData
->
mnRefCount
--
;
mpImpl
->
mpData
=
pNew
;
}
}
}
OutlinerParaObject
::
OutlinerParaObject
(
OutlinerParaObject
::
OutlinerParaObject
(
...
@@ -124,86 +126,72 @@ OutlinerParaObject::OutlinerParaObject( const EditTextObject& rTextObj ) :
...
@@ -124,86 +126,72 @@ OutlinerParaObject::OutlinerParaObject( const EditTextObject& rTextObj ) :
{
{
}
}
OutlinerParaObject
::
OutlinerParaObject
(
const
OutlinerParaObject
&
rCandidate
)
:
OutlinerParaObject
::
OutlinerParaObject
(
const
OutlinerParaObject
&
r
)
:
mpImpl
(
new
Impl
(
*
r
Candidate
.
mpImpl
))
{}
mpImpl
(
new
Impl
(
*
r
.
mpImpl
))
{}
OutlinerParaObject
::~
OutlinerParaObject
()
OutlinerParaObject
::~
OutlinerParaObject
()
{
{
delete
mpImpl
;
delete
mpImpl
;
}
}
OutlinerParaObject
&
OutlinerParaObject
::
operator
=
(
const
OutlinerParaObject
&
rCandidate
)
OutlinerParaObject
&
OutlinerParaObject
::
operator
=
(
const
OutlinerParaObject
&
r
)
{
{
if
(
rCandidate
.
mpImpl
->
mpData
!=
mpImpl
->
mpData
)
mpImpl
->
mxData
=
r
.
mpImpl
->
mxData
;
{
if
(
mpImpl
->
mpData
->
mnRefCount
)
{
mpImpl
->
mpData
->
mnRefCount
--
;
}
else
{
delete
mpImpl
->
mpData
;
}
mpImpl
->
mpData
=
rCandidate
.
mpImpl
->
mpData
;
mpImpl
->
mpData
->
mnRefCount
++
;
}
return
*
this
;
return
*
this
;
}
}
bool
OutlinerParaObject
::
operator
==
(
const
OutlinerParaObject
&
rCandidate
)
const
bool
OutlinerParaObject
::
operator
==
(
const
OutlinerParaObject
&
r
)
const
{
{
if
(
r
Candidate
.
mpImpl
->
mpData
==
mpImpl
->
mpData
)
if
(
r
.
mpImpl
->
mxData
.
get
()
==
mpImpl
->
mxData
.
get
()
)
{
{
return
true
;
return
true
;
}
}
return
(
*
r
Candidate
.
mpImpl
->
mpData
==
*
mpImpl
->
mp
Data
);
return
(
*
r
.
mpImpl
->
mxData
==
*
mpImpl
->
mx
Data
);
}
}
// #i102062#
// #i102062#
bool
OutlinerParaObject
::
isWrongListEqual
(
const
OutlinerParaObject
&
rCompare
)
const
bool
OutlinerParaObject
::
isWrongListEqual
(
const
OutlinerParaObject
&
r
)
const
{
{
if
(
r
Compare
.
mpImpl
->
mpData
==
mpImpl
->
mpData
)
if
(
r
.
mpImpl
->
mxData
.
get
()
==
mpImpl
->
mxData
.
get
()
)
{
{
return
true
;
return
true
;
}
}
return
mpImpl
->
m
pData
->
isWrongListEqual
(
*
rCompare
.
mpImpl
->
mp
Data
);
return
mpImpl
->
m
xData
->
isWrongListEqual
(
*
r
.
mpImpl
->
mx
Data
);
}
}
sal_uInt16
OutlinerParaObject
::
GetOutlinerMode
()
const
sal_uInt16
OutlinerParaObject
::
GetOutlinerMode
()
const
{
{
return
mpImpl
->
m
p
Data
->
mpEditTextObject
->
GetUserType
();
return
mpImpl
->
m
x
Data
->
mpEditTextObject
->
GetUserType
();
}
}
void
OutlinerParaObject
::
SetOutlinerMode
(
sal_uInt16
nNew
)
void
OutlinerParaObject
::
SetOutlinerMode
(
sal_uInt16
nNew
)
{
{
if
(
mpImpl
->
m
p
Data
->
mpEditTextObject
->
GetUserType
()
!=
nNew
)
if
(
mpImpl
->
m
x
Data
->
mpEditTextObject
->
GetUserType
()
!=
nNew
)
{
{
ImplMakeUnique
();
ImplMakeUnique
();
mpImpl
->
m
p
Data
->
mpEditTextObject
->
SetUserType
(
nNew
);
mpImpl
->
m
x
Data
->
mpEditTextObject
->
SetUserType
(
nNew
);
}
}
}
}
bool
OutlinerParaObject
::
IsVertical
()
const
bool
OutlinerParaObject
::
IsVertical
()
const
{
{
return
mpImpl
->
m
p
Data
->
mpEditTextObject
->
IsVertical
();
return
mpImpl
->
m
x
Data
->
mpEditTextObject
->
IsVertical
();
}
}
void
OutlinerParaObject
::
SetVertical
(
bool
bNew
)
void
OutlinerParaObject
::
SetVertical
(
bool
bNew
)
{
{
if
((
bool
)
mpImpl
->
mp
Data
->
mpEditTextObject
->
IsVertical
()
!=
bNew
)
if
(
mpImpl
->
mx
Data
->
mpEditTextObject
->
IsVertical
()
!=
bNew
)
{
{
ImplMakeUnique
();
ImplMakeUnique
();
mpImpl
->
m
p
Data
->
mpEditTextObject
->
SetVertical
(
bNew
);
mpImpl
->
m
x
Data
->
mpEditTextObject
->
SetVertical
(
bNew
);
}
}
}
}
sal_Int32
OutlinerParaObject
::
Count
()
const
sal_Int32
OutlinerParaObject
::
Count
()
const
{
{
size_t
nSize
=
mpImpl
->
m
p
Data
->
maParagraphDataVector
.
size
();
size_t
nSize
=
mpImpl
->
m
x
Data
->
maParagraphDataVector
.
size
();
if
(
nSize
>
EE_PARA_MAX_COUNT
)
if
(
nSize
>
EE_PARA_MAX_COUNT
)
{
{
SAL_WARN
(
"editeng"
,
"OutlinerParaObject::Count - overflow "
<<
nSize
);
SAL_WARN
(
"editeng"
,
"OutlinerParaObject::Count - overflow "
<<
nSize
);
...
@@ -214,9 +202,9 @@ sal_Int32 OutlinerParaObject::Count() const
...
@@ -214,9 +202,9 @@ sal_Int32 OutlinerParaObject::Count() const
sal_Int16
OutlinerParaObject
::
GetDepth
(
sal_Int32
nPara
)
const
sal_Int16
OutlinerParaObject
::
GetDepth
(
sal_Int32
nPara
)
const
{
{
if
(
0
<=
nPara
&&
static_cast
<
size_t
>
(
nPara
)
<
mpImpl
->
m
p
Data
->
maParagraphDataVector
.
size
())
if
(
0
<=
nPara
&&
static_cast
<
size_t
>
(
nPara
)
<
mpImpl
->
m
x
Data
->
maParagraphDataVector
.
size
())
{
{
return
mpImpl
->
m
p
Data
->
maParagraphDataVector
[
nPara
].
getDepth
();
return
mpImpl
->
m
x
Data
->
maParagraphDataVector
[
nPara
].
getDepth
();
}
}
else
else
{
{
...
@@ -226,19 +214,19 @@ sal_Int16 OutlinerParaObject::GetDepth(sal_Int32 nPara) const
...
@@ -226,19 +214,19 @@ sal_Int16 OutlinerParaObject::GetDepth(sal_Int32 nPara) const
const
EditTextObject
&
OutlinerParaObject
::
GetTextObject
()
const
const
EditTextObject
&
OutlinerParaObject
::
GetTextObject
()
const
{
{
return
*
mpImpl
->
m
p
Data
->
mpEditTextObject
;
return
*
mpImpl
->
m
x
Data
->
mpEditTextObject
;
}
}
bool
OutlinerParaObject
::
IsEditDoc
()
const
bool
OutlinerParaObject
::
IsEditDoc
()
const
{
{
return
mpImpl
->
m
p
Data
->
mbIsEditDoc
;
return
mpImpl
->
m
x
Data
->
mbIsEditDoc
;
}
}
const
ParagraphData
&
OutlinerParaObject
::
GetParagraphData
(
sal_Int32
nIndex
)
const
const
ParagraphData
&
OutlinerParaObject
::
GetParagraphData
(
sal_Int32
nIndex
)
const
{
{
if
(
0
<=
nIndex
&&
static_cast
<
size_t
>
(
nIndex
)
<
mpImpl
->
m
p
Data
->
maParagraphDataVector
.
size
())
if
(
0
<=
nIndex
&&
static_cast
<
size_t
>
(
nIndex
)
<
mpImpl
->
m
x
Data
->
maParagraphDataVector
.
size
())
{
{
return
mpImpl
->
m
p
Data
->
maParagraphDataVector
[
nIndex
];
return
mpImpl
->
m
x
Data
->
maParagraphDataVector
[
nIndex
];
}
}
else
else
{
{
...
@@ -251,21 +239,21 @@ const ParagraphData& OutlinerParaObject::GetParagraphData(sal_Int32 nIndex) cons
...
@@ -251,21 +239,21 @@ const ParagraphData& OutlinerParaObject::GetParagraphData(sal_Int32 nIndex) cons
void
OutlinerParaObject
::
ClearPortionInfo
()
void
OutlinerParaObject
::
ClearPortionInfo
()
{
{
ImplMakeUnique
();
ImplMakeUnique
();
mpImpl
->
m
p
Data
->
mpEditTextObject
->
ClearPortionInfo
();
mpImpl
->
m
x
Data
->
mpEditTextObject
->
ClearPortionInfo
();
}
}
bool
OutlinerParaObject
::
ChangeStyleSheets
(
const
OUString
&
rOldName
,
bool
OutlinerParaObject
::
ChangeStyleSheets
(
const
OUString
&
rOldName
,
SfxStyleFamily
eOldFamily
,
const
OUString
&
rNewName
,
SfxStyleFamily
eNewFamily
)
SfxStyleFamily
eOldFamily
,
const
OUString
&
rNewName
,
SfxStyleFamily
eNewFamily
)
{
{
ImplMakeUnique
();
ImplMakeUnique
();
return
mpImpl
->
m
p
Data
->
mpEditTextObject
->
ChangeStyleSheets
(
rOldName
,
eOldFamily
,
rNewName
,
eNewFamily
);
return
mpImpl
->
m
x
Data
->
mpEditTextObject
->
ChangeStyleSheets
(
rOldName
,
eOldFamily
,
rNewName
,
eNewFamily
);
}
}
void
OutlinerParaObject
::
ChangeStyleSheetName
(
SfxStyleFamily
eFamily
,
void
OutlinerParaObject
::
ChangeStyleSheetName
(
SfxStyleFamily
eFamily
,
const
OUString
&
rOldName
,
const
OUString
&
rNewName
)
const
OUString
&
rOldName
,
const
OUString
&
rNewName
)
{
{
ImplMakeUnique
();
ImplMakeUnique
();
mpImpl
->
m
p
Data
->
mpEditTextObject
->
ChangeStyleSheetName
(
eFamily
,
rOldName
,
rNewName
);
mpImpl
->
m
x
Data
->
mpEditTextObject
->
ChangeStyleSheetName
(
eFamily
,
rOldName
,
rNewName
);
}
}
void
OutlinerParaObject
::
SetStyleSheets
(
sal_uInt16
nLevel
,
const
OUString
&
rNewName
,
void
OutlinerParaObject
::
SetStyleSheets
(
sal_uInt16
nLevel
,
const
OUString
&
rNewName
,
...
@@ -282,7 +270,7 @@ void OutlinerParaObject::SetStyleSheets(sal_uInt16 nLevel, const OUString& rNewN
...
@@ -282,7 +270,7 @@ void OutlinerParaObject::SetStyleSheets(sal_uInt16 nLevel, const OUString& rNewN
{
{
if
(
GetDepth
(
--
nDecrementer
)
==
nLevel
)
if
(
GetDepth
(
--
nDecrementer
)
==
nLevel
)
{
{
mpImpl
->
m
p
Data
->
mpEditTextObject
->
SetStyleSheet
(
nDecrementer
,
rNewName
,
rNewFamily
);
mpImpl
->
m
x
Data
->
mpEditTextObject
->
SetStyleSheet
(
nDecrementer
,
rNewName
,
rNewFamily
);
}
}
}
}
}
}
...
...
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