Version: 8.3.0
Main Page
Related Pages
Namespaces
Classes
Files
File List
File Members
SALOME GUI Developer
Todo List
Namespaces
Classes
Files
File List
idl
src
CAF
CAM
CASCatch
DDS
Event
GLViewer
GraphicsView
GuiHelpers
HelpBrowser
ImageComposer
LightApp
LogWindow
ObjBrowser
OBJECT
OCCViewer
OpenGLUtils
Plot2d
Prs
PVServerService
PVViewer
PyViewer
QDS
Qtx
QxScene
SALOME_PY
SALOME_PYQT
SALOME_SWIG
SalomeApp
Session
SOCC
SPlot2d
STD
Style
SUIT
SUIT.h
SUIT_Accel.cxx
SUIT_Accel.h
SUIT_ActionOperation.cxx
SUIT_ActionOperation.h
SUIT_Application.cxx
SUIT_Application.h
SUIT_CameraProperties.cxx
SUIT_CameraProperties.h
SUIT_DataBrowser.cxx
SUIT_DataBrowser.h
SUIT_DataObject.cxx
SUIT_DataObject.h
SUIT_DataObjectIterator.cxx
SUIT_DataObjectIterator.h
SUIT_DataObjectKey.cxx
SUIT_DataObjectKey.h
SUIT_DataOwner.cxx
SUIT_DataOwner.h
SUIT_Desktop.cxx
SUIT_Desktop.h
SUIT_ExceptionHandler.cxx
SUIT_ExceptionHandler.h
SUIT_FileDlg.cxx
SUIT_FileDlg.h
SUIT_FileValidator.cxx
SUIT_FileValidator.h
SUIT_LicenseDlg.cxx
SUIT_LicenseDlg.h
SUIT_MessageBox.cxx
SUIT_MessageBox.h
SUIT_Operation.cxx
SUIT_Operation.h
SUIT_OverrideCursor.cxx
SUIT_OverrideCursor.h
SUIT_PopupClient.cxx
SUIT_PopupClient.h
SUIT_PreferenceMgr.cxx
SUIT_PreferenceMgr.h
SUIT_ResourceMgr.cxx
SUIT_ResourceMgr.h
SUIT_SelectionFilter.cxx
SUIT_SelectionFilter.h
SUIT_SelectionMgr.cxx
SUIT_SelectionMgr.h
SUIT_Selector.cxx
SUIT_Selector.h
SUIT_Session.cxx
SUIT_Session.h
SUIT_ShortcutMgr.cxx
SUIT_ShortcutMgr.h
SUIT_SmartPtr.h
SUIT_Study.cxx
SUIT_Study.h
SUIT_Tools.cxx
SUIT_Tools.h
SUIT_TreeModel.cxx
SUIT_TreeModel.h
SUIT_TreeSync.h
SUIT_ViewManager.cxx
SUIT_ViewManager.h
SUIT_ViewModel.cxx
SUIT_ViewModel.h
SUIT_ViewWindow.cxx
SUIT_ViewWindow.h
SUITApp
SVTK
TOOLSGUI
TreeData
ViewerData
ViewerTools
VTKViewer
File Members
•
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Pages
SUIT_SmartPtr.h
Go to the documentation of this file.
1
// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
2
//
3
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5
//
6
// This library is free software; you can redistribute it and/or
7
// modify it under the terms of the GNU Lesser General Public
8
// License as published by the Free Software Foundation; either
9
// version 2.1 of the License, or (at your option) any later version.
10
//
11
// This library is distributed in the hope that it will be useful,
12
// but WITHOUT ANY WARRANTY; without even the implied warranty of
13
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
// Lesser General Public License for more details.
15
//
16
// You should have received a copy of the GNU Lesser General Public
17
// License along with this library; if not, write to the Free Software
18
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
//
20
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21
//
22
23
#if !defined(__SUIT_SMARTPTR_H)
24
#define __SUIT_SMARTPTR_H
25
26
#include "
SUIT.h
"
27
29
class
SUIT_EXPORT
RefCount
{
30
public
:
32
RefCount
() : crefs( 0 ) {}
34
RefCount
(
const
RefCount
& ) : crefs( 0 ) {}
36
virtual
~RefCount
() {}
38
RefCount
&
operator=
(
const
RefCount
& ) {
return
*
this
; }
39
41
void
upcount
() {
42
++crefs;
43
}
44
46
void
downcount()
47
{
48
if
( crefs > 0 && --crefs == 0 )
49
delete
this
;
50
}
51
53
int
refcount
()
const
{
return
crefs; }
54
55
private
:
56
unsigned
long
crefs
;
57
};
58
60
template
<
class
T>
class
SmartPtr
{
61
public
:
63
SmartPtr
() :
p
( 0 ) {}
65
template
<
class
Y>
SmartPtr
( Y* y_ ) {
p
=
dynamic_cast<
T*
>
( y_ );
if
(
p
)
p
->upcount(); }
67
template
<
class
Y>
SmartPtr
(
const
SmartPtr<Y>
& y_ ) {
p
=
dynamic_cast<
T*
>
( y_.
get
() );
if
(
p
)
p
->upcount(); }
69
SmartPtr
(
const
SmartPtr
& t_ ) :
p
( t_.
p
) {
if
(
p
)
p
->upcount(); }
71
virtual
~SmartPtr
(
void
)
72
{
73
if
(
p
)
74
p
->downcount();
75
}
76
77
// getting access
78
T&
operator*
()
const
{
return
*
p
; }
79
T*
operator->
()
const
{
return
p
; }
80
operator
T*()
const
{
return
p
; }
81
T*
get
()
const
{
return
p
; }
82
84
template
<
class
Y>
SmartPtr
&
operator=
(
const
SmartPtr<Y>
& y_ )
85
{
86
if
(
this
== &y_)
return
*
this
;
87
return
operator=
( y_.
get
() );
88
}
90
SmartPtr
&
operator=
(
const
SmartPtr
& t_ )
91
{
92
if
(
this
== &t_)
return
*
this
;
93
return
operator=
( t_.
get
() );
94
}
96
SmartPtr
&
operator=
( T* p_ )
97
{
98
if
(
p
)
99
p
->downcount();
100
p
= p_;
101
if
(
p
)
102
p
->upcount();
103
return
*
this
;
104
}
105
106
// comparing
107
int
operator==
(
const
SmartPtr
& t_ ) {
return
p
== t_.
p
; }
108
int
operator==
(
const
T* p_ ) {
return
p
== p_; }
109
friend
int
operator==
(
const
T* p_,
const
SmartPtr
& t_ ) {
return
t_ == p_; }
110
int
operator!=
(
SmartPtr
& t_ ) {
return
p
!= t_.
p
; }
111
int
operator!=
( T* p_ ) {
return
p
!= p_; }
112
friend
int
operator!=
( T* p_,
SmartPtr
& t_ ) {
return
p_ != t_.
p
; }
113
115
void
nullify
() {
if
(
p
)
p
->downcount();
p
= 0; }
117
bool
isNull
()
const
{
return
p
== 0; }
118
119
private
:
120
T*
p
;
121
};
122
126
#define SMART( C ) SmartPtr<C>
127
128
template
<
class
T1,
class
T2>
SMART
(T1)
downcast
(
SMART
(T2)& t )
129
{
130
return
SMART
(T1)(t.get());
131
}
132
133
#endif // __SUIT_SMARTPTR_H
src
SUIT
SUIT_SmartPtr.h
Copyright © 2007-2017 CEA/DEN, EDF R&D, OPEN CASCADE
Copyright © 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS